Afin de pouvoir construire un
programme d’analyse des données, j’ai écrit un
programme de calcul matriciel en
Scheme qui fournit les outils de base nécessaires.
(NB : il suffit d’y introduire
la forme quadratique fondamentale de l’espace euclidien pour en faire un
programme de calcul tensoriel).
Une matrice est notée comme une
liste de listes de nombres de longueur égale, du type :
'((12 222 34) (45 45 36))
Un vecteur est noté comme
'(41 23 53),
une forme linéaire comme '((5) (67) (2)).
On peut préférer la convention inverse.
On dispose des fonctions
suivantes
Calcul vectoriel :
(sommev v1 v2) donne la somme
de deux vecteurs
(multv v num)donne le produit
d’un vecteur par un scalaire
(prodscalcan v1 v2)donne le
produit scalaire canonique de deux vecteurs
(normcan v) donne la norme
canonique d’un vecteur
Calcul matriciel :
(m? m)
dit si une liste est une matrice
(transp m) donne la matrice
transposée de m
(prodm m n) donne le produit
des deux matrices m et n
(sommem m n) donne la somme des
deux matrices m et n
(multm m num) donne le produit
d’une matrice par un scalaire
(det m) donne le déterminant de
la matrice carrée m
(inverse m)
donne l’inverse de la matrice carrée n
(vectprop m) donne le premier
vecteur propre de la matrice carrée m
(valprop m) donne la première
valeur propre de la matrice carrée m
(vectprop2 m)
donne les deux premiers vecteurs propres et valeurs propres de la matrice carrée m.
Pour appliquer ces fonctions,
il faut taper des instructions selon le format suivant :
(inverse '((31 22) (24 6)))
(det '((31 22) (24 6)))
(prodm '((12 42 63) (54 95 16)) '((31 22) (53 44) (25
6))), etc.
NB : le signe ' doit précéder
les matrices et vecteurs.
Améliorations prévues
Le calcul d'un déterminant
d'ordre n suppose n! opérations, ce qui exige un temps de
calcul élevé dès que n atteint la dizaine. Il faudra utiliser un algorithme mieux conçu. Par contre -
bonne surprise - la recherche
des vecteurs propres converge vite. Cela donne bon espoir pour l'analyse
factorielle.
Il faudra introduire le type "vecteur" de Scheme, puis créer un type
"matrice". |