21 votos

Determinar si una matriz simétrica es definida positivamente (algoritmo)

Estoy intentando crear un programa que descomponga una matriz utilizando la descomposición de Cholesky.

La descomposición en sí no es un algoritmo difícil, pero una matriz, para ser elegible para la descomposición Cholesky, debe ser simétrica y positiva-definida. Comprobar si una matriz es simétrica es fácil, pero la parte positiva resulta más compleja.

He leído sobre el criterio de Sylvester, pero eso lleva a determinantes, y en base a lo que encontré en la web, esos son bastante extensos y difíciles en las computadoras.

En pocas palabras, ¿hay algo que se me pueda escapar? Debido al hecho de que la matriz es cuadrada o algo así, ¿hay posiblemente una forma más sencilla de determinar si es positiva?

Saludos, Paul

26voto

Andrew Puntos 140

Mathcast lo tenía; de hecho, en el trabajo práctico, se utiliza la descomposición de Cholesky $\mathbf G\mathbf G^T$ para probar eficientemente si una matriz simétrica es definida positiva. El único cambio que necesita hacer para convertir su programa de descomposición en una comprobación de la definición positiva es insertar una comprobación antes de tomar las raíces cuadradas requeridas de que la cantidad a rootear es positiva. Si es cero, tienes una matriz semidefinida positiva; si no es ni cero ni positiva, entonces tu matriz simétrica no es (semi)definida positiva. (Desde el punto de vista de la programación, debería ser fácil lanzar una excepción dentro de un bucle. Sin embargo, si tu lenguaje no tiene ninguna forma de romper un bucle, te compadezco).

Como alternativa, se utiliza el $\mathbf L\mathbf D\mathbf L^T$ descomposición aquí (un enfoque equivalente en el sentido de que $\mathbf G=\mathbf L\sqrt{\mathbf D}$ ); si aparece alguna entrada no positiva en $\mathbf D$ , entonces su matriz no es positiva definida. Obsérvese que se podría establecer que el bucle para calcular la descomposición se rompa una vez que un elemento negativo de $\mathbf D$ antes de que termine la descomposición.

En cualquier caso, no entiendo por qué la gente evita usar Cholesky aquí; la afirmación es "una matriz es definida positiva si y sólo si posee una descomposición Cholesky". Es un bicondicional; ¡explótalo! Es excesivamente más barato que comprobar sucesivamente los menores o hacer una descomposición eigénerica, FWIW.

5voto

childno.de Puntos 123

No creo que haya una forma más sencilla que calcular una descomposición o un determinante a menos que tu matriz tenga una forma especial. Por ejemplo, si se trata de una matriz de covarianza de la muestra, entonces es semidefinida positiva por construcción.

3voto

Jan W. Puntos 121

Otras posibilidades son utilizar el algoritmo del gradiente conjugado para comprobar la definición positiva. En teoría, este método termina tras un máximo de n iteraciones (siendo n la dimensión de la matriz). En la práctica, es posible que tenga que funcionar un poco más. Su implementación es trivial. También puede utilizar una variante del método de Lanczos para estimar el valor propio más pequeño de su matriz (lo que es mucho más fácil que calcular todos los valores propios).

En cualquier caso, recordemos que estos métodos (y la descomposición de Cholesky) comprueban numérico la definición positiva. Es posible que el valor propio más pequeño de su matriz sea, por ejemplo, 1,0e-16 y que los errores de cancelación debidos a la aritmética de precisión finita hagan que su Cholesky (o gradiente conjugado) se rompa.

1voto

goldenmean Puntos 872

Tal vez alguien tenga una aproximación iterativa o alguna otra aproximación aproximada, pero parece que para estar seguro hay que calcular determinantes y aplicar El criterio de Sylvester (como ha señalado).

La de Sylvester establece que si, para todo $k<n$ El $\det(A_k) > 0$ , donde $A_k$ es el $k$ El principal menor, entonces la matriz es positiva definida. El único algoritmo determinista y eficiente para calcular determinantes que conozco es el Algoritmo Bareiss para lo cual puede ver El documento original de Bareiss o la excelente referencia de Chee Yap aquí .

El algoritmo de Bareiss, en sus pasos intermedios, acaba calculando el determinante de la $k$ menores de la matriz para todos los $k<n$ para que tengas una prueba sencilla de definición positiva en caso de que acabes implementando el algoritmo Bareiss tú mismo.

Me interesaría saber si hay algún método iterativo que permita confiar en la definición positiva de una matriz.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X