PDA

View Full Version : Risolvere un Sistema Lineare con Matlab.. perchè non mi da? :(


luxorl
23-11-2005, 12:42
Ciao
non penso sia proprio la sezione adatta x chiedere su Matlab.. ma visto che qui passa la gente che a che fare con matematica e roba simile.. di sicuro qualcuno sapà rispondermi!

ho seguito le istruzioni del seguente link:
http://freeweb.supereva.com/programmarein/matlab/index.html?p

dato che non apre direttamente la pagina in cui spiega come risolvere un sistema con matlab incollo le istruzioni di seguito:





In questa lezione impareremo a risolvere un sistema di equazioni lineari con matlab.
Supponiamo di integrare un sistema di N×N equazione e cioè un sistema di N equazione
in N incognite, ed indichiamo con A la matrice dei coefficienti delle incognite e con
B in vettore contenente i termini noti; ad esempio se il sistema è il seguente:


2x+3y=11

x +5y=16


allora sarà:


A=[2 3;1 5];

B=[11 16];


Il sistema precedente in notazione matriciale viene indicato come:


A * X = B


dove X rappresenta il vettore soluzione.

La soluzione del sistema precedente è data da:


X = inv(A)*B;



L'm-file che effettua tale operazione è riportato di seguito:

%-----------------------------------------------------------
%Soluzione di un sistema lineare a Cura di Giuseppe Ciaburro
%-----------------------------------------------------------
%Sia A la matrice dei coefficienti delle incognite e
%B il vettore termine noti
%Bisogna prima immettere nel promt di matlab A e B
%Valutiamo l'inversa di A
C=inv(A);
%Determiniamo la trasposta
C=C';
%Calcoliamo il vettore soluzione
X=B*C;
disp('Il vettore delle soluzioni è')
X

Come si vede è necessario effettuare la trasposta della matrice inversa perchè
matlab esegue solo il prodotto di un vettore per una matrice e non il prodotto
di una matrice per un vettore .

Effettuiamo allora tali calcoli con matlab:


C=inv(A)

C =

0.7143 -0.4286
-0.1429 0.2857

effettuiamone la trasposta:


C=C'

C =

0.7143 -0.1429
-0.4286 0.2857

Calcoliamo infine il vettore soluzione:


X=B*C

X =

1.0000 3.0000


A me non da!! :(
in effetti come gli escono quei numeri (0.7143 -0.4286 -0.1429 0.2857) dopo aver calcolato l'inversa???? l'inversa di una matrice non è la stessa matrice ruotata?
La pagina è tutta sbagliata o sono io che sbaglio tutto?
Come risolvo un sistema di N incognita in N equazioni con Matlab?

Ziosilvio
23-11-2005, 12:59
l'inversa di una matrice non è la stessa matrice ruotata?
Mi sa che stai facendo confusione tra inversa e trasposta.

luxorl
23-11-2005, 14:41
Mi sa che stai facendo confusione tra inversa e trasposta.

E perchè Matlab a me da questo risultato?

>> A=[1 3; 2 5]

A =

1 3
2 5

>> C=inv(A)

C =

-5 3
2 -1

>>

luxorl
23-11-2005, 14:45
Dimenticate tutto.. ho capito! :doh:

comunque il metodo per risolvere un sistema di equazioni con matlab è giusto no?

-matrice dei coefficenti
-la sua inversa
-la sua trasporta

incognite=vettore termini noti*la matrice ottenuta prima

Ziosilvio
23-11-2005, 20:42
incognite=vettore termini noti*la matrice ottenuta prima
No: incognite = matrice inversa * vettore dei termini noti.
In questo ordine: ricorda che la moltiplicazione tra matrici non è commutativa.

P.S.: se ho capìto bene, stai usando Matlab come supporto informatico in un corso di Algebra Lineare.
Forse sarebbe il caso che tu studiassi un po' meglio l'algebra lineare, prima di cominciare a usare Matlab: non puoi pretendere che il tuo schiavo faccia il tuo lavoro, se non sei in grado di spiegargli come farlo.

luxorl
23-11-2005, 21:21
No: incognite = matrice inversa * vettore dei termini noti.
In questo ordine: ricorda che la moltiplicazione tra matrici non è commutativa.

P.S.: se ho capìto bene, stai usando Matlab come supporto informatico in un corso di Algebra Lineare.
Forse sarebbe il caso che tu studiassi un po' meglio l'algebra lineare, prima di cominciare a usare Matlab: non puoi pretendere che il tuo schiavo faccia il tuo lavoro, se non sei in grado di spiegargli come farlo.

No zio..
matlab non fa la motliplicazione matrice vettore.. ma solo vettore matrice..
allora per questo moltiplico il vettore per la matrice trasposta! :) così algebricamente dovrebbe essere corretto!

e poi mi serve per elettrotecnica non per algebra lineare :P

Ziosilvio
23-11-2005, 23:02
matlab non fa la motliplicazione matrice vettore.. ma solo vettore matrice
Ah, cioè: considera i vettori sempre come vettori riga.
Ho capìto.
allora per questo moltiplico il vettore per la matrice trasposta! :) così algebricamente dovrebbe essere corretto!
Uhm... sì: se b è il vettore colonna dei termini noti e x è il vettore colonna delle incognite, allora x=(A^(-1))b, quindi il vettore riga delle soluzioni è il trasposto xT=((A^(-1))b)T=(bT)((A^(-1))T)=(bT)((AT)^(-1)) (inversione e trasposizione commutano).
Quindi sì, è giusto come fai.

luxorl
24-11-2005, 09:16
Spulciando l'help di Matlab ho trovato la funzione "linsolve"
che risolve un sistema lineare A*X=B :)

E comunque quello che c'è scritto nella guida incollata sopra:

Come si vede è necessario effettuare la trasposta della matrice inversa perchè
matlab esegue solo il prodotto di un vettore per una matrice e non il prodotto
di una matrice per un vettore .


Non è vero.. Ziosilvio mi ha fatto riflettere.. e non fa il prodotto tra matrice e vettoro solo se il vettore è orizzontale.. si può infatti dichiarlo verticale nel seguente modo:

B=[1;2] il punto e virgola manda a capo l'altro numero ottenendo questo risultato:

>> B=[11;16]

B =

11
16


invece di questo:

>> B=[11 16]

B =

11 16


a questo punto se avete dichiarato il vettore verticalmente potete o risolvere "a mano" il sistema facendo l'inversa della matrice e moltiplicandola per il vettore..
oppure scrivendo

X=linsolve(A,B)

dove A è la matrice dei coefficienti e B e il vettore dei termini noti...
e otterete i risultati in un nuovo vettore X :)

spero di essere stato chiaro.. ciaoooo

gurutech
24-11-2005, 20:24
il modo più rapido e informaticamente corretto con matlab è:

A=[2 3;1 5]

A =

2 3
1 5

>> b=[11 16]'

b =

11
16

>> A\b

ans =

1
3



matlab, così come qualsiasi altro programma (compreso la carta e la penna) può eseguire il prodotto matrice per vettore o vettore per matrice o matrice per matrice tutte le volte che questi sono conformabili, cioè quando nell'operazione
P * Q il numero di colonne di P è uguale al numero di righe di Q