2009-09-14 35 views

Répondre

30

L'inexactitude que j'ai mentionnée est avec la méthode INV, pas la mise en œuvre de MATLAB. Vous devez utiliser QR, LU ou d'autres méthodes pour résoudre des systèmes d'équations, car ces méthodes n'exigent généralement pas d'équarrir le numéro de condition du système en question. L'utilisation de inv nécessite généralement une opération qui perd de sa précision en quadrillant le numéro de condition du système d'origine.

--Loren

19

Je pense que le but du blog de Loren n'est pas que la fonction inv de MATLAB soit particulièrement plus lente ou plus inexacte que n'importe quelle autre implémentation numérique du calcul d'une matrice inverse; Au contraire, dans la plupart des cas, l'inverse n'est pas nécessaire et vous pouvez procéder par d'autres moyens (par exemple résoudre un système linéaire en utilisant \ - l'opérateur de barre oblique inversée - plutôt que de calculer un inverse).

+1

De plus, l'opérateur backslash donne des résultats plus précis que inv (A) * b: il choisit un algorithme approprié pour résoudre A * x = b. – Martijn

+0

Pour être explicite pour les étudiants là-bas, vous voulez écrire 'x = A \ b' au lieu de' x = inv (A) * b' afin de résoudre le système linéaire Ax = b. Le calcul de l'inverse de A n'est pas nécessaire, pas robuste, et pas rapide. Dans une grande partie des formules mathématiques où vous voyez un A^-1, l'algorithme peut être implémenté SANS jamais calculer l'inverse de A. Cela signifie que, pour les petites matrices de rang complet, calculer inv (A) sera presque toujours être parfaitement bien. Pour les grandes matrices ou les matrices mal conditionnées, cela peut devenir problématique. –

0

inv() est certainement plus lent que \ sauf si vous avez plusieurs vecteurs côté droit de résoudre pour. Cependant, le conseil de MathWorks concernant l'inexactitude est dû à une limite trop conservatrice dans un résultat d'algèbre linéaire numérique. En d'autres termes, inv() n'est PAS inexact. Le lien élabore en outre: http://arxiv.org/abs/1201.6035

Plusieurs manuels largement utilisés conduisent le lecteur à croire que la résolution d'un système d'équations linéaires Ax = b en multipliant le vecteur b par une inv inverse calculée (A) est inexacte. Pratiquement tous les autres manuels sur l'analyse numérique et l'algèbre linéaire numérique déconseillent d'utiliser des inverses calculés sans indiquer si cela est exact ou non. En fait, selon des hypothèses raisonnables sur la façon dont l'inverse est calculé, x = inv (A) * b est aussi précis que la solution calculée par les meilleurs solveurs stables vers l'arrière.