Calcul matriciel dans Sofus

vendredi 29 mai 2015
par  Alain BUSSER

En fait, la description des groupes de Lie par Sophus Lie est le fruit d’un travail collaboratif mené par celui-ci avec Felix Klein qui faisant la même chose (tout ramener à la théorie des groupes de transformation) pour la géométrie. Ces échanges quotidiens entre Sophus Lie et Felix Klein ont eu lieu dans les années 1870, soit plusieurs décennies après l’apparition de la théorie des groupes. Autres travaux qui étaient à l’époque considérés comme modernes étaient

  • les notations de Grassmann (A+u pour le translaté de A par le vecteur u ; B-A pour le vecteur allant de A à B ; (A+B)/2 pour le milieu de [AB]...) ;
  • l’élimination de Gauss-Jordan consistant à résoudre un système en additionnant ou soustrayant des équations entre elles (ce qui suppose de donner un sens à ces notions...)

Or les deux notions semblent très naturelles pour des élèves de 2nde qui les réinventent spontanément...

Remarque : La possibilité d’augmenter un vecteur d’un autre vecteur était propre à l’ancienne version de Sofus (alors orthographiée Sophus). L’évolution du langage et de son interface ayant amené à l’introduction de matrices et vecteurs dans Blockly, c’est cette nouvelle version qui est présentée ici. L’ancienne version est lisible en bas de l’article dans un « bloc »

Points et vecteurs

Un point est une matrice ayant deux coordonnées. Un vecteur est aussi une matrice ayant deux coordonnées (ou 3 si on est dans l’espace). Autrement dit, matriciellement parlant, Sofus ne sait pas faire la différence entre points et vecteurs. Ce qui permet de faire des calculs entre eux. Voici donc avec les roulements de tambour de circonstance, la notation de Grassman :

Pour calculer les coordonnées du vecteur allant de A (point) à B (point), on soustrait A à B :

On voit qu’il ne suffit pas d’afficher (ou « ajouter en bas », de la zone d’affichage en l’occurence) un point ou un vecteur pour connaître ses coordonnées : Il faut insérer le dessin représentant l’examen d’une flèche à la loupe pour que ces coordonnées soient affichées en lieu et place du « object Object » qui sert d’objection à JavaScript quand il ne connaît pas le type d’un objet. Pour toutes les matrices il faut insérer cet inspecteur sans lequel on ne peut inspecter les matrices.

Maintenant, pour calculer l’image de A (un point) par la translation de vecteur u, on additionne u à A :

On peut additionner, soustraire des vecteurs mais aussi les multiplier scalairement ou par des réels, et même calculer leur angle. Les addition, soustraction et multiplication par un réel fonctionnent aussi avec d’autres matrices que les vecteurs.

Pour avoir les coordonnées du milieu de AB, on additionne A avec B et on multiplie le résultat par 0,5 :

Sofus a aussi un bloc « symétrique par rapport à » dont on devine l’usage...

Distances et droites

On a vu ci-dessus comment calculer un vecteur à partir de son origine et de son extrémité. Or ce vecteur possède, entre autres, une norme, ce qui permet de calculer la distance AB :

On remarque que pour une fois, on n’a pas eu besoin de la loupe sur la flèche, c’est parce que la norme est un réel et que celui-là n’a pas besoin de subir une inspection puisque JavaScript le connaît.

On peut faire plus simple :

Et pour l’équation réduite de la droite (AB), on a juste à traduire les formules du cours :

Résolution de systèmes

Soit à résoudre le système

  • 2x+3y = 31
  • x-y = 3

On constate que si on multiplie la seconde équation par 3, il y figurera -3y qui va s’annuler avec 3y si on additionne ensuite les deux équations. Pour effectuer cette multiplication par 3, on peut représenter l’équation ax+by=c par le vecteur de coordonnées (a,b,c) et tripler ce vecteur :

L’affichage, avec le codage vectoriel choisi ici, se note 5x=40 qu’il est aisé de résoudre. Mais on peut résoudre tout le système d’un coup, avec les matrices, en se calquant sur la résolution de ax=b, dont la solution x=b/a s’obtient en multipliant les deux membres par l’inverse de a : AX=B peut se résoudre de façon analogue en multipliant les deux membres par l’inverse de A, même si A est une matrice. Une précaution à prendre toutefois : La multiplication des matrices n’étant pas commutative, c’est bien à gauche qu’on doit effectuer la multiplication par A1 (inverse de A) :

Si on essaye de multiplier à droite, on a d’ailleurs une erreur de dimensions...

Similitudes directes

Une similitude directe est le produit d’une constante (le rapport de similitude) par une matrice de rotation. De telles matrices peuvent être définies directement :

