# Mathématiques avec Python et Ruby/Quaternions et octonions en Ruby
## Ruby

[ Modifier le sommaire ]

## Complexes

On a vu dans 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 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 quaternion.
Dans toute la suite, on va profiter de la gestion des fractions offerte par cmath, avec

## Quaternions
### Definition et affichage
#### Définition

La définition d'un quaternion se fait dans une classe nommée Quaternion:
La première méthode, l'initialisation, crée donc deux variables a et b (qui seront des complexes, mais Ruby ne le sait pas encore):

##### Initialisation

Les nombres complexes a et b seront des propriétés du quaternion:

##### Propriétés a et b

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):
La notation des points se lit de droite à gauche, par exemple a.real veut dire la partie réelle de a et q.a.real, la partie réelle du a de q.
Le quaternion de Ruby ne possède alors que deux propriétés, a et b, mais on va se rattraper sur les méthodes, qui opèrent sur un quaternion (ou deux):

### Fonctions
#### Module

Le module d'un quaternion est un réel:

#### Conjugué

Le conjugué d'un quaternion est un quaternion de même module que celui-ci:

### 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:
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:

#### Multiplication

Le produit de deux quaternions est plus difficile à définir:
La multiplication des quaternions n'est pas commutative, comme le montre l'exemple suivant:

#### Division

Pour diviser un quaternion par un autre, on peut faire ainsi:
Comme ils ont le même module, le quotient d'un quaternion par son conjugué est égal à 1:
Cet exemple révèle que $\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$, c'est-à-dire que $22^{2}+4^{2}+12^{2}+16^{2}=484+16+144+256=900=30^{2}$, qui est une décomposition de $30^{2}$ comme 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:
Si on enregistre ce fichier sous le nom quaternions.rb, il suffit d'insérer require 'quaternions' pour être en mesure d'effectuer des calculs sur les quaternions.

## 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 objet) comprenant deux quaternions a et b, on définit un octonion.

### Définition et affichage
#### Définition

Comme pour les quaternions, on décrit l'objet octonion dans une classe Octonion:
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:
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:

#### Conjugué
### Opérations
#### Addition

Comme pour les quaternions, on additionne les octonions composante par composante (a avec o.a, b avec o.b):

#### Multiplication

Non seulement la multiplication des octonions n'est pas commutative, elle n'est plus associative non plus:

#### Division

Là encore, le quotient d'un octonion par son conjugué est de module 1:

### Résumé

L'objet Octonion de Ruby est lui aussi, assez léger:
En l'enregistrant sous le nom octonions.rb, il suffit d'écrire
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: ; sur le même site, l'auteur propose aussi des octonions.
* Sur les octonions, le livre de John Baez est une lecture hautement conseillée: