MATLAB sisältää monipuoliset plottauskomennot datan 2- ja
3-ulotteiseen visualisoimiseen. Katso esimerkiksi komentoja
plot
ja plot3
.
plot
-komennon
avulla. Ajatellaan, että haluamme piirtää käyrän
y=x3-2x+1 välillä [-2,2]. Näin se käy:
Muuttujaksi x
otetaan sataan osaan
diskretoitu x-akseli.
» x=linspace(-2,2,100);Luvun 100 voi jättää pois, sillä 100 on oletusarvo. Lasketaan y-vektoriin vastaavat funktion arvot. Huomaa
.^
(mieti tarkkaan pisteen merkitys).
» y=x.^3-2*x+1;Plotataan vektorien x ja y pisteparit.
» plot(x,y)
Kokeile minkälaisen käyrän saat jos 100:n sijasta käytät arvoa 10.
Kuvan skaalausta voi muuttaa komennolla axis
.
Perusmuoto on axis([xmin xmax ymin ymax])
, joka määrää
koordinaatiston rajat. axis
-komennon argumenttina voi olla
myös erinäisiä merkkijonoja, joista useimmin tarvittavia lienevät
axis('equal')
ja axis('square')
. Alkutilaan päästään
komennolla axis('normal')
.
axis('equal')
ja axis('square')
, jotka muuten voi
antaa myös tyyliin axis equal
, ovat erityisen tarpeellisia
silloin, kun halutaan esim. ympyrän näyttävän ympyrältä.
Kokeile miten äsken saamasi kuva muuttuu kun käytät yllä mainittuja
axis
-komennon eri muotoja. Kokeile myös zoomausta
axis
-komennon avulla, kunnes diskretointiraja tulee vastaan,
jolloin viimeistään on tehtävä uusi linspace
.
help zoom
antaa tietoa uudesta
zoomauskomennosta. Komento zoom on
mahdollistaa zoomattavan
alueen valinnan hiirellä.
Jos haluat piirtää toisen käyrän jo olemassaolevaan kuvaan, niin anna
komento hold on
. Tämän jälkeen kaikki seuraavat
käyrät tulevat edellisten 'päälle', kunnes annetaan komento hold
off
. Piirrä yllä saadun käyrän kanssa samaan kuvaan
y=2cos(x2-5x+17).
Toinen tapa usean käyrän piirtämiseksi samaan kuvaan on
plot
-komennon muoto
plot(x1,y1,x2,y2,x3,y3,...)
. plot
-komennossa
voi lisätä viivatyyppimääreen kullekin haluamalleen käyrälle. Jos
haluttaisiin vaikkapa piirtää sinikäyrä sinisellä, kosinikäyrä
katkoviivalla ja lisäksi merkitä jälkimmäiselle rinkuloilla kaikki
/2:n monikerrat välillä [0,10], olisi
sopivaa tehdä näin:
» x=linspace(0,10); » x1=0:pi/2:10; » plot(x,sin(x),'b',x,cos(x),'--',x1,cos(x1),'o') » grid
Huomaa, että plot(x1,cos(x1),'o')
('o' :n sijalla käy
esim. 'x' tai '.') piirtää vain ao. pisteet, mutta jättää
yhdistysjanat piirtämättä.
grid
-komennolla saa
koordinaatti- (hila-) viivat, usein kätevää. Kokeile joitakin yllä
esitetyn kaltaisia yhdistelmiä.
Uuden piirtoikkunan saa avatuksi komennolla figure
.
Piirtoikkunoilla on numero, jonka avulla useista ikkunoista voidaan
valita se, johon halutaan piirtää: komento figure(n)
, missä
n
on ikkunan numero, ohjaa seuraavat käyrät ikkunaan
n
.
Komennon
linspace
oletusarvona on jako sataan osaan, mikä on yleensä sopiva
2D-piirroksiin. Tavallisimmin piirto tehdään siten tähän tapaan:
» x=linspace(a,b);a:lla ja b:llä oltava numeeriset arvot.
» y=lauseke;Lauseke, jossa esiintyy x, kuten
y=exp(sin(x))+x.^3
» plot(x,y)
Yllä kannattaa panna merkille puolipisteen käyttö, joka säästää tarpeettomalta pitkän vektorin tulostukselta.
Huomaa erityisesti, että jos haluat muuttaa x-aluetta,
vaikkapa "zoomata" kiintoisammalle alueelle, niin komennon
x=linspace(...);
jälkeen on laskettava y-arvot
uudestaan uusissa x-pisteissä, muuten x- ja
y-arvot eivät vastaa toisiaan ja kuva on sen mukainen, yleensä
hyvin omituinen. Usein kannattaa sijoittaa kaikki yllä olevat 3
komentoa samalle riville ja nuolinäppäin-iteroida/editoida.
Komento
fplot
on vaihtoehtoinen tapa funktion
piirtämiseen. Tällöin funktion on oltava joko MATLAB-funktio (kuten
sin
, cos
, exp
, ...) tai itse määritelty
(M-tiedostossa asustava) funktio.
Esim: fplot('sin',[0,2*pi])
tekee saman kuin
x=linspace(0,2*pi);plot(x,sin(x))
. (Modulo x-akselin
diskretointi)
Selvitä itsellesi, miten 3D-kuvia tehdään, vaikkapa seuraavan
esimerkin avulla, kyse on funktion
f(x,y)=e-x2-y2
kuvaajasta. Samalla tavalla muodostettu korkeusmatriisi soveltuu niin
pinta- (surf
), korkeuskäyrä-
(contour
) kuin yhdistelmäkuviin
(surfc
).
» xx=-2:.1:2; yy=xx; » [x,y]=meshgrid(xx,yy); » size(x) ans = 41 41 » z=exp(-x.^2-y.^2); » surf(x,y,z)
» for j=1:5;view(-20+10*j,20*j),pause,end; % Kokeile pientä liikettä » contour(x,y,z)