2011-05-18 119 views
9

En numpy/scipy, ¿cuál es la forma canónica de calcular el inverso de una matriz triangular superior?numpy: invertir una matriz triangular superior

La matriz se almacena como 2D numpy matriz con los elementos sub-diagonal cero, y el resultado también se debe almacenar como una matriz 2D.

editar Lo mejor que he encontrado hasta ahora es scipy.linalg.solve_triangular(A, np.identity(n)). ¿Es asi?

+0

¿Qué tan grande es la matriz triangular? En mi máquina, el sencillo 'numpy.linalg.inv' es más rápido que' solve_triangular' para matrices de hasta 40x40. – amcnabb

+0

@NPE ¿Alguna actualización de esto? ¿También ha notado algún problema al llamar al anterior (* TRTRS)? Mi matriz es lo suficientemente pequeña. Solo puedo escribir una sustitución inversa para la inversa, pero me gustaría evitarla si es posible. – Daniel

Respuesta

6

Realmente no hay una rutina de inversión, per se. scipy.linalg.solve es la forma canónica de resolver una ecuación matriz-vector o matriz-matriz, y se le puede dar información explícita sobre la estructura de la matriz que usará para elegir la rutina correcta (probablemente el equivalente de BLAS3 dtrsm en este caso) .

LAPACK incluye doptri para este propósito, y scipy.linalg expone una interfaz de lapack en bruto. Si la matriz inversa es realmente lo que quiere, entonces podría intentar usar eso.

+1

¿Realmente necesitas la matriz invertida? La ruta LAPACK es la mejor si realmente la necesitas invertida. De lo contrario linalg.solve hace un trabajo bastante decente con LAPACK para resolver un sistema lineal. – Ivan

+0

(+1) para señalar la interfaz C sin procesar. – NPE

+2

¿Sería 'doptri' la rutina correcta? Si entiendo correctamente, el 'op' indica una matriz ortogonal. Como el póster tiene una matriz triangular, ¿no debería ser 'tp' o' tr'? No soy un experto en LAPACK. Mi información proviene de: http://en.wikipedia.org/wiki/LAPACK – amcnabb

Cuestiones relacionadas