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 valori singolari di una matrice in matlab

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



Numero di messaggi : 3
Corso di appartenenza : Dinamica e Controllo dei Sistemi Meccanici
NomeCognome : Giuseppe Mele
Data d'iscrizione : 25.09.12

MessaggioOggetto: Decomposizione valori singolari di una matrice in matlab   Gio Nov 08, 2012 9:43 pm

Buona sera professore,
siamo Giuseppe Mele e Giacomo Belgiorno, abbiamo eseguito il seguente esercizio su matlab, prendendo spunto da altri esercizi del forum, che un paio di lezioni fa ci avevate proposto: data una matrice rettangolare A il nostro obiettivo è stato quello di calcolarci la sua decomposizione in valori singolari in due modi diversi.
Nel primo caso lo abbiamo fatto ricavando 3 matrici, dove :
-Lambda è una matrice quadrata diagonale, i cui elementi sono le radici quadrate prese col segno positivo degli autovalori di AA’ (dove AA’ ha le seguenti proprietà: quadrata, simmetrica e semidefinita positiva). A questi autovalori corrispondono gli autovettori wi che sono i vettori colonna di una matrice W che è ortogonale;
- la terza matrice è costituita dai seguenti vettori colonna: v=((1/lambda)*A’*w) e la chiamo V ed è ortogonale.
Quindi A=W*Lambda*V’ e abbiamo verificato l’uguaglianza.
Il secondo modo è mediante la function svd di matlab dove direttamente otteniamo la Decomposizione di A in valori singolari, e notiamo subito che abbiamo una rappresentazione alternativa a quella precedente infatti la matrice U è una matrice quadrata mxm ortogonale dove le prime r colonne (r=rank(A))sono ottenute dalla matrice W e le restanti m-r sono tali che la U sia ortogonale. Analogamente la matrice D è quadrata nxn e ortogonale dove le prime r colonne sono ottenute dalla matrice V e le rimanenti n-r sono tali che la D sia una matrice ortogonale, mentre la S è una matrice rettangolare mxn.
Si è fatto vedere che entrambe le rappresentazioni della decomposizione in valori singolari di A ci restituiscono la matrice A di partenza.

>> % 'Data una matrice rettangolare A mxn'
A=[1 2 7 3; 3 5 1 4; 4 7 5 9]

A =

1 2 7 3
3 5 1 4
4 7 5 9

>> % ' il cui rango è:'
>> rank(A)

ans =

3
% ' a questa può essere associata una matrice quadrata simmetrica e semidefinita positiva AA' '
B=A*A'

B =

63 32 80
32 51 88
80 88 171

>> % ' calcolo gli autovalori a cui corrispondono i rispettivi autovettori della matrice B '
>> [Avt,Avl]=eig(B)

Avt =

0.3112 0.8589 0.4069
0.7754 -0.4770 0.4138
-0.5494 -0.1868 0.8144


Avl =

1.4905 0 0
0 27.8338 0
0 0 255.6757
>> % ' Da cui possiamo notare che essendo reali gli elementi di B ed essendo essa simmetrica, gli autovalori di B sono reali e positivi'
>> % ' Calcoliamo la matrice Lambda i cui elementi sono disposti lungo la diagonale principale e pari alla radice quadrata degli autovalori di B presi col segno positivo'
>> Lambda = diag(sqrt(diag(Avl)))

Lambda =

1.2209 0 0
0 5.2758 0
0 0 15.9899

>> % ' La matrice W della decomposizione di A in valori singolari coincide con la matrice degli autovettori di B, Avt'
>> % ' Calcoliamo la matrice V i cui elementi sono pari a v=((1/lambda)*A'*w) dove i w i vettori colonna della matrice W'
>> k=rank(A);
for j = 1 : k
V(:,j) = 1/Lambda(j,j) * A' * Avt (:,j);
end
>> % ' Detta C la matrice ottenuta come prodotto delle matrici Avt*Lambda*V' '
>> C=Avt*Lambda*V'

C =

1.0000 2.0000 7.0000 3.0000
3.0000 5.0000 1.0000 4.0000
4.0000 7.0000 5.0000 9.0000

>> % ' verifico che C coincide con A essendo la sua decomposizione in valori singolari'
>> O=A-C

O =

1.0e-014 *

0 -0.0444 0 0
-0.1776 -0.3553 -0.2665 -0.2665
0 -0.0888 -0.0888 0
% ' Sfruttando la function SVD presente in matlab, ricaviamo la decomposizione in valori singolari della matrice A '
[U,S,D]=svd(A)
U =

-0.4069 0.8589 -0.3112
-0.4138 -0.4770 -0.7754
-0.8144 -0.1868 0.5494


S =

15.9899 0 0 0
0 5.2758 0 0
0 0 1.2209 0


D =

-0.3068 -0.2500 -0.3602 -0.8447
-0.5368 -0.3742 -0.5354 0.5340
-0.4587 0.8722 -0.1691 -0.0194
-0.6382 -0.1918 0.7450 -0.0291

