Question

J'ai un programme qui utilise JAMA et qui doit être testé, une matrice peut être inversé. Je sais que je peux juste essayer et attraper une exception, mais cela semble être une mauvaise idée (avoir un bloc catch dans le cadre du chemin de code & "Normal &" Semble être de mauvaise forme).

Un test qui renvoie également l'inverse (ou une exécution dans une meilleure opération O () que l'opération inverse) serait préféré.

Était-ce utile?

La solution

En général, si vous ne pouvez pas résoudre la matrice, c’est singluar (non invertable). Je pense que JAMA essaie de résoudre la matrice à l'aide de la factorisation de LU. Si elle échoue, elle renvoie & "True &"; pour isSingular ().

Il n’existe pas vraiment de moyen général de regarder les éléments d’une matrice et de déterminer si elle est singulière - vous devez vérifier chaque colonne pour voir si elle est orthogonale aux autres (c’est-à-dire que l’espace nul de la matrice est 0) La factorisation de LU est assez rapide, en général ... il arrive parfois que cela prenne la majeure partie d'une opération.

Avez-vous un problème de vitesse que vous essayez de résoudre?

Autres conseils

Si une exception est levée, quelle est votre position de récupération?

Si vous effectuez une décomposition de LU et trouvez qu'il est singulier, attrapez-vous l'exception et essayez-vous une SVD (décomposition en valeurs singulières)?

on dirait que vous souhaitez estimer l'inverse du numéro de condition.

Ce site est plutôt prometteur ...

Voir aussi Golub et Van Loan, p. 128-130 . (Si vous n'en avez pas de copie, procurez-vous-en une.)

... ou Higham , qui est une autorité sur les méthodes numériques. Sauf que c'est un peu difficile à analyser ... comme marcher dans un bosquet de framboisiers. : /

Vous pouvez également vérifier la version de la source MATLAB dans les sources Octave. rcond() . J'ai trouvé cet article .

Pour une matrice carrée, vous pouvez simplement vérifier son déterminant - Matrix.det () renvoie zéro si et seulement si la matrice est singulière. Bien entendu, vous devrez également vous méfier des malus .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top