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 = t 2, y = sin ( t 3 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 100 cos( 30 θ) 2 sin( 7 θ ) 2 R =, π 3 π <= θ <= π 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 R 2 -R 2 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