Calcolo del determinante durante la risoluzione di


11

Sto risolvendo per un'enorme matrice sparsa positiva definita A usando il metodo del gradiente coniugato (CG). È possibile calcolare il determinante di A utilizzando le informazioni prodotte durante la risoluzione?UNX=BUNUN


Perché vorresti calcolare il determinante? Un tale risultato sarà sicuramente un underflow o un overflow per una matrice enorme comunque. Sarei più caritatevole se ti chiedessi di calcolare il numero della condizione, ma non perdere tempo con il determinante!

Probabilmente lo sapete già, ma i valori di Ritz durante il processo del gradiente coniugato convergono negli autovalori della matrice e da questo si possono ricavare semplici stime per il determinante.
shuhalo,

Risposte:


10

Il calcolo del determinante di una matrice sparsa è in genere costoso come una soluzione diretta e sono scettico sul fatto che CG sarebbe di grande aiuto nel calcolo. Sarebbe possibile eseguire CG per iterazioni (dove A è n × n ) al fine di generare informazioni per l'intero spettro di A , e quindi calcolare il determinante come prodotto degli autovalori, ma questo sarebbe sia lento che numericamente instabile.nUNn×nUN

Sarebbe una buona idea calcolare la fattorizzazione Cholesky sparsa-diretta della tua matrice, diciamo , dove L è triangolare inferiore. Quindi det ( A ) = det ( L ) det ( L H ) = | det ( L ) | 2 , dove det ( L ) è semplicemente il prodotto delle voci diagonali della matrice triangolare inferiore L poiché gli autovalori di una matrice triangolare giacciono lungo la sua diagonale.UN=LLHL

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

Nel caso di una matrice generale non singolare, si dovrebbe usare una decomposizione LU ruotata, diciamo , dove P è una matrice di permutazione, in modo che det ( A ) = det ( P - 1 ) det ( L ) det ( U ) . Poiché P è una matrice di permutazione, det ( P ) = ± 1 e, per costruzione, LPUN=LUP

det(UN)=det(P-1)det(L)det(U).
Pdet(P)=±1Lavrà in genere una diagonale di tutti, il che implica che . È quindi possibile calcolare det ( A ) come ± det ( U ) e riconoscere nuovamente che il determinante di una matrice triangolare è semplicemente il prodotto delle sue voci diagonali. Pertanto, il costo del calcolo del determinante è essenzialmente solo quello di una fattorizzazione.det(L)=1det(UN)±det(U)

UN106X106

@ManuelSchmidt Le matrici sparse di quella dimensione risultanti da discretizzazioni di tipo ad elementi finiti possono di solito essere facilmente fattorizzate con (ad esempio) metodi multifrontali. Sono d'accordo che la fattorizzazione di Cholesky dovrebbe essere usata se la tua matrice è HPD (e la generalizzazione del mio argomento di cui sopra è ovvia).
Jack Poulson,

Grazie per la rapida risposta e risposta. Sfortunatamente la matrice non ha una struttura speciale (che consentirebbe una facile fattorizzazione).
Manuel Schmidt,

2
Sono curioso di sapere perché è necessario calcolare il determinante della matrice. Gli autovalori più alti e più bassi non sono sufficienti?
Jack Poulson,

Fa parte di una complessa funzione di distribuzione della probabilità e non solo di una costante di normalizzazione. So che le distribuzioni possono essere prese in considerazione (e questo è quello che stiamo facendo in questo momento) tuttavia abbiamo tonnellate di dati da modellare e ciascuno dei fattori diventa enorme.
Manuel Schmidt,

6

UNBoffuscareUN«offuscareBoffuscareB=

BUNBUNBdetUNdetBUNB

detUN=Πj=1...offuscareUNλio(UN)Πj=1...offuscareUNλio(B)Πj=offuscareUN+1...offuscareBλio(B)
BUNoffuscareB=detUNdetB

Si scopre che ci sono alcuni dei nostri algoritmi veramente belli e pratici che comportano il calcolo di determinanti considerevoli. Dai
Matt Knepley,

2

Senza entrare (di nuovo) nel perché e nel modo in cui i determinanti sono cattivi, supponiamo che il tuo operatore non sia facilmente fattorizzabile o semplicemente non disponibile come matrice e che tu abbia davvero bisogno di stimare il suo determinante.

UNUN

Probabilmente puoi decodificare il modo in cui questa stima del determinante si realizza nell'implementazione standard di CG seguendo da vicino la Sezione 6.7.3 del libro.


2

det(UN)=Πio=1nαK-1,
αK=rKTrKpKTUNpKrK0K=1,...,nRrKPpK
pK=-rK+Σio=1K-1γiorio.
det(P)=(-1)ndet(R)rKpKUN
ΠK=1nαK=ΠK=1nrKTrKpKTUNpK=det(RTR)det(PTUNP)=det(RTR)det(UN)det(PTP)=(det(UN))-1.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.