[Matlab] dubbio su A=LU
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!
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
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
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

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?
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?
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.
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!!
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!!
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.
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?
Ma allora se possiamo sempre usare Gauss, perché esiste inv? O ancora meglio, perché facendo inv non si implementa direttamente Gauss?
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.
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.
Chiarissimo, se mi capiterà di calcolare l'inversa di una matrice allora ne terrò conto. Grazie mille!!