Ici, en itérant la similitude, on crée un nuage de points que la tortue de Sofus peut dessiner :

-300-200-1000100200-200-1000100

Diagonalisation

Diagonaliser la matrice $\left( \begin{array}{rr}1&1\\1&0\end{array}\right)$, c’est trouver une matrice diagonale D et surtout une matrice « de passage » P telles que $\left( \begin{array}{rr}1&1\\1&0\end{array}\right) = P D P^{-1}$. On note P1 l’inverse de P, pour des questions de notation des variables dans Blockly. L’algorithme illustré ci-dessous permet de calculer P avant D, c’est-à-dire de donner les vecteurs propres de la matrice, et pour un vecteur propre V, le produit MV donne directement la valeur propre correspondante. L’idée est la suivante :

Lorsque que l’exposant tend vers l’infini, les vecteurs colonne de la matrice deviennent asymptotiquement des vecteurs propres associés à la plus grande valeur propre.

On commence donc par calculer les puissances successives de la matrice pour vérifier ça :

Comme les vecteurs colonne tendent vers l’infini, on s’est permis de normer la première colonne qui « l’emporte sur les autres ». Cela révèle que ses coordonnées convergent vers des nombres que l’on va copier-coller dans les coordonnées d’un vecteur U :

Alors MU est colinéaire avec U, comme le montrent les affichages des quotients des abscisses (respectivement, des ordonnées) : Ces quotients sont non seulement égaux entre eux, mais à une constante qui se trouve dans le menu de Blockly :

Et voilà ! Une valeur propre avec son vecteur propre. Le problème qui se pose maintenant est de voir comment obtenir les autres valeurs propres. L’idée est de se restreindre à un sous-espace perpendiculaire au sous-espace propre déjà connu. Ici on est en dimension 2 et on n’a qu’une droite à trouver, on essaye en faisant tourner U d’un angle droit pour avoir un nouveau vecteur que l’on espère propre à la matrice (remarquer la syntaxe de JavaScript pour les expressions) :

Bingo : On a un vecteur propre et la valeur propre associée est aisément reconnaissable : C’est φ-1. Ensuite, on a les coordonnées (obtenues numériquement) des vecteurs propres, on les copie-colle dans une matrice P que l’on inverse pour avoir P1 et on vérifie que le produit P1×M×P est bien une matrice diagonale à la précision de la machine près, et que c’est même $\left( \begin{array}{rr}\varphi&0\\0&\varphi - 1\end{array}\right)$ :

De nombreux exemples sont fournis avec le logiciel, sous la forme de « corrigés » de sujets du bac S.

Avec Sophus (version clavier)

Géométrie repérée dans le plan

Points et vecteurs

Un point, dans Sophus, est une variable dont la valeur est un tableau de deux nombres. Par exemple, le point A(-3,1) est la variable A de valeur [-3,1]. De même, le point B(2,4) est la variable B dont la valeur est [2,4]:

Le script ci-dessus calcule le vecteur v allant de A à B. Inversement, pour transformer A par la translation de vecteur u(2,1), on peut faire ceci

Milieu

Pour calculer les coordonnées du milieu M de [AB] on peut faire ceci:

Résolution de systèmes

On veut résoudre le système

  • 2x+3y=31 (E)
  • x-y=3 (F)

Ce système est formé de deux équations, dont chacune est représentée sous forme d'un tableau de nombres: [2,3,31] pour la première et [1,-1,3] pour la seconde. Pour résoudre le système, on va additionner ou soustraire les équations entre elles par exemple comme ceci:

Cela permet de savoir que toute solution du système est aussi solution de 3x+2y=34 (et, en remplaçant l'augmentation par une diminution, que toute solution du système est aussi solution de x+4y=28), ce qui n'est pas un grand progrès vers la résolution du système. Mais si on multiplie l'équation F par 3 avant de l'ajouter à l'équation E, la somme est plus intéressante, puisqu'elle ne contient plus de terme en y:

Visiblement, il suffit de diviser l'équation résultante pour trouver x; alors on peut créer une variable x, initialement de même valeur que E, et qui se mette finalement sous la forme [1,0,a] où a est la valeur de x cherchée. En l'occurence on divise par 5:

Comme x=8, l'affichage final est donc [1,0,8]; c'est un tableau donc son troisième élément x.valeur[2] contient 8. Et comme on a laissé les équations E et F inchangées, on peut recommencer pour y (multiplier F par 2 avant de la soustraire à E).

Algorithme de résoulution du système

Dans le script ci-dessous, il suffit de changer les nombres dans les tableaux des deux premières lignes, pour résoudre un système quelconque.


Commentaires