« Mathématiques avec Python et Ruby/Quaternions et octonions en Ruby » : différence entre les versions
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
|||
Ligne 1 :
<noinclude>{{Mathématiques avec Python et Ruby}}</noinclude>
==Complexes==
On a vu dans [[Mathématiques avec Python et Ruby/Nombres complexes en Ruby|le chapitre précédent]] que pour Ruby, un nombre complexe ''z'' est essentiellement une structure abritant deux réels, accessibles par ''z.real'' et ''z.imag'' respectivement. La [[w:Octonion#Construction_de_Cayley-Dickson|construction de Cayley-Dickson]] généralise ce point de vue: En prenant deux complexes ''a'' et ''b'', on peut les regrouper dans une nouvelle structure qui est considérée comme un nombre: Un [[w:Quaternion|quaternion]].
Ligne 11 :
</source>
==Quaternions==
===Definition et affichage===
====Définition====
La définition d'un quaternion se fait dans une [[w:Classe (informatique)|classe]] nommée ''Quaternion'':
Ligne 27 :
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 Ruby ne le sait pas encore):
=====Initialisation=====
<source lang="ruby">
Ligne 38 :
=====Propriétés a et b=====
<source lang="ruby">
Ligne 52 :
Désormais on accède aux deux complexes ''a'' et ''b'' d'un quaternion ''q'' par ''q.a'' et ''q.b''.
====Affichage====
Pour afficher un quaternion ''q'' avec ''puts(q)'', il est nécessaire de redéfinir (une sorte de '''surcharge''') sa méthode de conversion en chaîne de caractères (''string''):
Ligne 66 :
Le quaternion de Ruby ne possède alors que deux propriétés, ''a'' et ''b'', mais on va se rattraper sur les [[w:Méthode (informatique)|méthodes]], qui opèrent sur un quaternion (ou deux):
===Fonctions===
====Module====
Le module d'un quaternion est un réel:
Ligne 79 :
====Conjugué====
Le conjugué d'un quaternion est un quaternion de même module que celui-ci:
Ligne 89 :
</source>
===Opérations===
====Addition====
Pour additionner deux quaternions, on additionne leurs ''a'' respectifs, et leurs ''b'' respectifs, et on crée un nouveau quaternion à partir des deux nombres complexes obtenus:
Ligne 103 :
Pour calculer et afficher la somme des quaternions ''p'' et ''q'', il suffit alors d'entrer ''puts(p+q)''.
====Soustraction====
La soustraction des quaternions relève d'un principe analogue:
Ligne 113 :
</source>
====Multiplication====
Le [[w:Quaternion#Multiplication_de_Hamilton|produit]] de deux quaternions est plus difficile à définir:
Ligne 132 :
</source>
====Division====
Pour diviser un quaternion par un autre, on peut faire ainsi:
Ligne 153 :
Cet exemple révèle que <math>\left(-\frac{22}{30}\right)^2+\left(\frac{4}{30}\right)^2 +\left(\frac{12}{30}\right)^2+\left(\frac{16}{30}\right)^2=1</math>, c'est-à-dire que <math>22^2+4^2+12^2+16^2=484+16+144+256=900=30^2</math>, qui est une décomposition de <math>30^2</math> comme [[w:Théorème_des_quatre_carrés_de_Lagrange|somme de 4 carrés]].
===Résumé===
La classe Quaternion de Ruby tient en entier dans un fichier plutôt léger, au vu de ses possibilités:
Ligne 209 :
==Octonions==
Ce qui est intéressant avec la construction de Cayley-Dickson utilisée ci-dessus pour les quaternions, c'est qu'elle se généralise: En définissant une structure (un [[w:Objet (informatique)|objet]]) comprenant deux quaternions ''a'' et ''b'', on définit un [[w:Octonion|octonion]].
===Définition et affichage===
====Définition====
Comme pour les quaternions, on décrit l'objet ''octonion'' dans une classe ''Octonion'':
Ligne 237 :
Au passage on définit les propriétés ''a'' et ''b'' de l'octonion comme celles du quaternion, sauf que cette fois-ci ce ne sont plus des complexes mais des quaternions. Mais comme Ruby est faiblement typé, cette particularité n'apparaîtra que lorsque ''a'' ou ''b'' sera utilisé.
====Affichage====
Là encore, la méthode ''to_s'' se définit comme celle des quaternions, mais il y a 8 nombres à afficher au lieu de 4:
Ligne 249 :
Pour accéder au premier de ces nombres, que est la partie réelle du ''a'' de ''a'', on note ''a.a.real''. Autrement dit, on parcourt un arbre binaire, de profondeur 3.
===Fonctions===
Les fonctions sur les octonions se définissent presque comme celles sur les quaternions, Cayley-Dickson oblige:
====Module====
Comme pour les quaternions:
Ligne 263 :
</source>
====Conjugué====
<source lang="ruby">
Ligne 271 :
</source>
===Opérations===
====Addition====
Comme pour les quaternions, on additionne les octonions composante par composante (''a'' avec ''o.a'', ''b'' avec ''o.b''):
Ligne 283 :
</source>
====Soustraction====
<source lang="ruby">
Ligne 291 :
</source>
====Multiplication====
<source lang="ruby">
Ligne 309 :
</source>
====Division====
<source lang="ruby">
Ligne 325 :
</source>
===Résumé===
L'objet ''Octonion'' de Ruby est lui aussi, assez léger:
Ligne 385 :
pour être en mesure d'effectuer des calculs sur les octonions en Ruby.
==Bibliographie==
*En fait, les quaternions existent déjà sous Ruby, à condition de les télécharger: [http://www.math.kobe-u.ac.jp/~kodama/tips-ruby-quaternion.html]; sur le même site, l'auteur propose aussi des octonions.
|