Cálculo determinante mientras se resuelve


11

Estoy resolviendo para una enorme matriz definida positiva escasa A usando el método de gradiente conjugado (CG). ¿Es posible calcular el determinante de A utilizando la información producida durante la resolución?Ax=bAA


¿Por qué desearía calcular el determinante? Tal resultado seguramente será un desbordamiento o un desbordamiento para una matriz enorme de todos modos. ¡Sería más caritativo si hubiera pedido que calcule el número de condición, pero no pierda su tiempo con el determinante!

Probablemente ya lo sepas, pero los valores de Ritz durante el proceso de gradiente conjugado convergen con los valores propios de la matriz, y de esto puedes derivar estimaciones simples para el determinante.
shuhalo

Respuestas:


10

Calcular el determinante de una matriz dispersa suele ser tan costoso como una resolución directa, y soy escéptico de que CG sea de mucha ayuda para calcularlo. Sería posible ejecutar CG para iteraciones (donde A es n × n ) para generar información para todo el espectro de A , y luego calcular el determinante como el producto de los valores propios, pero esto sería lento y numéricamente inestablenAn×nA

Sería una mejor idea calcular la factorización de Cholesky de dispersión directa de su matriz, digamos , donde L es triangular inferior. Entonces det ( A ) = det ( L ) det ( L H ) = | det ( L ) | 2 , donde det ( L ) es simplemente el producto de las entradas diagonales de la matriz triangular inferior L ya que los valores propios de una matriz triangular se encuentran a lo largo de su diagonal.A=LLHL

det(A)=det(L)det(LH)=|det(L)|2,
det(L)L

En el caso de una matriz general no singular, se debe utilizar una descomposición LU pivotada, por ejemplo , donde P es una matriz de permutación, de modo que det ( A ) = det ( P - 1 ) det ( L ) det ( U ) . Como P es una matriz de permutación, det ( P ) = ± 1 y, por construcción, LPA=LUP

det(A)=det(P1)det(L)det(U).
Pdet(P)=±1Lnormalmente tendrá una diagonal de todos, lo que implica que . Por lo tanto, puede calcular det ( A ) como ± det ( U ) y nuevamente reconocer que el determinante de una matriz triangular es simplemente el producto de sus entradas diagonales. Por lo tanto, el costo de calcular el determinante es esencialmente el de una factorización.det(L)=1det(A)±det(U)

A106x106

@ManuelSchmidt Las matrices dispersas de ese tamaño resultantes de discretizaciones de tipo de elementos finitos generalmente se pueden factorizar fácilmente con (por ejemplo) métodos multifrontales. Estoy de acuerdo en que la factorización de Cholesky debería usarse si su matriz es HPD (y la generalización de mi argumento anterior es obvia).
Jack Poulson

Gracias por su rápida respuesta y respuesta. Lamentablemente, la matriz no tiene una estructura especial (lo que permitiría una factorización fácil).
Manuel Schmidt

2
Tengo curiosidad por saber por qué necesita calcular el determinante de la matriz. ¿Los valores propios más altos y más bajos no son suficientes?
Jack Poulson

Es parte de una función de distribución de probabilidad compleja y no solo una constante de normalización. Sé que las distribuciones se pueden factorizar (y eso es lo que estamos haciendo en este momento), sin embargo, tenemos toneladas de datos para modelar y cada uno de los factores se vuelve enorme.
Manuel Schmidt

6

ABdimAdimBdimB=

BABABdetAdetBAB

detA=j=1dimAλi(A)j=1dimAλi(B)j=dimA+1dimBλi(B)
BAdimB=detAdetB

Resulta que hay algunos algoritmos realmente hermosos y prácticos que implican el cálculo de determinantes considerables. Visite www-m3.ma.tum.de/foswiki/pub/M3/Allgemeines/…
Matt Knepley

2

Sin entrar (nuevamente) en por qué y cómo los determinantes son malos, supongamos que su operador no es fácilmente factorizable o simplemente no está disponible como una matriz y que realmente necesita estimar su determinante.

AA

Probablemente pueda realizar ingeniería inversa sobre cómo se obtiene esta estimación del determinante en la implementación estándar de CG siguiendo de cerca la Sección 6.7.3 del libro.


2

det(A)=i=1nαk1,
αk=rkTrkpkTApkrk0k=1,,nRrkPpk
pk=rk+i=1k1γiri.
det(P)=(1)ndet(R)rkpkA
k=1nαk=k=1nrkTrkpkTApk=det(RTR)det(PTAP)=det(RTR)det(A)det(PTP)=(det(A))1.
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.