[Matlab] dubbio su A=LU

studente_studente
Ciao, spero di aver scritto nella sezione giusta dato che è un esercizio di calcolo numerico ma su matlab.
In un esercizio ho notato che:
quando devo risolvere Ax=b facciamo
PAx=Pb; LUx=Pb allora chiamo Ux=y e ottengo Ly=Pb. Fin qui tutto apposto, la teoria non è un problema.
Ho notato che su matlab fa y=L\(P*b), ma perché fa così? Io farei così y=inv(L)*P*b ed, in effetti, il risultato è lo stesso!

Grazie in anticipo!

Risposte
Bremen000
Credo tu abbia scritto nella sezione sbagliata.
Comunque si fa per motivi di carico computazionale: calcolare esplicitamente l'inversa è estremamente gravoso dal punto di vista computazionale mentre l'altro comando adotta strategie ottimizzate ad hoc per risolvere il sistema lineare.

"inv" è il male assoluto, quando ho dato calcolo numerico si veniva bocciati solo a pensarlo :D

studente_studente
Il problema è che non so come cambiarlo di sezione..

Si lo so che inv andrebbe evitato ma non avrei mai pensato a y=L\(P*b) perché non trovo il nesso. Mi spiego, ho notato che fa lo stesso risultato dopo averlo fatto mica prima. Come ci arriva? Come avrei dovuto pensare?

Bremen000
Non so se capisco bene il tuo dubbio. Cioè dato un vettore colonna y di dimensione n e una matrice A di dimensioni nxn, il comando A\y restituisce il vettore colonna x di dimensione n tale per cui Ax=y. Cioè \ risolve il sistema lineare Ax=y.

studente_studente
In effetti, sembrerà assurdo, ma mi era quasi sfuggito
Deduco perciò che calcolare l'inversa è più costoso di implementare i metodi di sostituzione o di Gauss (dato \)..
Va bene, non lo avevo ancora recepito del tutto eheh

Grazie mille!!

apatriarca
Sì, calcolare l'inversa non è praticamente mai la cosa giusta da fare.. Per molte ragioni, dall'efficienza (fai meno operazioni in quanto non hai poi bisogno di fare il prodotto) alla robustezza, si preferisce sempre risolvere il sistema rispetto a calcolare l'inversa.

studente_studente
Infatti pensandoci ho notato che proprio per evitare di calcolare l'inversa si preferisce usare Gauss o, se possibile, anche Choleski.. non ci avevo fatto troppo caso dato che si ha il comando inv..
Ma allora se possiamo sempre usare Gauss, perché esiste inv? O ancora meglio, perché facendo inv non si implementa direttamente Gauss?

apatriarca
Perché a volte si è interessati a calcolare l'inversa e non a risolvere un sistema e l'algoritmo usato è in realtà alla fin fine lo stesso. La differenza è che se vogliamo calcolare la soluzione di un sistema e non ci interessa la matrice allora conviene risolvere direttamente il sistema. Un esempio in cui potremmo essere interessati alla matrice inversa è il seguente.

Supponiamo ad esempio di avere una trasformazione \(T\) in un opportuno spazio vettoriale. Se dotiamo \(T\) di un prodotto scalare \(\langle \, , \rangle\), possiamo essere interessati a calcolare una trasformazione \(S\) per cui \(\langle S\,v, T\,w\rangle = \langle v, w \rangle \) per ogni coppia di vettori \(v\) e \(w.\) In altre parole, siamo interessati a trovare la corrispondente trasformazione per gli iperpiani (o le normali) in quello spazio vettoriale.

Se \(M\) è la matrice per cui \(\langle v, w \rangle = v^t\,M\,w\) allora abbiamo che
\[ \forall v, w. \ v^tS^tMTw = v^tMw \implies S^tMT = M \implies S^t = MT^{-1}M^{-1} \implies S = M^{-t}T^{-t}M^t. \]
Questa matrice potrebbe essere calcolata usando inv, invece di cercare un sistema lineare da risolvere.

studente_studente
Chiarissimo, se mi capiterà di calcolare l'inversa di una matrice allora ne terrò conto. Grazie mille!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.