« Mathématiques avec Python et Ruby/Quaternions et octonions en Python » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 34 :
 
La première [[w:Méthode (informatique)|méthode]], l'[[w:Instance (programmation)|initialisation]], crée donc deux variables ''a'' et ''b'' (qui seront des complexes, mais Python ne le sait pas encore) et les rendre accessibles par la notation avec un point, les nombres ''q.a'' et ''q.b'' (les deux complexes qui définissent le quaternion ''q'') étant des [[w:Attribut (informatique)|propriétés]] du quaternion.
 
==Affichage==
 
Pour y voir quelque chose, une méthode d'affichage est nécessaire. Comme Python en possède déjà une (la conversion en chaîne de caractères, ou ''string'', notée ''__str__''), on va la '''surcharger''':
Ligne 45 ⟶ 47 :
aff+=str(self.b.imag)+')k'
return aff
</source>
 
Un quaternion possède deux propriétés qui sont des nombres complexes, mais chacun d'eux est formé de deux nombres réels, donc un quaternion est formé de 4 nombres réels, ce sont ceux qui sont affichés par la méthode ci-dessus, lorsqu'on entre par exemple ''print(q)''.
 
==Fonctions==
 
===Opposé===
 
<source lang="python">
def __neg__(self):
return Quaternion(-self.a,-self.b)
</source>
 
En écrivant ''-q'', on aura désormais l'opposé de ''q''.
 
===Module===
 
<source lang="python">
def __abs__(self):
return hypot(abs(self.a),abs(self.b))
</source>
 
Grâce à cette méthode, ''abs(q)'' retourne un réel, la racine carrée de sa norme.
 
===Conjugué===
 
<source lang="python">
def conjugate(self):
return Quaternion(self.a.conjugate(),-self.b)
</source>
 
''abs(q.conjugate())'' renvoie le même résultat que ''abs(q)'' parce que tout quaternion a la même norme que son conjugué.
 
==Opérations==
 
===Addition===
 
Pour additionner deux quaternions, on additionne leurs ''a'' respectifs, et leurs ''b'' respectifs:
 
<source lang="python">
def __add__(self,other):
return Quaternion(self.a+other.a,self.b+other.b)
</source>
 
===Soustraction===
 
<source lang="python">
def __sub__(self,other):
return Quaternion(self.a-other.a,self.b-other.b)
</source>
 
===Multiplication===
 
Le [[w:Quaternion#Multiplication_de_Hamilton|produit]] de deux quaternions est plus difficile à définir:
 
<source lang="python">
def __mul__(self,other):
c=self.a*other.a-self.b*other.b.conjugate()
d=self.a*other.b+self.b*other.a.conjugate()
return Quaternion(c,d)
</source>
 
Ce produit admet le quaternion ''Quaternion(1,0)'' comme élément neutre, et il est associatif comme tout produit qui se respecte. Mais il n'est pas commutatif:
 
<source lang="python">
p=Quaternion(-2+1J,2+3J)
q=Quaternion(3-2J,5+1J)
print(p*q)
print(q*p)
</source>