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

Contenu supprimé Contenu ajouté
Ligne 210 :
 
=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'':
 
<source lang="ruby"
class Octonion
 
def initialize(a,b)
@a,@b = a,b
end
def a
@a
end
def b
@b
end
</source>
 
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:
 
<source lang="ruby">
def to_s
'('+a.a.real.to_s+')+('+a.a.imag.to_s+')i+('+a.b.real.to_s+')j+('+a.b.imag.to_s+')k+('+b.a.real.to_s+')l+('+b.a.imag.to_s+')li+('+b.b.real.to_s+')lj+('+b.b.imag.to_s+')lk'
end
</source>
 
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 8.
 
==Fonctions==
 
Les fonctions sur les octonions se définissent presque comme celles sur les quaternions, Cayley-Dickson oblige:
 
===Module===
 
Comme pour les quaternions:
 
<source lang="ruby">
def abs
Math.hypot(@a.abs,@b.abs)
end
</source>
 
===Conjugué===
 
<source lang="ruby">
def conj
Octonion.new(@a.conj,Quaternion.new(0,0)-@b)
end
</source>
 
==Opérations==
 
=Bibliographie=