Grafika Egyváltozós függvény grafikonja Egyváltozós függvény grafikonját a plot paranccsal tudjuk kirajzolni. Elsı paraméter egy függvény képlete, a második paraméter változónév=intervallum alakú: > plot(x^3-16*x+2,x=-6..6); A parancsot a függvény képletével (mint az elıbbi példában) vagy egy függvénnyel is fel lehet hívni. Ekkor a második paraméter egy intervallum a változó név nélkül: > plot(cos,-10..10); > A parancsnak számos opciót adhatunk át. Néhány fontosabb: axes = (boxed, frame, normal, none) : a koordinátarendszer beállítása color = (red, blue, green, yellow, stb...) : a görbe színe labels = ["x-tengely felirata","y-tengely felirata"] linestyle = 1 (folytonos) 2 (pontozott) 3 (szaggatott) 4 (pont-vonal) : vonal stílusa style = line (összeköti a pontokat), point (csak pontokat rajzol) symbol = box, circle, cross, point, diamond : point stílus esetén a kirajzolandó szimbólum thickness = 1, 2, 3 : vonalvastagság title = "grafikon címe" > plot(sin(x),x=-5..5,axes=boxed, color=green, linestyle=4, labels=["x-tengely","y-tengely"], thickness=3,title="cos(x)"); Színt RGB kódolással is megadhatunk az alábbi módon: > plot(sin(x),x=-10..10,color=COLOR(RGB,0.55,0.65,0.75),thickne ss=3); Nézzünk néhány speciális opciót. A scaling=constrained opció megadásakor az x-tengelyen és az y-tengelyen fizikailag azonos hosszú lesz az egység, azaz méretarányos lesz az ábra: > plot(sin(x),x=-10..10,thickness=3,scaling=constrained); Nézzük az alábbi példát: > plot(x*sin(2*x),x=0..5,style=point); Látható, hogy a Maple alapból egy adaptív algoritmust használ annak eldöntésére, hogy milyen sőrőn kell kiértékelnie a függvényt, hogy elég síma grafikont kapjon, azaz ott, ahol gyorsabban változik a függvény alakja, több pontban értékeli és rajzolja ki a függvényt. Ezt ki lehet kapcsolni az adaptive=false opcióval: > plot(x*sin(2*x),x=0..5,style=point,adaptive=false); Nézzük az alábbi függvényt: > f:=x->sum((-1)^n*abs(x-n/10),n=0..30); Rajzoljuk ki a függvény grafikonját a [-0.5, 3.5] intervallumon: > plot(f(x),x=-0.5..3.5,thickness=2); Ha ugyanezt point stílusban rajzoljuk ki, látható, hogy azért nem egyenletes a függvény grafikon, mert túl kevés pontban értékelte ki a Maple a függvényt, így a csúcspontok közelében nem pontos az ábra: > plot(f(x),x=-0.5..3.5,thickness=2,style=point); Page 1
A numpoints=n opcióval meg lehet adni, hogy legalább hány pontot használjon a függvény kiértékeléséhez. Az elıbbi példát futtassuk le újra a numpoints=500 opcióval, így sokkal pontosabb grafikont kapunk: > plot(f(x),x=-0.5..3.5,thickness=2,numpoints=500); Rajzoljuk ki a tg függvény grafikonját a [-10,10] intervallumon: > plot(tan(x),x=-10..10,thickness=2); Az ábra igen torz. A fı oka ennek az, hogy a függvény tú nagy értéket vesz fel a szakadási pontjai környékén. Szebb ábrát kapunk, ha az y-tengely automatikus minimális-maximális értékének beállítását felülírjuk, megdajuk, a minimális és maximális értéket az y-tengelyen: > plot(tan(x),x=-10..10,y=-20..20,thickness=2); Így már visszakapjuk a tg függvény megszokott alakját, de a szakadási pontokban is összeköti az egymás utáni pontokat, így "függıleges" szakaszokat kapunk az ábrában. Ezt lehet elkerülni a discont=true opció megadásával. Ekkor arra számít a Maple, hogy nem folytonos függvény grafikonját rajzoljuk, így, ha hirtelen ugrást tapasztal a grafikonban, akkor nem fogja a pontokat összekötni: > plot(tan(x),x=-10..10,y=-20..20,thickness=2,discont=true); Több ábrát is kirajzolhatunk egy plot parancsban, ha a függvények képletét egy listában soroljuk fel. Ekkor az opciók értékeit is listában állíthatjuk be: > plot([sin(x),cos(x)],x=-10..10,color=[red,blue], linestyle=[1,3], thickness=2); >
Síkeli görbék grafikonja Egy általános síkbeli görbét paraméteres alakban adhatunk meg. Ennek általános alakja: x = f( t ) y = g( t ), α <= t <= β Paraméteres alakban megadott görbe grafikonját a plot paranccsal kaphatjuk meg. Ekkor egy 3 hosszú listában adjuk át a görbe paramétereit az alábbi szintaxisban: plot([f(t), g(t), t=α..β]) Rajzoljuk ki például az x = t2, y = sin( t3 − 1 ), 0<= t <= 2 paraméteres egyenletrendszerrel megadott görbét: > plot([t^2,sin(t^3-1),t=0..2]); A következı paraméter(ekben) megadhatunk korábban már látott opciókat: > plot([t^2,sin(t^3-1),t=0..2],color=blue,thickness=2); Rajzoljunk ki egy origó köréppontú 2 sugarú kört. Ismerjük, hogy ennek paraméteres elıállítása: x = 2 cos( t ), y = 2 sin( t ), 0 <= t <= 2π > plot([2*cos(t),2*sin(t),t=0..2*Pi],thickness=2); A Maple automatikusan választja meg a tengelyek fizikai hosszát, hogy a legjobban kitöltse az ábra területét, így a torzítás miatt nem kaptunk vissza kört. Ezt a scaling=constrained opció megadásával korrigálhatjuk. > plot([2*cos(t),2*sin(t),t=0..2*Pi],scaling=constrained,thickn Page 2
ess=2); Nézzünk még egy példát: x = sin( t ), y = sin( 2 t ), 0 <= t <= 2π > plot([sin(t),sin(2*t),t=0..2*Pi],thickness=2); >
Polár koordinátarendszerben definiált görbék Polár koordináták: x = r cos( θ ), y = r sin( θ ) r = g( θ ), a <= θ <= b alakú egyenlettel leírható görbék: az origóból induló félegyenesek egy pontban metszik a görbét (ha k π <= θ <= ( k + 1 ) π ) Rajzoljok ki az r = sin( 3 θ ), 0<= θ <= 2 π egyenlető polár koordinátarendszerben megadott görbe garfikonját. Ezt a polarplot paranccsal tehetjük meg, amelynek szintaxisa a plot parancséval egyezik meg. A polarplot parancsot a plots csomag betöltése után használhatjuk. Ebben a csomagban számos rajzoló parancs definiált. > with(plots); > polarplot(sin(3*t),t=0..2*Pi,thickness=2); Egy érdekes ábra: Rajzoljuk ki az cos( 30 θ ) 100 2 − sin( 7 θ ) − π 3π 2 R= , − <= θ <= π 8 2 2 100 + θ − 2 egyenlető polárkoordináta rendszerrel definiált görbét! > R:=t->100/(100+(t-Pi/2)^8)*(2-sin(7*t)-cos(30*t)/2); polarplot(R(t),t=-Pi/2..3*Pi/2,thickness=2); > Polár koordinátarendszerben paraméteres egyenletrendszerrel megadott általános görbe grafikonját is a polarplot paranccsal generálhatjuk. Tekintsük például az r = sin( t ), θ = cos( t ), 0<= t <= 2 π paraméteres egyenletrendszerrel definiált görbét: > polarplot([sin(t),cos(t),t=0..2*Pi], thickness=2); >
Pontsorozat kirajzolása A plot paranccsal tudunk pontok egy sorozatát kirajzolni. A pontok koordinátáit listák listájaként adjuk meg. > plot([[0,2],[2,3],[3,2],[4,-1],[0,2]],thickness=2); > plot([[0,1],[1,3],[2,-1],[3,2],[4,-2]],style=point,symbol=box ); >
Egyéb síkbeli rajzoló parancsok Page 3
Az itt felsorolt parancsokat mind a plots csomag betöltése után használhatjuk. Egyenlettel definiált síkbeli görbét az implicitplot paranccsal rajzolhatunk ki. Rajzoljuk ki az egységsugarú kört: > implicitplot(x^2+y^2=1,x=-1..1, y=-1..1, scaling=constrained, thickness=2); > implicitplot(sin(y)=y-x,x=-10..10, y=-10..10, thickness=2); Kétváltozós függvény szintvonalait rajzolja ki a contourplot parancs: > contourplot(x^2+y^2,x=-1..1,y=-1..1, scaling=constrained, thickness=2); > contourplot(x^2-y^2,x=-1..1,y=-1..1, scaling=constrained, thickness=2); Kétváltozós függvény szintvonalait szemlélteti a densityplot parancs is: > densityplot(x^2+y^2,x=-1..1,y=-1..1, scaling=constrained); A fieldpot paranccsal kétdimenziós vektormezıket, azaz R2->R2 alakú függvények "grafikonjait" tudjuk szemléltetni. Az elsı paraméterben a vektor értékő kétváltozós függvény két komponensfüggvényének képleteit adjuk meg egy kettı hosszú listában. > fieldplot([y*cos(x*y), x*cos(x*y)], x=-1..1,y=-1..1); > fieldplot([y, -x], x=-1..1,y=-1..1,scaling=constrained); >
A display parancs Grafikus outputot változókban is tudunk tárolni. Ekkor a display vagy a print paranccsal tudjuk a változó tartalmát kirajzolni: > restart: > g1:=plot(sin(x),x=-10..10,color=red,thickness=2): > g2:=plot(cos(x),x=-10..10,color=blue,thickness=2): > print(g1); A display parancs is a plots csomagban definiált. Vagy betöltjük a csomagot a with paranccsal, vagy az alábbi hosszabb szintaxissal használhatjuk a display parancsot: > plots[display](g2); A display paranccsal több grafikát egy koordinátarendszerben ábrázolhatunk: > plots[display](g1,g2); >
Kétváltozós függvény grafikonja A plot3d paranccsal tudunk kétváltozós függvény grafikont rajzolni: > plot3d(x^2+y^2,x=-10..10,y=-10..10); > plot3d(sin(x)*cos(y),x=-10..10,y=-10..10); A plot parancs opciói itt is használhatók, de vannak további lehetıségek is: grid=[n,m] : az x- és y-tengely irányú beosztások minimális számát adja meg view=[xmin..xmax, ymin..ymax, zmin..zmax] : a tengelyek minimális és maximális értékei orientation=[θ,φ] : megadhatjuk, hogy milyen irányból nézzünk rá az ábrára Page 4
style=POINT, HIDDEN, PATCH, WIREFRAME, CONTOUR, PATCHNOGRID, PACHCONTOUR, LINE : ábra stílusa shading=XYZ, XY, Z, ZGREYSCALE, ZHUE : színezési módszer > plot3d(sin(x)*cos(y),x=-10..10,y=-10..10,axes=box,grid=[50,50 ], orientation=[50,20],style=PATCHNOGRID); > plot3d(cos(sqrt(x^2+y^2)),x=-15..15,y=-15..15,axes=box,grid=[ 100,100],style=PATCHCONTOUR,shading=Z); >
Felület rajzolása Egy térbeli általános felületet paraméteres egyenletrendszerrel definiálhatunk: x = f( s, t ) y = g( s, t ) z = h( s , t ) a <= s <= b, c <= t <= d Ennek ábrázolására a plot3d parancsot használhatjuk az alábbi szintaxissal: plot3d( [ f( s, t ), g( s, t ), h( s, t ) ], s = a .. b, t = c .. d ) Tekintsük az x = sin( s ) y = cos( s ) sin( t ) z = sin( t ) −π <= s <= π, −π <= t <= π egyenlető felületet: > plot3d([sin(s),cos(s)*sin(t),sin(t)], s=-Pi..Pi, t=-Pi..Pi); > x = s sin( s ) cos( t ) y = s cos( s ) cos( t ) z = s sin( t ) 0 <= s <= 2 π, 0 <= t <= π > plot3d([s*sin(s)*cos(t),s*cos(s)*cos(t),s*sin(t)], s=0..2*Pi, t=0..Pi); >
Gömbi koordinátarendszer A gömbi koordinátarendszerben a (ρ,θ,φ) koordinátákat használjuk. Az alapegyenlet ρ = f( θ, φ ) alakú. Ezek olyan felületek, amelyeket az origóból induló félegyenesek egy pontban metszenek. Ilyen felületeket a sphereplot paranccsal tudjuk kirajzolni. A parancs a plots csomagban van definiálva. A szintaxisa: Page 5
sphereplot( f( θ, φ ), θ = a .. b, φ = c .. d ) A gömb egyenlete gömbi koordinátákat használva: ρ=1 0 <= θ <= 2 π, 0 <= φ <= π > with(plots): > sphereplot(1,s=0..2*Pi,t=0..Pi,axes=boxed,scaling=constrained ); > sphereplot(1,s=0..Pi,t=0..Pi,axes=boxed,scaling=constrained); 4 φ ρ = sin( θ ) 3 -1 <= θ <= 2 π, 0 <= φ <= π > sphereplot((4/3)^t*sin(s), t=-2..2*Pi, s=0..Pi); >
Henger koordináták A henger koordinátarendszerben a (r, θ, z) koordinátákat használjuk. Az alapegyenlet r = f( θ, z ) alakú. Ilyen felületeket a cylinderplot paranccsal tudjuk kirajzolni. A parancs a plots csomagban van definiálva. A szintaxisa: cylinderplot( f( θ, z ), θ = a .. b, z = c .. d ) A klasszikus példa a henger felület egyenlete: r=1 0 <= θ <= 2 π, 0 <= z <= 2 > with(plots): > cylinderplot(1,s=0..2*Pi,t=0..2); > cylinderplot(1,s=0..2*Pi,t=0..2,grid=[15,2],axes=boxed); r=θ 0 <= θ <= 6 π, 0 <= z <= 2 > cylinderplot(s,s=0..6*Pi,t=0..2); > cylinderplot(s,s=0..6*Pi,t=0..2,grid=[60,2]); r=z 0 <= θ <= 6 π, 0 <= z <= 2 > cylinderplot(z,s=0..6*Pi,z=0..2,axes=boxed); > cylinderplot(z,s=0..6*Pi,z=0..2,axes=boxed,grid=[50,2]); >
Térbeli görbék rajzolása Page 6
Térbeli görbét paraméteresen definiálhatunk: x = f( t ) y = g( t ) z = h( t ) a <= t <= b > with(plots): Tekintsük példaként az x = cos( t ) y = sin( t ) z=t 0 <= t <= 8 π paraméteres egyenletrendszerrel definiált gorbét: > spacecurve([cos(t),sin(t),t],t=0..8*Pi,axes=boxed); A tubeplot parancs egy kis hengert rajzol a görbe köré, ezáltal jobban látható az ábra. A radius opcióban adhatjuk meg a henger sugarát (amely a t paramétertıl is függhet). > tubeplot([cos(t),sin(t),t],t=0..4*Pi,radius=0.2,axes=boxed); > tubeplot([t*cos(t),t*sin(t),t],t=0..8*Pi,radius=0.5,axes=boxe d); >
Speciális térbeli rajzoló parancsok Kétváltozós függvények szintvonalait térben ábrázolhatjuk a contourplot3d paranccsal: > contourplot3d(x^2+y^2, x=-3..3,y=-3..3,filled=true); Háromdimenziós vektormezı ábrázolása: > fieldplot3d([2*x,2*y,1], x=-1..1,y=-1..1,z=-1..1, grid=[5,5,5],axes=boxed); > fieldplot3d([y,z,x], x=-1..1,y=-1..1,z=-1..1, grid=[5,5,5],axes=boxed); Egyenlettel definiált felület grafikonja rajzolása: > implicitplot3d(x^2+y^2+z^2=1,x=-1..1,y=-1..1,z=-1..1,axes=box ed); > implicitplot3d(x^2+y^3+z^4=1,x=-1..1,y=-1..1,z=-1..1,axes=box ed); >
Animáció Az animate paranccsal egy paramétert tartalmazó egyváltozós függvény grafikonjának animációját állíthatjuk elı a paraméter bizonyos határok közötti változtatásával. > with(plots): > animate(sin(x)+a,x=-20..20,a=0..5); A plot parancs opcióit itt is használhatjuk. A görbe símaságát például a numpoints opció segítségével javíthatjuk: > animate(sin(x)+a,x=-20..20,a=0..5,numpoints=100,color=blue,th ickness=2); A frames=m opcióval adhatjuk meg, hogy hány kockából álljon az animáció: > animate(sin(a*x),x=-20..20,a=0..3,numpoints=300,frames=8,colo Page 7
r=blue,thickness=2); Paramétert tartalmazó kétváltozós függvény grafikonjának animálása: > animate3d(a*sin(x)*y,x=-10..10,y=-5..5,a=0..10,frames=30,grid =[50,20],color=blue,thickness=2,axes=boxed); Egyéni animációt a display paranccsal készíthetünk: a képkockákat egyessével generáljuk és elmentjük változókban, majd a display paranccsal az insequence=true opció beállításakor nem egymásra rajzolja ki az ábrákat, hanem animációt állít össze belılük. > g1:=plot(sin(x),x=0..20,color=red): > g2:=plot(sin(x)+1,x=0..20,color=green,thickness=2): > g3:=plot(sin(x)+2,x=0..20,color=blue,thickness=3): > display([g1,g2,g3],insequence=true); >
Page 8