Algoritmo più veloce per calcolare il numero di condizione di una matrice di grandi dimensioni in Matlab / Octave


9

Dalla definizione del numero di condizione sembra che sia necessaria un'inversione di matrice per calcolarla, mi chiedo se per una matrice quadrata generica (o meglio se definita positiva simmetrica) è possibile sfruttare una decomposizione della matrice per calcolare il numero di condizione in un modo più veloce.

Risposte:


7

Il calcolo del numero di condizione (anche approssimandolo entro un fattore 2) sembra avere la stessa complessità del calcolo di una fattorizzazione, sebbene non vi siano teoremi in questa direzione.

Da uno scarso fattore di Cholesky di una matrice definita positiva simmetrica, o da una sparsa fattorizzazione Q R (con Q implicita ) di una matrice quadrata generale, si può ottenere il numero di condizione nella norma di Frobenius calcolando il sottoinsieme sparso inverso di ( R T R ) - 1 , che è molto più veloce rispetto al calcolo dell'intero inverso. (A questo proposito è correlato il mio documento: norme ibride e limiti per sistemi lineari indeterminati, Linear Algebra Appl. 216 (1995), 257-266. Http://www.mat.univie.ac.at/~neum/scan/74 .pdf )RQRQ(RTR)1

Modifica: Se allora rispetto a qualsiasi norn unitamente invariante, c o n d ( A ) = c o n d ( R ) = A=QRPer il calcolo di fattorizzazioni QR sparse, consultare ad esempiohttp://dl.acm.org/citation.cfm?id=174408. Per il calcolo dell'inverso sparse, vedi, ad esempio, il mio articolo: Stima della probabilità massima limitata delle covarianze nei modelli sparsi lineari, Genetics Selection Evolution 30 (1998), 1-24. https://www.mat.univie.ac.at/~neum/ms/reml.pdf Il costo è circa 3 volte il costo per la fattorizzazione.

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




Quindi stai suggerendo quanto segue: Data una matrice calcola il suo QR della forma A = Q R dove R è una matrice triangolare superiore e Q è una matrice ortogonale e quindi il numero di condizione è dato da cond ( A ) = | | A | | | | A - 1 | | ( R T R ) - 1 Il punto qui è come trovare un metodo veloce per calcolare una fattorizzazione QR. Ho ragione? AA=QRRQcond(A)=||A||||A1||(RTR)1
Linello

@linello: non del tutto; vedi la mia modifica.
Arnold Neumaier,

Grazie! Ho intenzione di controllarlo, tra l'altro qual è il costo di questo passaggio?
linello,

O(n3)

4

È certamente facile usare la decomposizione autovalore / autovettore di una matrice simmetrica o l'SVD di una matrice generale per calcolare il numero di condizione, ma questi non sono modi particolarmente rapidi per procedere.

A1condest


Ma la stima a volte è significativamente troppo piccola. Il calcolo del numero di condizione (anche approssimandolo entro un fattore 2) sembra avere la stessa complessità del calcolo di una fattorizzazione, sebbene non vi siano teoremi in questa direzione.
Arnold Neumaier,

1

HHHTH

Poiché gli autovalori / valori singolari più grandi e più piccoli possono essere trovati molto velocemente (molto prima che la tridiagonalizzazione sia completa), il metodo Lanczos è particolarmente utile per calcolare il numero di condizione.


Mi sono sempre chiesto dove trovare un codice matlab leggibile per l'iterazione di lanczos che chiarisca come ottenere l'autovalore più piccolo o più grande. Puoi suggerirmi uno?
Linello,

Non ho i codici MATLAB per l'algoritmo Lanczos.
Chaohuang,
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.