Page 1 of 1
Plotte plan i Matlab
Posted: 18/04-2011 11:59
by BjarneH
Jeg ønsker å plotte dette i matlab på en så enkel som mulig måte for å visualisere rekkebildet. Hvordan går jeg frem?
1 0 2 x = 0
1 3 11 y = 0
-4 2 0 z = 0
Posted: 18/04-2011 13:11
by Markonan
Hvis jeg har tenkt riktig...
Fiklet litt med det, men hadde litt problemer med matlab så jeg fikk ikke laget et ordentlig plot. Jeg startet med:
Code: Select all
[y,z] = meshgrid(-2:0.1:2);
x1 = -2.*z;
x2 = -3.*y - 11.*z;
x3 = 0.5.*y;
figure
surf(y,z,x1,'FaceColor','red')
hold on
surf(y,z,x2,'FaceColor','blue')
surf(y,z,x3,'FaceColor','yellow')
og dette ga meg følgende plot:
Du kan zoome inn på området du er interessert i med kommandoen:
Code: Select all
axis([xmin xmax ymin ymax zmin zmax])
og du kan rotere på den og lage fargene gjennomsiktig etc. Hvis du skal lagre figuren kan du bruke kommandoen
Slik jeg forstod det var det noe lignende dette du var ute etter, og da har du et greit utgangspunkt.
Posted: 18/04-2011 13:15
by BjarneH
Veldig bra! Akkurat som jeg tenkte. Takk skal du ha.
Jeg trodde en slik matrise kunne ha uendelig mange løsninger siden x,y,x = 0?
Men siden planene krysser hverandre så finnes det vel en ikke triviell løsning?
Posted: 18/04-2011 13:35
by Markonan
Hmm, du sier noe der.
Code: Select all
>> A = [1 0 2; 1 3 11; -4 2 0]
A =
1 0 2
1 3 11
-4 2 0
>> null = zeros(3,1)
null =
0
0
0
>> Aaug = [A null]
Aaug =
1 0 2 0
1 3 11 0
-4 2 0 0
>> rref(Aaug)
ans =
1 0 0 0
0 1 0 0
0 0 1 0
Alle radene er lineært uavhengige, og det betyr vel at nullrommet til denne matrisen bare er nullvektoren? Dette får meg til å tro at jeg kanskje var litt kjapp med å plotte.
Fra matrisemultiplikasjonen:
[tex]\begin{bmatrix}1 & 0 & 2\\1 & 3 & 11\\ -4 & 2 & 0\end{bmatrix}\begin{bmatrix}x\\ y\\ z\end{bmatrix} \;=\; \begin{bmatrix}0\\0\\0\end{bmatrix}\;\;\Longrightarrow[/tex]
[tex]\begin{matrix}x & && + & 2z &=& 0\\ x &+& 3y &+& 11z &=& 0\\-4x &+& 2y&+&0 &=& 0\end{matrix}\;\;\Longrightarrow[/tex]
[tex]\begin{matrix}x &=& &-& 2z\\ x &=& -3y &-& 11z\\ x &=& 0.5y && \end{matrix}[/tex]
Det var disse funksjonene jeg plottet.
Jeg har nok tenkt feil her et eller annet sted. Kanskje noen andre klarer å se hva, jeg har ikke tid til å se på dette akkurat nå.
Posted: 18/04-2011 14:10
by Gustav
Siden A er invertibel er vel x=(0,0,0)^T eneste løsning.
Posted: 18/04-2011 14:16
by BjarneH
Jeg har nå regnet videre på en LITT annen oppgave som er gitt slik:
1 0 2 x = 0
1 3 11 y= 0
-3 2 0 z = 0
Mitt svar:
Kolonnevektorene blir slik:
U=(1,1,-3)
V=(0,3,2)
W=(2,11,0)
U x V= 11i, -2j, 3k
Skalarproduktet mellom W (U x V) = 0
Da blir vel konklusjonen at systemet kan ha uendelig mange løsninger?
Er det planene som dannes av kolonnevektorene som i motsetning til rekkebildet forteller om systemet har uendelig mange løsninger?
Posted: 18/04-2011 14:34
by Gustav
BjarneH wrote:Jeg har nå regnet videre på en LITT annen oppgave som er gitt slik:
1 0 2 x = 0
1 3 11 y= 0
-3 2 0 z = 0
Mitt svar:
Kolonnevektorene blir slik:
U=(1,1,-3)
V=(0,3,2)
W=(2,11,0)
U x V= 11i, -2j, 3k
Skalarproduktet mellom W (U x V) = 0
Da blir vel konklusjonen at systemet kan ha uendelig mange løsninger?
Er det planene som dannes av kolonnevektorene som i motsetning til rekkebildet forteller om systemet har uendelig mange løsninger?
Lineært avhengige kolonnevektorer kan gi uendelig mange løsnnger ja. Har du tre lineært uavhengige kolonnevektorer for A vil ligningen Ax=0 ha kun én løsning, siden A dermed er invertibel: x=A^(-1)Ax=A^(-1)0=0
Posted: 18/04-2011 14:36
by BjarneH
plutarco wrote:BjarneH wrote:Jeg har nå regnet videre på en LITT annen oppgave som er gitt slik:
1 0 2 x = 0
1 3 11 y= 0
-3 2 0 z = 0
Mitt svar:
Kolonnevektorene blir slik:
U=(1,1,-3)
V=(0,3,2)
W=(2,11,0)
U x V= 11i, -2j, 3k
Skalarproduktet mellom W (U x V) = 0
Da blir vel konklusjonen at systemet kan ha uendelig mange løsninger?
Er det planene som dannes av kolonnevektorene som i motsetning til rekkebildet forteller om systemet har uendelig mange løsninger?
Lineært avhengige kolonnevektorer kan gi uendelig mange løsnnger ja.
Ok, kan du visualisere dette igjennom å se på om planene krysser hverandre eller går paralellt?
Posted: 18/04-2011 14:46
by Gustav
En måte å se det på er å skrive [tex]A=[\vec{v_1}\, \vec{v_2}\, \vec{v_3}][/tex] der [tex]\vec{v_i}[/tex] er kolonnevektorene til A.
Ligningen [tex]Ax=0[/tex] kan da skrives [tex]x_1\vec{v_1}+x_2\vec{v_2}+x_3\vec{v_3}=0[/tex].
Dersom f.eks. [tex]\vec{v_1}=-\vec{v_2}[/tex] er disse to vektorene lineært avhengige og vi får uendelig mange løsninger: [tex]x_1=x_2=c[/tex] og [tex]x_3=0[/tex] for alle mulige reelle [tex]c[/tex].
Posted: 18/04-2011 20:03
by Markonan
Selv om det ikke ser sånn ut, så krysser planene i det første bildet kun i et punkt, og det er origo, så alt stemmer.
Enklere å se om man plotter to av planene først, som skjærer hverandre langs en linje, og så legge til det tredje planet i et annet bilde. Det gule planet har en brattere stigning enn linjen, så linjen "skyter" gjennom planet i et eneste punkt, og dette punktet er origo.
For bedre sammenligning kan du åpne bildene i egne faner/tabs i nettleseren og hoppe frem og tilbake.
http://i55.tinypic.com/2vmiwk8.png
http://i56.tinypic.com/j7dg07.png
Posted: 18/04-2011 20:34
by BjarneH
Veldig bra! Hva er koden du bruker for å fremstille disse plottene i matlab?
Forøvrig så ser jeg at du bruker rref i koden over. Denne har jeg også selv brukt, men når jeg etterpå forsøker å kjøre rrefmovie for å vise hvert steg, så fungerer ikke denne kommandoen uansett hva jeg gjør.
Dett skriver jeg:
Code: Select all
>> A = [1 0 2; 1 3 11; -4 2 0]
A =
1 0 2
1 3 11
-4 2 0
>> rref(A)
ans =
1 0 0
0 1 0
0 0 1
>> rrefmovie(A)
??? Undefined function or method 'rrefmovie' for input arguments of type 'double'.
Versjonen jeg bruker av Matlab er 7.11.0 (R2010b)
Posted: 18/04-2011 20:59
by Markonan
Lagrer plottene som "bilde001.png" og "bilde002.png":
Code: Select all
[y,z] = meshgrid(-0.01:0.001:0.01);
x1 = -2.*z;
x2 = -3.*y - 11.*z;
x3 = 0.5.*y;
figure
surf(y,z,x1,'FaceColor','red')
hold on
surf(y,z,x2,'FaceColor','blue')
axis([-0.015 0.015 -0.015 0.015 -0.015 0.015])
campos([-0.1370 -0.1785 0.1299])
print -dpng bilde001
surf(y,z,x3,'FaceColor','yellow')
print -dpng bilde002
rrefmovie-funksjonen ser ikke ut til å være en del av standardpakken til matlab. I hvert fall fikk ikke jeg kjørt den selv, men jeg fant den her:
http://www.soe.ucsc.edu/classes/ams010/ ... refmovie.m
Bare å lagre denne filen i den aktive mappen, så får du kjørt den. Kjekt program forresten!
Code: Select all
Original matrix
A =
1 0 2
1 3 11
-4 2 0
Press any key to continue. . .
swap rows 1 and 3
A =
-4 2 0
1 3 11
1 0 2
Press any key to continue. . .
pivot = A(1,1)
A =
1 -1/2 0
1 3 11
1 0 2
Press any key to continue. . .
eliminate in column 1
A =
1 -1/2 0
1 3 11
1 0 2
Press any key to continue. . .
A =
1 -1/2 0
0 7/2 11
1 0 2
A =
1 -1/2 0
0 7/2 11
0 1/2 2
Press any key to continue. . .
pivot = A(2,2)
A =
1 -1/2 0
0 1 22/7
0 1/2 2
Press any key to continue. . .
eliminate in column 2
A =
1 -1/2 0
0 1 22/7
0 1/2 2
Press any key to continue. . .
A =
1 0 11/7
0 1 22/7
0 1/2 2
A =
1 0 11/7
0 1 22/7
0 0 3/7
Press any key to continue. . .
pivot = A(3,3)
A =
1 0 11/7
0 1 22/7
0 0 1
Press any key to continue. . .
eliminate in column 3
A =
1 0 11/7
0 1 22/7
0 0 1
Press any key to continue. . .
A =
1 0 0
0 1 22/7
0 0 1
A =
1 0 0
0 1 0
0 0 1
Press any key to continue. . .
>>