j'ai écrit un petit algorithme de Gauss-Jordan pour l'inversion matricielle. le pb est qu'il y a des risques de divisions par zéros par exemple, lorsque l'on veut normaliser à cette étape :
j'ai donc insérer une recherche sur le maximum (en valeur absolue)... pour qu'ici, par exemple, les 2 dernières lignes soient inversées je n'ai trouvé ça nulle part sur internet, ce qui m'étonne un peu. Est-ce qu'on peut éventuellement faire autrement, et est-ce que c'est utile (d'autant que ça peut prendre un certain temps pour les grandes matrices) ?
code correspondant, sorti de tout contexte (mais testé) : nbp est le nombre de paramètres deriv2 est la matrice à inverser (matrice essienne nbp x nbp) derinv est la matrice que deviendra, à la fin de l'algorithme, la matrice inverse (nbp x nbp également)
Code :
// recherche du coef max
max = 0;
for (j = i ; j <= nbp ; j++) {
temp = abs(deriv2[j][i]);
if (temp > max) {lmax = j ; max = temp;}
} // fin de recherche du coef max
// echange des 2 lignes
for (j = i ; j <= nbp ; j++) {
temp = deriv2[i][j];
deriv2[i][j] = deriv2[lmax][j];
deriv2[lmax][j] = temp;
}
for (j = 1 ; j <= nbp ; j++) {
temp = derinv[i][j];
derinv[i][j] = derinv[lmax][j];
derinv[lmax][j] = temp;
} // fin d'echange des 2 lignes
P.S. : je viens de me rendre compte que je n'ai mis aucune condition sur l'échange de ligne, qui est particulièrement inutile si il n'y a rien à échanger... ... j'ai en plus bien conscience que je prend de la mémoire inutilement en n'utilisant pas l'indice 0 des tableaux
Message édité par jimipage le 18-01-2006 à 22:47:36
Marsh Posté le 16-01-2006 à 23:13:17
Salut à tous,
j'ai écrit un petit algorithme de Gauss-Jordan pour l'inversion matricielle.
le pb est qu'il y a des risques de divisions par zéros
par exemple, lorsque l'on veut normaliser à cette étape :
1 2 3 4 | 3 2 7 5
0 1 5 3 | 4 9 5 1
0 0 0 3 | 2 5 7 4
0 0 5 2 | 2 4 9 4
j'ai donc insérer une recherche sur le maximum (en valeur absolue)... pour qu'ici, par exemple, les 2 dernières lignes soient inversées
je n'ai trouvé ça nulle part sur internet, ce qui m'étonne un peu. Est-ce qu'on peut éventuellement faire autrement, et est-ce que c'est utile (d'autant que ça peut prendre un certain temps pour les grandes matrices) ?
code correspondant, sorti de tout contexte (mais testé) :
nbp est le nombre de paramètres
deriv2 est la matrice à inverser (matrice essienne nbp x nbp)
derinv est la matrice que deviendra, à la fin de l'algorithme, la matrice inverse (nbp x nbp également)
P.S. : je viens de me rendre compte que je n'ai mis aucune condition sur l'échange de ligne, qui est particulièrement inutile si il n'y a rien à échanger... ... j'ai en plus bien conscience que je prend de la mémoire inutilement en n'utilisant pas l'indice 0 des tableaux
Message édité par jimipage le 18-01-2006 à 22:47:36
---------------
un perlien qui programme salement