Quando conviene usare la decomposizione SVD
Buongiorno,
stavo studiando la decomposizione dei valori singolari, nota anche come SVD.
Dal punto di vista teorico e di implementazione problemi non ce ne sono.
Tuttavia, mi sono chiesto: quando è particolarmente utile questa decomposizione?
Sicuramente il problema deve stare nella decomposizione della matrice. Per questo motivo sono portato a credere che sia particolarmente utile quando si conosca già una sua decomposizione.
Ho provato a confrontare l'errore (in norma infinito) che commetto utilizzando la SVD [nota]$[P,D,Q]=svd(A)$ è il comando che ho usato[/nota]per una matrice qualsiasi di taglia $100$, con l'errore fatto usando il comando di MatLab per la risoluzione dei sistemi (\) .
Risulta che l'errore per il comando di MatLab è spesso minore.
Poi ho provato a fare la SVD per matrici di cui la scomposizione è "veloce", come una matrice simmetrica $A$, che so essere diagonalizzabile e posso scriverla come $A=P^T D P$, (dove $P in O(n)$ e $D$ è diagonale) e confrontare l'errore tra il comando MatLab e la SVD come fatto prima.
Risulta sempre che l'errore per la SVD è minore di quello di MatLab.
Il motivo della diminuzione dell'errore sta nel fatto che la decomposizione è "nota" dalla teoria?
Grazie per l'attenzione e buone feste
stavo studiando la decomposizione dei valori singolari, nota anche come SVD.
Dal punto di vista teorico e di implementazione problemi non ce ne sono.
Tuttavia, mi sono chiesto: quando è particolarmente utile questa decomposizione?
Sicuramente il problema deve stare nella decomposizione della matrice. Per questo motivo sono portato a credere che sia particolarmente utile quando si conosca già una sua decomposizione.
Ho provato a confrontare l'errore (in norma infinito) che commetto utilizzando la SVD [nota]$[P,D,Q]=svd(A)$ è il comando che ho usato[/nota]per una matrice qualsiasi di taglia $100$, con l'errore fatto usando il comando di MatLab per la risoluzione dei sistemi (\) .
Risulta che l'errore per il comando di MatLab è spesso minore.
Poi ho provato a fare la SVD per matrici di cui la scomposizione è "veloce", come una matrice simmetrica $A$, che so essere diagonalizzabile e posso scriverla come $A=P^T D P$, (dove $P in O(n)$ e $D$ è diagonale) e confrontare l'errore tra il comando MatLab e la SVD come fatto prima.
Risulta sempre che l'errore per la SVD è minore di quello di MatLab.
Il motivo della diminuzione dell'errore sta nel fatto che la decomposizione è "nota" dalla teoria?
Grazie per l'attenzione e buone feste

Risposte
"feddy":
quando è particolarmente utile questa decomposizione?
Questo mi sembra un po' come chiedere quando è utile la forma del quadrato del binomio.
La SVD può essere o no lo strumento giusto in base a quello che vuoi fare; se non dici cosa vuoi fare, la domanda è mal posta.
Tutto l'errore che vedi è errore numerico; verosimilmente l'errore è maggiore quando vengono fatte più operazioni, come ad esempio la scomposizione. Nel caso di matrici simmetriche non escludo che matlab faccia qualcos'altro invece che la SVD normale.
Grazie per la risposta.
A dire il vero non dovrei fare nulla, la mia era una pura curiosità se la SVD funziona bene per matrici simmetriche.
Quindi, dal momento che l'errore dovrebbe essere maggiore quando MatLab compie più operazioni, questo dovrebbe significare che la SVD lavora "meno" di MatLab per trovare la decomposizione della matrice simmetrica?
A dire il vero non dovrei fare nulla, la mia era una pura curiosità se la SVD funziona bene per matrici simmetriche.

Quindi, dal momento che l'errore dovrebbe essere maggiore quando MatLab compie più operazioni, questo dovrebbe significare che la SVD lavora "meno" di MatLab per trovare la decomposizione della matrice simmetrica?
La mia è un'ipotesi, nemmeno troppo pensata. Ricorda che per matrici diagonalizzabili la SVD coincide con la diagonalizzazione, quindi può essere che matlab faccia un test per vedere se la matrice è simmetrica e poi faccia una cosa anziché l'altra.
Chiaro. Grazie per la risposta !
Su matlab non so ma ti posso dire che, ad esempio, la SVD mi è risultata molto utile nell'applicare la Principal Component Analysis su Python. Infatti utilizzandola riuscivo a calcolare gli autovalori in maniera più agevole rispetto al caso in cui utilizzavo la funzione per il calcolo degli stessi disponibile in un package.