2D & 3D grafer

2D grafer

Gnuplot på Mac

Octave använder gnuplot för att rita grafer. Om du använder Mac, måste du se till att gnuplot fungerar. Du kan behöva installera om gnuplot med x11 support genom att använda homebrew:

brew uninstall gnuplot;brew install gnuplot --with-x

Starta sedan Octave och skriv:

setenv("GNUTERM","X11")

För troubleshooting kolla in detta.

Plotta grafer i Octave

Då man ritar grafer i Octave plottar man punkter vars x-värden är lagrade i en vektor och vars y-värden ligger i en annan vektor. De två vektorerna måste ha samma storlek.

Man använder en x-vektor för att lagra x-värdena; sedan använder man elementvisa operationer på x-vektorn för att lägga in funktionsvärdena i y-vektorn. Med dessa två vektorer kan man sedan använda kommandot

plot(x_vector, y_vector)

image

 

>>> x=-2:2
x =

-2 -1 0 1 2

>>> y=x.^2
y =

4 1 0 1 4

>>> plot(x,y)

Octave ritar linjer mellan punkterna. Om man vill ha en jämnare graf får man göra en längre x-vektor.

image

 

 

>>> x=-2:0.5:2;
>>> y=x.^2;
>>> plot(x,y)

Om man vet hur många punkter man vill plotta i ett intervall kan man låta Octave fördela punkterna linjärt genom att använda kommandot

linspace(första x-värdet, sista x-värdet, 
  antal jämnt fördelade punkter)

image

 

 

>>> x=linspace(-2, 2, 500);
>>> y=x.^2;
>>> plot(x,y)

3D - rutnätet

Om man har en funktion av två variabler \(z=f(x,y)\), behövs det tre axlar för att visa grafen.

Då man ritar en graf i 2D används jämnt fördelade x-värden och funktionsvärden av dessa som lagras i en y-vektor.

Då man ritar en graf i 3D behövs det jämnt fördelade x- och y-värden, placerade på ett rutnät där varje funktionsvärde z tas av en punkt (x, y) i rutnätet. För att åstadkomma detta används kommandot meshgrid.

>>> x=linspace(-2,2,5)
x =

-2 -1 0 1 2

>>> y=linspace(-2,2,5)
y =

-2 -1 0 1 2

>>> [xx,yy]=meshgrid(x,y)
xx =

-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2
-2 -1 0 1 2

yy =

-2 -2 -2 -2 -2
-1 -1 -1 -1 -1
0 0 0 0 0
1 1 1 1 1
2 2 2 2 2

Varje punkt i rutnätet tar sin x-koordinat från ett element i xx-matrisen och sin y-koordinat från motsvarande element i yy-matrisen. Allt som allt finns det 25 punkter i rutnätet.

Plotta en 3D-graf

Efter att ha gjort ett rutnät kan man plotta en 3D graf med hjälp av kommandot mesh(xx,yy,z), där xx och yy är matriserna skapade med meshgrid och där z är en funktion av x och y. Man får funktionsvärdena av z genom att använda elementvisa operationer på matriserna xx och yy.

image

>>> x=linspace(-2,2,5);
>>> y=linspace(-2,2,5);
>>> [xx,yy]=meshgrid(x,y);
>>> mesh(xx,yy,4-(xx.^2+yy.^2))

Om man vill ha en jämnare graf får man göra x-vektorn och y-vektorn längre.

image

>>> x=linspace(-2,2,50);
>>> y=linspace(-2,2,50);
>>> [xx,yy]=meshgrid(x,y);
>>> mesh(xx,yy,4-(xx.^2+yy.^2))

Man kan göra en konturplot med hjälp av kommandot meshc.

image

>>> x=linspace(-2,2,50);
>>> y=linspace(-2,2,50);
>>> [xx,yy]=meshgrid(x,y);
>>> meshc(xx,yy,4-(xx.^2+yy.^2)) 

by Malin Christersson under a Creative Commons Attribution-Noncommercial-Share Alike 2.5 Sweden License

www.malinc.se