ddefalco
Questo è un forum di discussione e non un sistema di messaggistica, in particolare con me.
Ciò vuol dire che ognuno che vi partecipa contribuisce alla discussione di un argomento (topic) cercando di risolvere i problemi che si pongono, con un intervento (post) che viene messo a disposizione di tutti: va pertanto inteso come un dibattito tra tutti nel quale gli interventi (e non le persone), hanno lo stesso peso.
Certamente non è una comunicazione ‘peer to peer’ con me (per fare questo esiste il ricevimento in stanza, l’email, la chat…) né tantomeno dev’essere un’esibizione del proprio sapere o non sapere (esame).

Pertanto bandiamo frasi del tipo “Ci scusiamo per eventuali errori”, “accettiamo consigli per eventuali correzioni”, peggio ancora “domanda per il professore”, …, e pensiamo sempre al “sodo”.
Concediamo alla forma, tutt’al più qualche volta, un saluto.
Domenico de Falco.

ddefalco

ING - IND 13 : DDEFALCO's Forum
 
IndiceCalendarioFAQCercaLista utentiGruppiRegistrarsiAccedi
Ultimi argomenti
Cerca
 
 

Risultati secondo:
 
Rechercher Ricerca avanzata

Condividere | 
 

 Decomposizione in valori singolari in Matlab

Vedere l'argomento precedente Vedere l'argomento seguente Andare in basso 
AutoreMessaggio
Gianluca93



Numero di messaggi : 1
Corso di appartenenza : Dinamica e Controllo dei Sistemi Meccanici
NomeCognome : Gianluca Sarli
Data d'iscrizione : 17.10.16

MessaggioOggetto: Decomposizione in valori singolari in Matlab   Gio Nov 03, 2016 9:42 pm

Nelle ultime lezioni abbiamo parlato della decomposizione in valori singolari di una matrice. In particolare il Prof ci ha dimostrato che se è A=W*L*Vt, allora A+=V*L^(-1)*Wt, dove A+ è l'MP-inversa di A e che, essendo L diagonale, L^(-1) sarà semplicemente composta dai reciproci degli elementi di L.

Abbiamo però notato che non è immediato verificare tutto ciò con Matlab, essendo la decomposizione con il comando svd un po' diversa da quella studiata al corso e le matrici centrali (che chiamiamo rispettivamente M ed M+) sono, in generale, non quadrate. Vedremo che bisognerà "ordinare" gli elementi per far sì che le proprietà siano verificate. Partiamo da una matrice A casuale, ad esempio:

0.8147    0.0975    0.1576    0.1419    0.6557    0.7577
   0.9058    0.2785    0.9706    0.4218    0.0357    0.7431
   0.1270    0.5469    0.9572    0.9157    0.8491    0.3922
   0.9134    0.9575    0.4854    0.7922    0.9340    0.6555
   0.6324    0.9649    0.8003    0.9595    0.6787    0.1712

Dopo aver dato il comando [P,M,Q]=svd(A) prendiamo le prime r righe e le prime r colonne della matrice M, dove r è il rango di A. Otteniamo la nostra matrice L. Facciamo lo stesso con M+, ottenuta da un comando analogo sulla pseudoinversa di A, ottenendo la nostra L+. Abbiamo ora:
L=M(1:r,1:r)

L =

   3.4947         0         0         0         0
        0    1.1353         0         0         0
        0         0    0.8358         0         0
        0         0         0    0.5641         0
        0         0         0         0    0.1343

>> Lpiu=Mpiu(1:r,1:r)

Lpiu =

   7.4486         0         0         0         0
        0    1.7726         0         0         0
        0         0    1.1964         0         0
        0         0         0    0.8808         0
        0         0         0         0    0.2861

Notiamo che abbiamo 2 matrici diagonali che soddisfano la proprietà dei reciproci, ma essendo ordinate entrambe in modo decrescente bisognerà ordinare opportunamente gli elementi (il primo della matrice L è il reciproco dell'ultimo della L+, il secondo della L col penultimo della L+ e così via).

Dobbiamo quindi generare un vettore, che chiamiamo j, con elementi interi che vanno da 1 ad r e poi fare il prodotto elemento per elemento in questo modo:

>> j=[1:r]

j =

    1     2     3     4     5

>> L(j,j).*Lpiu(r+1-j,r+1-j)

ans =

   1.0000         0         0         0         0
        0    1.0000         0         0         0
        0         0    1.0000         0         0
        0         0         0    1.0000         0
        0         0         0         0    1.0000

Così facendo abbiamo appunto moltiplicato il primo elemento della L con l'ultimo della L+, il secondo elemento della L con il penultimo della L+ e così via ottenendo, come volevasi dimostrare, tutti valori unitari, essendo gli elementi di una i reciproci di quelli dell'altra.

N.B. a rigore avremmo poi dovuto controllare il valore massimo e quello minimo sulla diagonale (perchè la matrice può essere di qualunque dimensione), che dovranno essere unitari o ad una differenza da 1 tale da poter essere attribuita agli errori del calcolatore.
Tornare in alto Andare in basso
Vedere il profilo dell'utente
 
Decomposizione in valori singolari in Matlab
Vedere l'argomento precedente Vedere l'argomento seguente Tornare in alto 
Pagina 1 di 1
 Argomenti simili
-
» Valori modificati del CO con scarico completo! Consigli.....
» valori CO centralina
» Valori CO su Yamaha FZ8 con Akrapovic
» Elettroiniettore.
» cambio rapporti differenziali

Permesso di questo forum:Non puoi rispondere agli argomenti in questo forum
ddefalco :: CORSI :: Dinamica e Controllo di Sistemi Meccanici-
Andare verso: