Pregunta

Tengo un programa que usa JAMA y necesito probar si una matriz puede ser invertido Sé que puedo intentarlo y detectar una excepción, pero parece una mala idea (tener un bloque catch como parte de & Quot; normal & Quot; la ruta del código parece ser una mala forma).

Se preferiría una prueba que también devuelva el inverso (o se ejecute en un mejor O () que la operación inversa).

¿Fue útil?

Solución

En general, si no puede resolver la matriz, es singular (no invertible). Creo que la forma en que JAMA hace esto es tratando de resolver la matriz usando la factorización LU, y si falla, devuelve & "; Verdadero &"; para isSingular ().

No existe realmente una forma general de mirar los elementos de una matriz y determinar si es singular: debe verificar cada columna para ver si es ortogonal con las otras (es decir, el espacio nulo para la matriz es 0). La factorización LU es bastante rápida, por lo general ... sin embargo, hay momentos en los que toma la mayor parte de una operación.

¿Tiene un problema de velocidad real que está tratando de superar?

Otros consejos

Si se produce una excepción, ¿cuál es su posición de recuperación?

Si realiza una descomposición LU y encuentra que es singular, ¿detecta la excepción y prueba una SVD (descomposición de valor singular) en su lugar?

suena como si quisiera estimar el recíproco del número de condición.

Este sitio parece algo prometedor ...

Consulte también Golub y Van Loan, p. 128-130 . (Si no tiene una copia, obtenga una).

... o Higham , que es una autoridad en métodos numéricos. Excepto que es un poco difícil analizar las matemáticas ... como caminar a través de un matorral de arbustos de frambuesa. : /

O tal vez revise las fuentes de Octave para su versión de MATLAB's rcond() . Encontré esta publicación .

Para una matriz cuadrada, podría simplemente verificar su determinante --- Matrix.det () devuelve cero si y solo si la matriz es singular Por supuesto, deberá tener cuidado con las matrices mal acondicionadas también.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top