El algoritmo más rápido para calcular el número de condición de una matriz grande en Matlab / Octave


9

A partir de la definición del número de condición, parece que se necesita una inversión de matriz para calcularlo, me pregunto si para una matriz cuadrada genérica (o mejor si es simétrica positiva definida) es posible explotar cierta descomposición de la matriz para calcular el número de condición en un forma más rápida

Respuestas:


7

Calcular el número de condición (incluso aproximándolo dentro de un factor de 2) parece tener la misma complejidad que calcular una factorización, aunque no hay teoremas en esta dirección.

A partir de un factor disperso de Cholesky de una matriz definida positiva simétrica, o de una factorización dispersa (con implícita ) de una matriz cuadrada general, se puede obtener el número de condición en la norma de Frobenius calculando el subconjunto inverso disperso de , que es mucho más rápido que calcular el inverso completo. (Relacionado con este es mi artículo: Normas y límites híbridos para sistemas lineales sobredeterminados, Linear Algebra Appl. 216 (1995), 257-266. Http://www.mat.univie.ac.at/~neum/scan/74 .pdf )Q R Q ( R T R ) - 1RQRQ(RTR)1

Editar: Si entonces con respecto a cualquier norma unitariamente invariante,Para el cálculo de factorizaciones QR dispersas, consulte, por ejemplo, http://dl.acm.org/citation.cfm?id=174408 . Para el cálculo del inverso escaso, ver, por ejemplo, mi artículo: Estimación de máxima verosimilitud restringida de covarianzas en modelos lineales dispersos, Genetics Selection Evolution 30 (1998), 1-24. https://www.mat.univie.ac.at/~neum/ms/reml.pdf El costo es aproximadamente 3 veces el costo de la factorización.c o n d ( A ) = c o n d ( R ) = A=QR

cond(A)=cond(R)=cond(RTR).




Por lo tanto, sugiere lo siguiente: Dada una matriz calcule su QR de la forma donde es una matriz triangular superior y es una matriz ortogonal y luego el número de condición viene dado por El punto aquí es cómo encontrar un método rápido para calcular una factorización QR. Estoy en lo cierto? A = Q R R Q cond ( A ) = | El | A | El | El | El | A - 1 | El | ( R T R ) - 1AA=QRRQcond(A)=||A||||A1||(RTR)1
linello

@linello: no del todo; mira mi edición
Arnold Neumaier

¡Gracias! Voy a verificarlo, por cierto, ¿cuál es el costo de este paso?
linello

@linello: para una matriz completa, ; para una matriz dispersa, depende mucho de la estructura de dispersión. O(n3)
Arnold Neumaier

4

Ciertamente es fácil usar la descomposición del valor propio / vector propio de una matriz simétrica o la SVD de una matriz general para calcular el número de condición, pero estas no son formas particularmente rápidas de proceder.

Hay algoritmos iterativos que pueden calcular una estimación del número de condición que es útil para la mayoría de los propósitos sin tener que hacer todo el trabajo de calcular . Ver, por ejemplo, la función en MATLAB. A1condest


Pero la estimación a veces es significativamente demasiado pequeña. Calcular el número de condición (incluso aproximándolo dentro de un factor de 2) parece tener la misma complejidad que calcular una factorización, aunque no hay teoremas en esta dirección.
Arnold Neumaier

1

Para las matrices hermitianas dispersas , puede usar el algoritmo de Lanczos para calcular sus valores propios. Si no es Hermitiano, puede calcular sus valores singulares calculando los valores propios de .H H T HHHHTH

Dado que los valores propios / valores singulares más grandes y más pequeños se pueden encontrar muy rápido (mucho antes de que se complete la tridiagonalización), el método de Lanczos es particularmente útil para calcular el número de condición.


Siempre me he preguntado dónde encontrar un código matlab legible para la iteración de lanczos que aclare cómo obtener el valor propio más pequeño o más grande. ¿Me puede sugerir uno?
linello

No tengo los códigos MATLAB para el algoritmo de Lanczos.
chaohuang
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.