>> % ' si nota che la function svd restituisce una rappresentazione alternativa della decomposizione in valori singolari della matrice A '
>> % ' verifico l'uguaglianza A=U*S*D' '
>> F=U*S*D'

F =

1.0000 2.0000 7.0000 3.0000
3.0000 5.0000 1.0000 4.0000
4.0000 7.0000 5.0000 9.0000

>> L=F-A

L =

1.0e-014 *

0.0222 -0.0888 0.3553 0
0 0 -0.0444 -0.0444
-0.0444 -0.1776 -0.1776 0

>> % ' come volevamo dimostrare entrambe le rappresentazioni della SVD di A ci danno come risultato la matrice A di partenza '

Tornare in alto Andare in basso
Vedere il profilo dell'utente
ddefalco
Admin


Numero di messaggi : 171
Località : Napoli
Corso di appartenenza : Meccanica Applicata alle Macchine
NomeCognome : Domenico de Falco
Data d'iscrizione : 29.12.08

MessaggioOggetto: Re: Decomposizione valori singolari di una matrice in matlab   Ven Nov 09, 2012 12:58 pm

ok ragazzi va bene aver pubblicato questo esercizio ma non è necessario che lo indirizziate a me.
Insomma il forum dovrebbe servire a risolvere problemi.
comunque va bene.
saluti.
Tornare in alto Andare in basso
Vedere il profilo dell'utente
mariangela.russo



Numero di messaggi : 3
Corso di appartenenza : Dinamica e Controllo dei Sistemi Meccanici
NomeCognome : Mariangela Russo
Data d'iscrizione : 05.11.12

MessaggioOggetto: Re: Decomposizione valori singolari di una matrice in matlab   Gio Nov 29, 2012 10:33 am

salve a tutti; per acquisire un po' di dimestichezza con matlab ho provato a fare qualche esercizio di base.

Qui ho verificato che l'inversa e la MP inversa coincidono per una matrice quadrata;

>> A=[2 8 3; 6 8 10; 4 5 6];
>> inv(A)

ans =

-0.0909 -1.5000 2.5455
0.1818 0 -0.0909
-0.0909 1.0000 -1.4545

>> B=[ 8 4; 16 5; 3 3]

B =

8 4
16 5
3 3

>> inv(B)
??? Error using ==> inv
Matrix must be square.

>> pinv(B)

ans =

-0.0464 0.1078 -0.1177
0.1924 -0.1609 0.3449

>> pinv(A)

ans =

-0.0909 -1.5000 2.5455
0.1818 0.0000 -0.0909
-0.0909 1.0000 -1.4545

In quello seguente ho verificato che è valida la proprietà associativa rispetto al prodotto tra matrici A(BC)=(AB)C , purchè le matrici siano rispettivamente di dimensione (mxn),(nxp),(pxq).
>> S=[1 3 7; 56 7 8];
>> S1=[2 6 9 11; 15 8 4 1; 6 3 8 7]

S1 =

2 6 9 11
15 8 4 1
6 3 8 7

>> C=S*S1

C =

89 51 77 63
265 416 596 679

>> S3= [5 5; 9 11; 7 8; 4 5];


>> D=C*S3

D =

1695 1937
11957 14064

>> S1*S3

ans =

171 203
179 200
141 162



>> S*(S1*S3)

ans =

1695 1937
11957 14064
Tornare in alto Andare in basso
Vedere il profilo dell'utente
ddefalco
Admin


Numero di messaggi : 171
Località : Napoli
Corso di appartenenza : Meccanica Applicata alle Macchine
NomeCognome : Domenico de Falco
Data d'iscrizione : 29.12.08

MessaggioOggetto: Re: Decomposizione valori singolari di una matrice in matlab   Ven Nov 30, 2012 11:24 am

ok mi sembra un buon esercizio.
Solo le chiederei la prossima volta di curare anche la chiarezza dando nomi opportuni ai prodotti.
Nel secondo esercizio infatti nel commento aveva chiamato A,B e C le matrici che invece nell'esercizio sono indicate con S, S1 ed S3.
Per la verifica della proprietà associativa visto che aveva definito:
C=S*S1
D=C*S3=(S*S1)*S3
sarebbe stato meglio, al posto dell'ultimo passaggio, che definisse dapprima una variabile:
CC=S1*S3
poi avesse fatto:
D1=S*CC
e quindi verificato l'errore facendo la differenza :
D-D1
Comunque OK Smile

Tornare in alto Andare in basso
Vedere il profilo dell'utente
Contenuto sponsorizzato




MessaggioOggetto: Re: Decomposizione valori singolari di una matrice in matlab   Oggi a 6:25 am

Tornare in alto Andare in basso
 
Decomposizione valori singolari di una matrice 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.....
» INFORMATICA -- qualcuno sa come convertire una matrice in immagine bitmap nel C++?
» valori CO centralina
» Valori CO su Yamaha FZ8 con Akrapovic
» Elettroiniettore.

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