Qual è l'algoritmo più veloce per il calcolo della matrice inversa e il suo determinante per matrici simmetriche definite positive?


10

Data una matrice simmetrica definita positiva, qual è l'algoritmo più veloce per calcolare la matrice inversa e il suo determinante? Per problemi a cui sono interessato, la dimensione della matrice è 30 o meno.

  1. Alta precisione e velocità sono davvero necessarie. (vengono eseguite milioni di matrici)
  2. Il determinante è necessario. In ogni calcolo, è richiesto solo un elemento della matrice iverse. Grazie!

Devi invertire milioni di tali matrici? Altrimenti, la velocità non dovrebbe essere un problema.
Wolfgang Bangerth,

Ho modificato il titolo e la domanda per maggiore chiarezza. Se ho commesso degli errori, per favore fatemelo sapere.
Geoff Oxberry,

@Wolfgang Bangerth Sì, la velocità dovrebbe essere considerata.
Ordina l'

1
Sai quale elemento della matrice inversa è necessario? O può essere una voce casuale?
Memming

2
@Orders Il tuo commento e la tua modifica sembrano contraddittori: hai bisogno di un elemento dell'inverso o di tutti loro?
Federico Poloni,

Risposte:


12

Per problemi a cui sono interessato, la dimensione della matrice è 30 o meno.

Come osserva WolfgangBangerth, a meno che tu non abbia un gran numero di queste matrici (milioni, miliardi), le prestazioni di inversione di matrice in genere non sono un problema.

Data una matrice simmetrica definita positiva, qual è l'algoritmo più veloce per calcolare la matrice inversa e il suo determinante?

Se la velocità è un problema, dovresti rispondere alle seguenti domande:

  • Hai davvero bisogno di tutto il contrario? (Molte applicazioni non hanno bisogno di formare un inverso esplicito.)
  • Hai davvero bisogno del determinante? (I determinanti sono rari, ma certamente non inauditi nella scienza computazionale.)
  • Hai bisogno di alta precisione? (Gli algoritmi a bassa precisione tendono ad essere più veloci.)
  • Sarebbe sufficiente un'approssimazione probabilistica? (Gli algoritmi probabilistici tendono ad essere più veloci.)

A=LLTdet(A)=i=1nlii2det(A1)=i=1nlii2

Annn3/3potrebbe essere un algoritmo più veloce che vale la pena considerare se (1) devi davvero fattorizzare un gran numero di matrici, (2) la fattorizzazione è davvero il passaggio limite nella tua applicazione, e (3) qualsiasi errore riscontrato nell'uso di un algoritmo randomizzato è accettabile. Le tue matrici sono probabilmente troppo piccole per rendere utili gli algoritmi sparsi, quindi le uniche altre opportunità per algoritmi più veloci richiederebbero una struttura a matrice aggiuntiva (ad esempio, a bande) o sfruttando la struttura dei problemi (ad esempio, forse potresti abilmente ristrutturare l'algoritmo in modo da non più bisogno di calcolare una matrice inversa o il suo determinante). Gli algoritmi determinanti efficienti sono all'incirca il costo per risolvere un sistema lineare, entro un fattore costante, quindi gli stessi argomenti usati per i sistemi lineari si applicano anche al calcolo dei determinanti.


B=A1bijjBjbijbnn=lnn2b11dove si devono calcolare le sostituzioni complete avanti e indietro.
Stefano M,

@StefanoM Ancora meglio, puoi permutare la tua matrice prima dell'inizio del calcolo in modo da essere sempre nel migliore dei casi.
Federico Poloni,
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.