Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Licence CC BY-NC-ND Thierry Parmentelat & Arnaud Legout Inria - UCA

exercice - niveau avancé

Le corps des quaternions est une extension non commutative du corps des complexes; la construction mathématique est totalement hors sujet pour nous, on va se contenter de ces quelques bribes :

attention : l’addition est bien commutative,
mais à nouveau la multiplication n’est pas commutative
ainsi par exemple ij=kij = k mais ji=kji = -k

les règles indiquées ci-dessus impliquent (on vous laisse vous en assurer) que la table de multiplication est la suivante

On se propose ici d’écrire une classe pour représenter les quaternions.

Notes importantes

# vous vous souvenez des type hints ?
# sinon retournez voir la semaine 4 séquence 1

def number_str(x: float) -> str:
    """
    la fonction utilisée dans Quaternion.__repr__ 
    pour la mise en forme des nombres
    """
    if isinstance(x, int):
        return f"{x}"
    elif isinstance(x, float):
        return f"{x:.1f}"
from corrections.cls_quaternion import exo_quaternion
exo_quaternion.example()
Loading...

# votre code

class Quaternion:
    
    def __init__(self, a, b, c, d):
        ...
# correction
exo_quaternion.correction(Quaternion)
Loading...

# peut-être utile pour debugger ?
I = Quaternion(0, 1, 0, 0)
J = Quaternion(0, 0, 1, 0)
K = Quaternion(0, 0, 0, 1)
I*J == K
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[6], line 1
----> 1 I*J == K

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
J*K == I
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[7], line 1
----> 1 J*K == I

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
K*I == J
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[8], line 1
----> 1 K*I == J

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
I*I == J*J == K*K == -1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[9], line 1
----> 1 I*I == J*J == K*K == -1

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
J*K == 1j
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[10], line 1
----> 1 J*K == 1j

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
K*J == -1j
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[11], line 1
----> 1 K*J == -1j

TypeError: unsupported operand type(s) for *: 'Quaternion' and 'Quaternion'
Quaternion(1, 2, 3, 4) == (1+2j) + J * Quaternion(3-4j)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 Quaternion(1, 2, 3, 4) == (1+2j) + J * Quaternion(3-4j)

TypeError: Quaternion.__init__() missing 3 required positional arguments: 'b', 'c', and 'd'
...
Ellipsis

comme exercice, vous pouvez aussi vous amuser à vérifier l’identité suivante (extraite de cette vidéo de 3blue1brown)