GRAFIKA V MAPLU -- I. CAST Uvod Velikonocni vajicko > with(plots):setoptions3d(scaling=constrained,project ion=.5,style=patchnogrid): Warning, the name changecoords has been redefined > X:=cos(x)*cos(y)*(1+.2*sin(y)): Y:=sin(x)*cos(y)*(1+.2*sin(y)): Z:=1.5*sin(y): a:=plot3d([X,Y,Z],x=-Pi..Pi,y=-Pi/2..Pi/2,color=[1,. 8,.5],ambientlight=[.4,.4,.4],light=[75,50,.8,.8,.7] ,grid=[30,30]): p:=t+.1*sin(10*t): q:=.5*cos(10*t): X0t:=cos(p)*cos(q-.3)*(1+.2*sin(q-.3)): Y0t:=sin(p)*cos(q-.3)*(1+.2*sin(q-.3)): Z0t:=1.5*sin(q-.3): X1t:=cos(p)*cos(q-.6)*(1+.2*sin(q-.6)): Y1t:=sin(p)*cos(q-.6)*(1+.2*sin(q-.6)): Z1t:=1.5*sin(q-.6): X2t:=cos(p)*cos(q+.1)*(1+.2*sin(q+.1)): Y2t:=sin(p)*cos(q+.1)*(1+.2*sin(q+.1)): Z2t:=1.5*sin(q+.1): X3t:=cos(p)*cos(q+.6)*(1+.2*sin(q+.6)): Y3t:=sin(p)*cos(q+.6)*(1+.2*sin(q+.6)): Z3t:=1.5*sin(q+.6): X4t:=cos(p)*cos(q-1)*(1+.2*sin(q-1)): Y4t:=sin(p)*cos(q-1)*(1+.2*sin(q-1)): Z4t:=1.5*sin(q-1): b:=tubeplot({[X0t,Y0t,Z0t,radius=.04,color=[.9,.8,.2 ]],[X1t,Y1t,Z1t,radius=.03,color=[.0,.7,1]],[X2t,Y2t ,Z2t,radius=.05,color=[.3,.9,.2]],[X3t,Y3t,Z3t,radiu s=.05,color=[.1,.6,.6]],[X4t,Y4t,Z4t,radius=.025,col or=[.8,.3,.2]]},t=-Pi..Pi,numpoints=300,tubepoints=7 ): display3d({a,b},orientation=[0,-120]); > restart; > f:=x->exp(-x^2)*sin(Pi*x^3); :=f x e ( )-x 2 ( )sin x3 > plot(f, -2..2); ­0.4 ­0.2 0 0.2 0.4 ­2 ­1 1 2 Prikaz pro nakresleni funkce plot(f, a..b, options), a..b interval na ose x, options jsou nepovinne. Pri kresleni formule je treba pouzit plot(f(x), x=a..b, options). > plot(f(x), x=-2..2); ­0.4 ­0.2 0 0.2 0.4 ­2 ­1 1 2 x > plot(f, -infinity..infinity); -infinity infinity V tomto pripade Maple transformuje realnou osu na interval (-1,1). Vice funkci v jednom obrazku: > plot({f(x), exp(-x^2), -exp(-x^2)}, x=-2..2); ­1 ­0.5 0.5 1 ­2 ­1 1 2 x > plot([sin(x), cos(x)], x=0..2*Pi, color=[red, blue], thickness=[2,3], legend=["sin", "cos"]); sin cos ­1 ­0.5 0 0.5 1 1 2 3 4 5 6 x Pokud chceme omezit rozsah zobrazovanych hodnot na ose y, musime to Maplu sdelit: > plot(sin(x^2)/x^2, x=-6..6, y=0..1); 0 0.2 0.4 0.6 0.8 1 y ­6 ­4 ­2 2 4 6 x Maple voli meritko na obou osach tak, aby obrazek co nejlepe "zaplnil" display. Pokud chceme stejne meritko na osach, pouzijeme volbu scaling=constrained. > plot(sin(x^2)/x^2, x=-6..6, scaling=constrained); 0 1 ­6 ­4 ­2 2 4 6 x Nekdy je vymezeni rozsahu zobrazovanych hodnot nutne: > plot(tan, -Pi..Pi); ­1500 ­1000 ­500 0 ­3 ­2 ­1 1 2 3 > with(plots): Warning, the name changecoords has been redefined > display(%%, view=[-4..4,-10..10]); ­10 ­8 ­6 ­4 ­2 0 2 4 6 8 10 ­4 ­3 ­2 ­1 1 2 3 4 > plot(tan, -Pi..Pi, -10..10); ­10 ­8 ­6 ­4 ­2 0 2 4 6 8 10 ­3 ­2 ­1 1 2 3 Zamezeni "spojovani" nespojitych funkci provedeme pomoci volby discont=true. > plot(tan(x), x=-Pi..Pi, y=-10..10, discont=true); ­10 ­8 ­6 ­4 ­2 0 2 4 6 8 10 y ­3 ­2 ­1 1 2 3 x > plot(tan(x), x=-Pi..Pi, -10..10, discont=true, xtickmarks=[-3.14=`-Pi`, -1.57=`-Pi/2`, 1.57=`Pi/2`, 3.14=`Pi`]); ­10 ­8 ­6 ­4 ­2 0 2 4 6 8 10 -Pi -Pi/2 Pi/2 Pi x > plot(sin(x), x=0..20, `y(x)`=-0.5..1, xtickmarks=8, ytickmarks=4, title=`Graf funkce sinus`); Graf funkce sinus ­0.4 ­0.2 0 0.2 0.4 0.6 0.8 1 y(x) 2 4 6 8 10 12 14 16 18 20 x > plot(sin(x), x=0..20, `y(x)`=-0.5..1, xtickmarks=[5,10,15,20], ytickmarks=[-0.4,0,1], title=`Graf funkce sinus`); Graf funkce sinus ­0.4 0 1 y(x) 5 10 15 20 x > with(plots): > plot1:=plot(sin, 0..20, -0.5..1, tickmarks=[5,9], title= `Graf funkce sinus`): > plot2:=textplot({[4,0.75,`sin(x)`]}, align={ABOVE, RIGHT}): Implicitni nastaveni je centrovani horozontalni i vertikalni. Zarovnani menime parametrem align=t, kde t muze byt BELOW,RIGHT,ABOVE a LEFT. > display({plot1, plot2}); Graf funkce sinus sin(x) ­0.5 ­0.4 ­0.3 ­0.2 ­0.1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 2 4 6 8 10 12 14 16 18 20 Pro znazornovani dat se pouziva style=point. > plot(sin, 0..2*Pi, scaling=constrained, style=point); ­1 ­0.5 0 0.5 1 1 2 3 4 5 6 > plot(sin, 0..2*Pi, scaling=constrained, style=point, symbol=circle); ­1 ­0.5 0 0.5 1 1 2 3 4 5 6 > plotpoints:=[seq([i, ithprime(i)], i=1..9)]; plotpoints [ ],1 2 [ ],2 3 [ ],3 5 [ ],4 7, , , ,[:= [ ],5 11 [ ],6 13 [ ],7 17 [ ],8 19 [ ],9 23, , , , ] > plot(plotpoints, style=point, symbol=box); 5 10 15 20 2 4 6 8 > pointplot(plotpoints); 5 10 15 20 2 4 6 8 > > plots[polygonplot]([[3,-2],[7,-2],[5,5]],color=grey,ax es=framed); ­2 ­1 0 1 2 3 4 5 3 4 5 6 7 > ?plot[options] Styl a tloustka car > for i from 0 to 15 do thick[i]:=plot(i, x=0..1, thickness=i): od: > display(convert(thick, set), axes=box, tickmarks=[0,15], title=`thickness option: [0,1,...,15]` ); thickness option: [0,1,...,15] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 > for i from 1 to 4 do line[i]:=plot(i, x=0..1, linestyle=i): od: > display(convert(line, set), axes=box, tickmarks=[1,4], title=`linestyle option: [1,2,3,4]`); linestyle option: [1,2,3,4] 1 2 3 4 0.5 x > ?linestyle > interactive(sin(x), x); Initializing Java runtime environment. Struktura dvoj-dimenzionalni grafiky Vytvareni obrazku probiha ve dvou fazich: 1) Jsou spocitany funkcni hodnoty v referencnich bodech a tyto jsou ulozeny do objektu datoveho typu PLOT. 2) Objekt je vykreslen na obrazovce. > PLOT(CURVES([[1,1],[2,2], [3,1], [1,1]]), AXESSTYLE(NONE), SCALING(CONSTRAINED)); > P:=plot([[1,1], [2,2], [3,1], [1,1]], axes=none, scaling=constrained); P PLOT CURVES((:= [ ], , ,[ ],1. 1. [ ],2. 2. [ ],3. 1. [ ],1. 1. , ( )COLOUR , , ,RGB 1.0 0. 0. ), ( )SCALING CONSTRAINED , ( )AXESSTYLE NONE , ( )AXESLABELS ,"" "" , ( )VIEW ,DEFAULT DEFAULT ) > P; > f:=x->sqrt(2)-sqrt(2*sqrt(x)): > P:=plot(f(x), x=0..1, y=0..sqrt(2)); P PLOT CURVES [((:= [ ],0. 1.41421356237309515 [, 0.000681161067708333304, 1.18574447219701806] [, 0.00136232213541666661, 1.14251649477750617] [, 0.00204348320312499991, 1.11353133002946070] [, 0.00272464427083333321, 1.09110947646304536] [, 0.00408696640624999982, 1.05664011231514365] [, 0.00544928854166666643, 1.02997588452241362] [, 0.00817393281249999965, 0.988984671428109086] [, 0.0108985770833333329, 0.957275382020941201] [, 0.0163478656249999993, 0.908528339756601633] [, 0.0217971541666666657, 0.870819427181917072] [, 0.0312799478125000002, 0.819467599431483952] [, 0.0407627414583333348, 0.778764352651153735] [, 0.0620915279166666667, 0.708264957079369761] [, 0.0835616954166666648, 0.653857857823032074] [, 0.104929818958333323, 0.609317637273809498] [, 0.124740804791666660, 0.573753399132445496] [, 0.145253933124999984, 0.541147768783589056] [, 0.166468639791666651, 0.510880084658935751] [, 0.187615310624999976, 0.483465658085454830] [, 0.209367260833333346, 0.457587539678707467] [, 0.228526390416666670, 0.436415690230224751] [, 0.250095032499999981, 0.414118543416856166] [, 0.271752237499999993, 0.393137064899568456] [, 0.292622967499999997, 0.374072838367068172] [, 0.311575589791666663, 0.357625123681850176] [, 0.334112090833333320, 0.339016557617175084] [, 0.353203463333333301, 0.323975760718647754] [, 0.375411268124999975, 0.307228338718146032] [, 0.395068938333333286, 0.293013226572828689] [, 0.416636518125000022, 0.278014749677451211] [, 0.437173954375000006, 0.264264594371818040] [, 0.458602614583333345, 0.250424880036826503] [, 0.478280813958333329, 0.238136613844476264] [, 0.499506410416666658, 0.225300046202927761] [, 0.521553839791666585, 0.212392572803464352] [, 0.540746191874999949, 0.201485673008004351] [, 0.561474457916666614, 0.190027307452930394] [, 0.582888784999999965, 0.178518183114692697] [, 0.603838526249999896, 0.167561664675841993] [, 0.624108478124999921, 0.157228784514846343] [, 0.646614803749999911, 0.146046676928994090] [, 0.666837738333333263, 0.136245382971698303] [, 0.688430037499999980, 0.126023481864875775] [, 0.707995869791666620, 0.116966550869118891] [, 0.729386492499999984, 0.107277243374912290] [, 0.749513401458333228, 0.0983530679416697584] [, 0.770551820624999939, 0.0892148367826661737] [, 0.791120720833333291, 0.0804597072567572180] [, 0.812654453124999954, 0.0714749504508052080] [, 0.833393996666666692, 0.0629888177456983112] [, 0.854603175416666638, 0.0544727801778668308] [, 0.875636731458333317, 0.0461823989272109880] [, 0.894964384999999973, 0.0386950615003713860] [, 0.917116057083333325, 0.0302614205047448959] [, 0.936928776666666629, 0.0228467429151371082] [, 0.958053268125000023, 0.0150695701281506889] [, 0.978272101875000023, 0.00774536984891516233] [ ],1. 0., ], ( )COLOUR , , ,RGB 1.0 0. 0. ), ( )AXESLABELS ,"x" "y" , ( )VIEW ,..0. 1. ..0. 1.414213562 ) Nejdrive se vyhodnoti prvni argument prikazu plot (popisuje zadanou funkci), dale jsou vybrany equidistantni body ze zadaneho intervalu (implicitne 49 bodu) a numericky jsou v techto bodech spocteny funkcni hodnoty. Dale se maple diva na tyto body, jako by byly spojeny useckami a kontroluje, jestli mezi nekterymi useckami neni prilis velky uhel. Pokud ano, prida do teto oblasti dalsi referencni body. Maximalni pocet referencnich bodu je urcovan promennou resolution, jejiz implicitni hodnota je 200. Tedy pocet referencnich bodu je cele cislo z intervalu [49,200]. Pomoci funkce replot z balicku plots muzeme zvetsovat ci zmensovat drive nakresleny obrazek a ilustrovat vyse uvedenou skutecnost. > plots[replot] (P, x=0..0.01, y=1..sqrt(2)); 1 1.1 1.2 1.3 1.4 y 0 0.002 0.004 0.006 0.008 0.01 x > infolevel[plot] := 2: > plot(f(x), x=0..1, y=0..sqrt(2)): plot/adaptive: evalhf succeeded plot/adaptive: produced 59. output segments plot/adaptive: using 59. function evaluations > plot(f(x), x=0..1, y=0..sqrt(2), adaptive=false): plot/adaptive: evalhf succeeded plot/adaptive: produced 49. output segments plot/adaptive: using 49. function evaluations > infolevel[plot]:=1: > plot(x^2, x=0..1, sample=[0,1/2,1], adaptive=true); 0 0.2 0.4 0.6 0.8 1 0.2 0.4 0.6 0.8 1 x > plot(x^2, x=0..1, sample=[0,1/2,1], adaptive=false); 0 0.2 0.4 0.6 0.8 1 0.2 0.4 0.6 0.8 1 x > plot(x/(1-cos(5*x)), x=-5..5, -5..5); ­4 ­2 0 2 4 ­4 ­2 2 4 x > plot(x/(1-cos(5*x)), x=-5..5, -5..5, numpoints=200); ­4 ­2 0 2 4 ­4 ­2 2 4 x > plot(x+sin(2*Pi*x), x=0..49); 0 10 20 30 40 50 10 20 30 40 x > plot(x+sin(2*Pi*x), x=0..49, numpoints=200); 0 10 20 30 40 50 10 20 30 40 x Pokud chceme nejakou option zmenit pro celou session, musime jeji hodnotu nastavit pomoci procedury setoptions. > setoptions(scaling=constrained); > setoptions(numpoints); 49 > ?plot[structure] Specialni dvoj-dimenzionalni obrazky Funkce dana parametricky: syntaxe: plot([f(t), g(t), t=a..b], options) > plot([t*cos(2*Pi*t), t*sin(2*Pi*t), t=0..10], numpoints=500, scaling=constrained, axes=none); > plot([cos, sin, 0..2*Pi], scaling=constrained); ­1 ­0.5 0.5 1 ­1 ­0.5 0.5 1 Krivka v polarnich souradnicich: polarplot(r-expr,angle=range) > plots[polarplot](sin(3*theta), theta=0..2*Pi); ­1 ­0.8 ­0.6 ­0.4 ­0.2 0 0.2 0.4 ­0.8 ­0.6 ­0.4 ­0.2 0.2 0.4 0.6 0.8 polarplot([r-expr, angle-expr, parameter=range) > plots[polarplot]([sin(t), cos(t), t=0..2*Pi]); ­0.4 ­0.2 0.2 0.4 ­1 ­0.5 0.5 1 > plot([sin(t)/t, t, t=-6*Pi..6*Pi], coords=polar, numpoints=250); ­0.6 ­0.4 ­0.2 0 0.2 0.4 0.6 ­0.2 0.2 0.4 0.6 0.8 1 Krivka dana implicitne rovnici > implicitplot(x^3+y^3-5*x*y+1/5=0, x=-3..3, y=-3..3, grid=[50,50]); ­3 ­2 ­1 1 2 y ­3 ­2 ­1 1 2 x Maple pracuje se zadanou rovnici jako s funkci dvou promennych a generuje vrstevnici teto funkce na hladine z=0 (rez rovinou z=0). Nevyhodou teto metody je, ze ziskane obrazky mohou byt "kostrbate" v okoli singularit a mistech, kde krivka protina sebe samu. > implicitplot(2*x^4+y^4-3*x^2*y-2*y^3+y^2, x=-5/2..5/2, y=-5/2..5/2,scaling=constrained); 0.5 1 1.5 2 y ­1.5 ­1 ­0.5 0 0.5 1 1.5 x > v:=algcurves[parametrization](2*x^4+y^4-3*x^2*y-2*y^3+ y^2,x,y,t); v := - - - - +8470 6883 t 1548 t2 15 t3 18 t4 + + + +18 t4 336 t3 5056 t2 26696 t 43257 , + + + +4900 6020 t 2689 t2 516 t3 36 t4 + + + +18 t4 336 t3 5056 t2 26696 t 43257 > plot([op(v), t=-infinity..infinity], scaling=constrained); 0 0.5 1 1.5 2 ­1.5 ­1 ­0.5 0.5 1 1.5 > restart; Prokladani krivek (linearni regrese, metoda nejmensich ctvercu) - pouzijeme balik statistic: > datax:=seq(i, i=1..9); :=datax , , , , , , , ,1 2 3 4 5 6 7 8 9 > datay:=seq(ithprime(i), i=1..9); :=datay , , , , , , , ,2 3 5 7 11 13 17 19 23 > with(stats); Digits:=5; anova describe fit importdata random, , , , ,[ statevalf statplots transform, , ] :=Digits 5 > aproximace:=fit[leastsquare[[x,y], y=a*x+b, {a,b}]]([[datax],[datay]]); :=aproximace =y - 27 x 10 43 18 > pair:=(x,y)->[x,y]; plotpoints:=zip(pair, [datax],[datay]); :=pair ( ),x y [ ],x y plotpoints [ ],1 2 [ ],2 3 [ ],3 5 [ ],4 7, , , ,[:= [ ],5 11 [ ],6 13 [ ],7 17 [ ],8 19 [ ],9 23, , , , ] > plot1:=plot(plotpoints, style=point): > plot2:=plot(rhs(aproximace), x=0..10): > plots[display]({plot1,plot2}); 0 5 10 15 20 25 2 4 6 8 10 x Nasledujici obrazek ukazuje oblast, vyhovujici nerovnicim x+y<5, 0 plots[inequal]({x+y<5, 0 plot(sin(x), x=-Pi..Pi); ­1 ­0.5 0.5 1 ­3 ­2 ­1 1 2 3 x > G:=%: Nejprve prikazem > plotsetup(cps, plotoutput="sin.eps", plotoptions= "portrait,noborder,leftmargin=0,bottommargin=0"); Maplu sdelime, ze ma graficky vystup ukladat do postscriptoveho souboru sin.eps. Pote vygenerujeme obrazek, jehoz vystup se neobjevi na obrazovce, ale ulozi do souboru sin.eps v aktulanim adresari. > G; Zamezit kresleni ramecku kolem obrazku muzeme pouzitim doplnujiciho parametru plotoptions=noborder. Vystup grafiky zpet do zapisniku vratime prikazem: > plotsetup(default); > ?plot[device] > >