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
avatar

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
avatar

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   

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
» 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: