La puissance des blocs map et combine de Snap! , associée à la nouvelle librairie APL (initialement A programming language, officieusement Array Processing Language) disponible depuis la version 6 de Snap! nous a permis d’explorer et de revisiter certains algorithmes de manipulation de matrices afin d’élaborer un outil de calcul matriciel dans Snap!.
C’est en testant les fonctions mises au point que nous avons mis en évidence un résultat original d’algèbre linéaire concernant les matrices carrées d’ordre n des entiers naturels de 1 à n².
Cet article se veut de présenter un nouvel outil de calcul matriciel [1] développé grâce à Snap!. Nous y aborderons des notions d’algèbre linéaire essentielles pour manipuler des matrices.
Tout d’abord, nous présenterons quelques how to :
– Comment générer la matrice Identité de taille n ?
– Comment générer une matrice de nombres aléatoires ?
– Sélection d’une ligne ou d’une colonne dans une matrice A
– Comment extraire le coefficient a_i,j d’une matrice A ?
– Comment calculer la trace d’une matrice à l’aide de la puissance du bloc {map} – Comment calculer le déterminant d’une matrice donnée à l’aide d’une formule récursive ?
– Comment obtenir la comatrice d’une matrice donnée ?
– Comment obtenir l’inverse d’une matrice ?
– Puissances d’une matrice
Nous avons essayé dans l’écriture des blocs de cet outil de toujours avoir une pensée fonctionnelle et non pas une pensée séquentielle. On pourra se référer à cet article : Tout est algorithme, tout est fonction, dans lequel on explique qu’amener les algorithmes aux données est l’essence de la programmation fonctionnelle… [2]
La mise au point de cet outil nous a permis ensuite de découvrir de manière empirique un résultat original d’algèbre linéaire. Nous avons d’abord émis une conjecture sur les matrices carrées d’ordre n d’entiers naturels de 1 à n².
– Comment générer une telle matrice carrée ?
– Calcul du déterminant de cette matrice carrée pour n appartenant à 2, 3, 4, 5, 6, 7 – Conjecture : Dès que n ≥ 3, le déterminant de la matrice carrée d’ordre n dont les coefficients sont les entiers de 1 à n² (dans l’ordre naturel) est égal à zéro.
– Preuve très courte de ce théorème.
Depuis la version 6.0.0 de Snap!, une librairie très puissante pour les manipulations de vecteurs lui a été ajoutée par l’un de ses développeurs, Brian Harvey. C’est la librarie APL adaptée par Brian Harvey du langage APL : initialement /A Programming Language/, officieusement Array Processing Langage. Ce langage très puissant a été créé dans les années soixante pour décrire commodément des opérations globales sur des tableaux (de booléens, de données numériques et de caractères). Et l’intégration de cette librairie à Snap! lui confère de nouvelles vastes possibilités pour traiter les vecteurs de toute sorte.
Les formules utilisées dans cet article découlent d’un magnifique livre d’algèbre linéaire Matrices et réduction de Cabane et Lebœuf édité chez Ellipses en 1990.
Comme tout un chacun sait (au moins vous qui lisez cet article...), la trace d’une matrice est la somme des éléments diagonaux.
Nous avons donc deux manière de calculer la trace : 1. version « old school » 2. avec le bloc {map}
1. La version que j’appelle old school se fait classiquement avec une boucle for :
2. Avec le bloc {map}, c’est beaucoup plus élégant (et efficace ! ) :
Sur la matrice carré d’ordre 4, B = [ [6,8,9,4],[9,6,1,7],[8,8,2,3],[1,5,7,8] ],
que l’on peut importer en csv si on le souhaite
,
les coefficients diagonaux s’obtiennent en appliquant la fonction qui calcule les coefficients a_i,j de la matrice B à la matrice ρ(4) [3] grâce au bloc map.
Ainsi le bloc map permet d’appliquer la fonction a_i,j( )( )(B) aux éléments de la liste ρ(4)=[1,2,3,4] :
Il ne reste alors plus qu’à sommer les éléments diagonaux obtenus en appliquant l’opérateur + grâce au bloc combine.
La mise au point de notre outil de calcul matriciel nous a donc permis de découvrir ce résultat de manière empirique : Dès que n ≥ 3, le déterminant de la matrice carrée d’ordre n dont les coefficients sont les entiers de 1 à n² (dans l’ordre naturel) est égal à zéro.
Prenons u = (1,2,…,n) et a = (n,n, ...,n).
Les lignes de la matrice sont u, a + u, 2a + u, ..., (n-1)a + u.
Quand on développe le déterminant det(u, a + u, 2a + u, ..., (n-1)a + u), dans le cas où n ≥ 3, dans chaque terme, il y a au moins deux u ou au moins deux a, donc tous les termes sont nuls. [6]
C’est le titre d’un {Lighting talk} du colloque Snap!Con 2021 au cours duquel j’ai présenté ce résultat.
Le keynote de cette contribution est disponible ici.
Snap! 7 permet la création de nouvelles catégories de blocs : la catégorie Matrix tools
L’utilisation de certains blocs de ce projet nécessite d’activer les extensions Javascript de Snap! comme ceci :
Sinon vous aurez ce genre de retour :
Je vous souhaite une agréable ballade dans ce projet de calcul matriciel. Afin de vous aider à découvrir ce projet et afin de vous en faciliter son utilisation, j’ai créé un lutin par étape :
N’hésitez pas à l’utiliser et à le faire utiliser par vos élèves de terminale et post-bac !
Vous trouverez au bas de cet article en téléchargement le support de la présentation de cet article qui s’est déroulée lors d’un séminaire de l’IREM de la Réunion à l’Université de Saint-Denis le 6 avril 2022
Et ci-dessous le document XML qui contient les catégories Snap! de Calcul Matriciel à importer dans une instance de Snap! :
[1] Cet outil se veut différent des autres outils que vous utilisez par sa simplicité d’utilisation amenée par la programmation visuelle (de simples blocs à déplacer) mais aussi surtout par la manière de manipuler les données des matrices.
[2] {Functional programming is a different approach that is becoming important in “real world” programming because of parallelism, i.e., the fact that different processors can be manipulating the same data at the same time.} Brian Harvey, Snap ! Reference Manual 7.0 page 48
Dans un site très personnel, Olivier Sicard nous offres quelques « délires » de mathématiques, algorithmique et programmation. Entre autres pépites, on découvrira le Rubix-Tore, la loi normale asymétrique, la théorie du choix social et le dessin à l’aide des séries de Fourier.
Après Elwyn Berlekamp l’année dernière, c’est au tour du centenaire Richard Guy et de l’immense John Conway. Ce document de Richard Guy (une mise en garde contre le raisonnement inductif) montre bien le style unique de son auteur, en plus d’être une mine de ressources pour des exercices. Conway, outre son jeu de la vie, a créé des dizaines de jeux, dont Sprouts, très populaire dès le CP.
On sait bien que Nicolas Bourbaki n’était pas le nom d’une personne mais le pseudonyme d’un groupe. L’équivalent en informatique théorique est Claude Livercy, auteur de la théorie des programmes. Roger Mohr était un des membres de Claude Livercy.
Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.
Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.
Commentaires