Domanda

Ho letto in alcuni punti (nel documento e in questo post del blog: http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ ) che l'uso di inv in Matlab non è raccomandato perché è lento e impreciso .

Sto cercando di trovare il motivo di questa inesattezza. Finora Google non ha dato risultati interessanti, quindi ho pensato che qualcuno qui potesse guidarmi.

Grazie!

È stato utile?

Soluzione

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

- Loren

Altri suggerimenti

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

inv () è certamente più lento di \ a meno che tu non abbia più vettori sul lato destro da risolvere. Tuttavia, i consigli di MathWorks in merito all'imprecisione sono dovuti a un limite eccessivamente conservativo in un risultato di algebra lineare numerica. In altre parole, inv () NON è impreciso. Il collegamento elabora ulteriormente: http://arxiv.org/abs/1201.6035

  

Diversi libri di testo ampiamente usati portano il lettore a credere che la soluzione di un sistema lineare di equazioni Ax = b moltiplicando il vettore b per un inv (A) inverso calcolato non sia accurata. Praticamente tutti gli altri libri di testo sull'analisi numerica e l'algebra lineare numerica sconsigliano di usare inversioni calcolate senza dichiarare se questo è accurato o meno. In effetti, sotto ipotesi ragionevoli su come viene calcolato l'inverso, x = inv (A) * b è accurato quanto la soluzione calcolata dai migliori solutori stabili all'indietro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top