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

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

Code: Select all

print -dpng filnavn 
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. 8-)
Image
Image

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
Markonan wrote: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.

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
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. . .
>>