Bonjour,
J'ai besoin de faire un algorithme pour calculer la matrice inverse et le produit d'une matrice. Pour le moment je me suis restreint à une matrice de 2 lignes et 2 colonnes (je sais que la formule est différente pour celle de plus de 3 lignes, mais ça je verrai après !).
Je tiens à préciser que mon code est fonctionnel (pour avoir eu le même résultat dans Excel), mais ce que j'aimerais, c'est de voir si c'est possible de l'optimiser ??
Voici mon code:
Pour info, voici le retour de mon résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <?php $matrice = array(array()); $matrice[0][0] = '1'; $matrice[0][1] = '3'; $matrice[1][0] = '2'; $matrice[1][1] = '7'; //Matrice identitaire $matrice[0][2] = '1'; $matrice[0][3] = '0'; $matrice[1][2] = '0'; $matrice[1][3] = '1'; echo "Matrice de départ (+ ajout d'une matrice identitaire):\r\n"; echo implode(" ", $matrice[0]); echo "\r\n"; echo implode(" ", $matrice[1]); echo "\r\n\r\nPremière itération:\r\n"; $matrice2 = array(array()); for ($i = 0; $i < 4; $i++) { $matrice2[0][$i] = $matrice[0][$i]; $matrice2[1][$i] = $matrice[1][$i] - ($matrice[1][0] * $matrice[0][$i]); } echo implode(" ", $matrice2[0]); echo "\r\n"; echo implode(" ", $matrice2[1]); echo "\r\n\r\nDeuxième itération:\r\n"; $matrice3 = array(array()); for ($i = 0; $i < 4; $i++) { $matrice3[0][$i] = $matrice2[0][$i] - ($matrice2[0][1] * $matrice2[1][$i]); $matrice3[1][$i] = $matrice2[1][$i]; } echo implode(" ", $matrice3[0]); echo "\r\n"; echo implode(" ", $matrice3[1]); echo "\r\n\r\nRésultat final de la matrice inverse:\r\n"; for ($i = 0; $i < 2; $i++) echo $matrice3[$i][2]." ".$matrice3[$i][3]."\r\n"; echo "\r\nProduit des 2 matrices (matrice inverse * matrice de départ):\r\n"; echo $matrice3[0][2]." ".$matrice3[0][3]."\t*\t".$matrice[0][0]." ".$matrice[0][1]; echo "\r\n"; echo $matrice3[1][2]." ".$matrice3[1][3]."\t*\t".$matrice[1][0]." ".$matrice[1][1]; echo "\r\n"; $produit = array(array()); $produit[0][0] = ($matrice3[0][2] * $matrice[0][0]) + ($matrice3[0][3] * $matrice[1][0]); $produit[0][1] = ($matrice3[0][2] * $matrice[0][1]) + ($matrice3[0][3] * $matrice[1][1]); $produit[1][0] = ($matrice3[1][2] * $matrice[0][0]) + ($matrice3[1][3] * $matrice[1][0]); $produit[1][1] = ($matrice3[1][2] * $matrice[0][1]) + ($matrice3[1][3] * $matrice[1][1]); echo "\r\nRésultat:\r\n"; for ($i = 0; $i < 2; $i++) echo $produit[$i][0]." ".$produit[$i][1]."\r\n"; ?>
Pour tester directement mon code, j'ai utilisé le site suivant: http://codepad.org/amBlzD6jMatrice de départ (+ ajout d'une matrice identitaire):
1 3 1 0
2 7 0 1
Première itération:
1 3 1 0
0 1 -2 1
Deuxième itération:
1 0 7 -3
0 1 -2 1
Résultat final de la matrice inverse:
7 -3
-2 1
Produit des 2 matrices (matrice inverse * matrice de départ):
7 -3 * 1 3
-2 1 * 2 7
Résultat:
1 0
0 1
Je sais que la librairie de PHP Lapack le permet, mais il faudrait que je l'installe sur le serveur (ce dont je ne préfère pas), c'est pourquoi je refais l'algorithme manuellement.
http://www.php.net/manual/fr/class.lapack.php
Merci
Partager