« 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.