2009-09-14 14 views

risposta

30

L'inesattezza che ho menzionato è con il metodo INV, non con l'implementazione di MATLAB. Dovresti utilizzare QR, LU o altri metodi per risolvere sistemi di equazioni poiché questi metodi in genere non richiedono la quadratura del numero di condizione del sistema in questione. L'utilizzo di inv richiede in genere un'operazione che perde la precisione quadrando il numero di condizione del sistema originale.

--Loren

19

Penso che il punto del blog di Loren non sia che la funzione inv di MATLAB sia particolarmente lenta o più imprecisa di qualsiasi altra implementazione numerica del calcolo di una matrice inversa; piuttosto, che nella maggior parte dei casi non è necessaria l'inversa stessa e si può procedere con altri mezzi (come risolvere un sistema lineare usando \ - l'operatore backslash - piuttosto che calcolare un inverso).

+1

Inoltre, l'operatore barra rovesciata (generalmente) dà risultati più accurati rispetto inv (A) * b: sceglie un algoritmo adatto per risolvere A * x = b. – Martijn

+0

Per essere espliciti per gli studenti là fuori, si desidera scrivere 'x = A \ b' invece di' x = inv (A) * b' per risolvere il sistema lineare Ax = b. Calcolare l'inverso di A non è necessario, non è robusto e non veloce. In un'enorme percentuale di formule matematiche in cui si vede un A^-1, l'algoritmo può essere implementato senza calcolare mai l'inverso di A. Detto questo, per le matrici piccole, a pieno rango, il calcolo inv (A) sarà quasi stai sempre perfettamente bene. Per matrici di grandi dimensioni o matrici mal condizionate, può diventare problematico. –

0

inv() è certamente più lento rispetto \ a meno che non si dispone di più vettori lato destro da risolvere per. Tuttavia, il consiglio di MathWorks riguardo l'inesattezza è dovuto a un vincolo eccessivamente conservativo in un risultato algebrico lineare numerico. In altre parole, inv() NON è impreciso. Il collegamento elabora ulteriormente: http://arxiv.org/abs/1201.6035

diversi libri di testo ampiamente utilizzati portano il lettore a ritenere che la soluzione di un sistema lineare di equazioni Ax = b moltiplicando il vettore b da un inv inversa computerizzata (A) è imprecisa. Praticamente tutti gli altri libri di testo sull'analisi numerica e l'algebra lineare numerica sconsigliano di utilizzare gli inversi calcolati senza dichiarare se ciò sia corretto o meno. Infatti, sotto ipotesi ragionevoli su come viene calcolato l'inverso, x = inv (A) * b è preciso come la soluzione calcolata dai migliori solutori con stabilità all'indietro.