SL_esim_grafiikkaa.wxm 1 / 13 1 Plot Maximan sisäänrakennetut piirtokomennot sopivat "kevyeen" työskentelyyn. Komennot tunnistaa nimistä, joiden osana on plot. Avuksi Maximan käsikirjan luku "Plotting" ja Wilhelm Haager: Graphics with MAXIMA, pdf-dokumentti osoitteessa http://www.austromath.at/daten/maxima/zusatz/graphics_with_maxima.pdf wxmaxima-käyttöliittymään piirtokomennoista on yleensä kaksi versiota: wx-alkuiset, jotka sijoittavat kuvan wxmaxima-dokumenttiin, ja ilman wx-etuliitettä olevat. Vain jälkimmäiset on dokumentoitu käsikirjaan. 1.1 Funktion kuvaaja: y=f(x) wxplot-komentojen ruudulle muodostaman kuvan voi tallettaa vain rasterigrafiikkana (png, jpg, bmp tai xpm). Tällainen kuva kelpaa vain ruudulla käytettäväksi, ei julkaistavaksi/tulostettavaksi. (%i1) wxplot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011])$ (%t1) Kun kuva on tarkoitus tallettaa EPS-tiedostoksi, pitää wxplot-komentojen tilalle vaihtaa vastaava plot-komento: --> plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011], [gnuplot_term, ps], [gnuplot_out_file, "/Users/lehtonen/plot2d.eps"])$ Jos määre [gnuplot_out_file, "<hakemisto>/<nimi>.eps"] jätetään antamatta, kuva talletetaan nimellä maxplot.ps oletushakemistoon (käytttäjän kotihakemistoon). --> plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011], [psfile, "/Users/ari/plot2d.eps"])$ Kuvan ohjaaminen erilaisiin "ikkunointijärjestelmiin" (toimivuus riipuu käyttöympäristöstä): --> plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011], [gnuplot_term, x11])$ --> plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011], [gnuplot_term, aqua])$
SL_esim_grafiikkaa.wxm 2 / 13 --> plot2d([x^2, 3*x^2, x^2*(2+sin(1/x))], [x,-0.01,0.011], [plot_format, xmaxima])$ 1.2 Tasa-arvokäyrä: f(x,y)=c --> wxcontour_plot( x^2 + y^2, [x,-1.5,1.5], [y,-1.5,1.5], [gnuplot_preamble, "set size ratio -1"] )$ [gnuplot_preamble, "set size ratio -1"] asettaa kuvan x- ja y-akseleille saman mittayksikön. Ilman tätä asetusta ympyrät näyttävät ellipseiltä. (%i2) load(implicit_plot)$ (%i3) wximplicit_plot( x^2 + y^2 = 2, [x,-1.5,1.5], [y,-1.5,1.5], [gnuplot_preamble, "set size ratio -1"])$ (%t3) 1.3 Parametrisoitu käyrä: x=x(t), y=y(t) Cornun spiraali määritellään ns. Fresnelin integraalien avulla: (%i4) cornu_spiral:[parametric, fresnel_c(t), fresnel_s(t), [t,-10,10]]$ (%i5) circle:[parametric, cos(t), sin(t), [t,0,2*%pi]]$ (%i6) wxplot2d([cornu_spiral, circle], [nticks, 500], [gnuplot_preamble, "set size ratio -1"])$ (%t6) Mitä tässä esiintyvät Fresnelin integraalit ovat?
SL_esim_grafiikkaa.wxm 3 / 13 (%i7) diff([fresnel_c(t), fresnel_s(t)], t); (%o7) [ cos π t 2, sin π t 2 ] 2 2 (%i8) ev([fresnel_c(t), fresnel_s(t)], t=0); (%o8) [ 0, 0 ] Siis (%i9) [fresnel_c(t) = 'integrate( cos(%pi*s^2/2), s,0,t), fresnel_s(t) = 'integrate( sin(%pi*s^2/2), s,0,t)]; (%o9) [ fresnel_c t = t cos π s 2 0 2 d s, fresnel_s t = t sin π s 2 0 2 d s ] Cornun spiraalin raja-arvo, kun t kasvaa, on: (%i10) [fresnel_c(inf), fresnel_s(inf)]; (%o10) [ 1 2, 1 2 ]...tai laskettuna integaalina: (%i11) [integrate( cos(%pi*s^2/2), s,0,inf), integrate( sin(%pi*s^2/2), s,0,inf)]; (%o11) [ 1 2, 1 2 ] Vastaavasti, kun t vähenee: (%i12) [fresnel_c(minf), fresnel_s(minf)]; (%o12) [ - 1 2, - 1 2 ] 1.4 Data (%i13) lst:[[1,55], [2,15], [3,20], [4,17], [5,50], [6,85], [7,72], [8,89], [9,128], [10,57], [11,25], [12,90]]$ (%i14) wxplot2d([discrete, lst], [x,0.5,12.5], [y,0,130], [style, impulses])$ (%t14)
SL_esim_grafiikkaa.wxm 4 / 13 1.5 3d/funktion kuvaaja: z=f(x,y) 3d-grafiikka kannattaa usein piirtää komennon plot3d avulla, ei wxplot3d. Erilliseen ikkunaan piirrettyä 3d-oliota voi pyörittää hiiren avulla; wxplot3d-komennon tuottama kuva on täysin kaksiulotteinen. (%i15) wxplot3d(x^2 - y^2, [x, -1, 1], [y, -1, 1])$ (%t15) 1.6 3d/parametrisoitu pinta: x=f(u,v), y=g(u,v), z=g(u,v) Edellisen satulapinnan esitys napakoordinaattien avulla: (%i16) z_rt:ev(x^2 - y^2, x=r*cos(theta), y=r*sin(theta)); (%o16) r 2 cos θ 2 - r 2 sin θ 2 (%i17) wxplot3d([r*cos(theta), r*sin(theta), z_rt], [r, 0, sqrt(2)], [theta, -%pi, %pi])$ (%t17) Pallopinta (pallokoordinaattien avulla):
SL_esim_grafiikkaa.wxm 5 / 13 (%i18) wxplot3d([cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)], [theta, -%pi/2, %pi], [phi, -%pi/2, %pi/2])$ (%t18) Funktio cos(-x^2 + y^3/4) (muuttujan grid avulla määrätään laskentapisteiden lukumäärä): (%i19) wxplot3d(cos(-x^2 + y^3/4), [x, -4, 4], [y, -4, 4], [grid, 150, 150], [mesh_lines_color, false], [colorbox, true] )$ (%t19) Tasa-arvokäyrästö (=kuvaa katsotaan ylhäältä; tämä ilmeisesti ei toimi wxplot3d:llä): --> plot3d(cos(-x^2 + y^3/4), [x, -4, 4], [y, -4, 4], [grid, 150, 150], [mesh_lines_color, false], [elevation, 0], [azimuth, 0], [colorbox, true] )$ 2 Draw Erikseen ladattava draw-kirjasto on monipuolinen grafiikkapaketti. Komennot tunnistaa nimistä, joiden osana on draw. Avuksi Maximan käsikirjan luku "draw" ja Wilhelm Haager: Graphics with MAXIMA, pdf-dokumentti osoitteessa http://www.austromath.at/daten/maxima/zusatz/graphics_with_maxima.pdf
SL_esim_grafiikkaa.wxm 6 / 13 Draw-kirjaston graafisia objekteja: 2d: explicit, parametric, implicit, polar, points, polygon, rectangle, ellipse, triangle, quadrilateral, region, bars, vector, errors 3d: explicit, parametric, parametric_surface, implicit, cylindrical, spherical, tube, points, triangle, quadrilateral, vector draw- ja implicit_plot -kirjastot eivät ole yhteensopivia: (%i20) load(draw)$ STYLE-WARNING: redefining MAXIMA::CONTAINS-ZEROS in DEFUN STYLE-WARNING: redefining MAXIMA::SAMPLE-DATA in DEFUN STYLE-WARNING: redefining MAXIMA::PRINT-SEGMENT in DEFUN STYLE-WARNING: redefining MAXIMA::PRINT-SQUARE in DEFUN STYLE-WARNING: redefining MAXIMA::IMP-PL-PREPARE-FACTOR in DEFUN STYLE-WARNING: redefining MAXIMA::IMP-PL-PREPARE-EXPR in DEFUN 2.1 Funktion kuvaaja: y=f(x) (%i21) g1:explicit(x^2, x,-0.01,0.011); (%o21) explicit x 2, x, - 0.01, 0.011 (%i22) g2:explicit(3*x^2, x,-0.01,0.011)$ (%i23) g3:explicit(x^2*(2+sin(1/x)), x,-0.01,0.011)$ (%i24) wxdraw2d(color=red, g1, color=red, g2, color=green, g3)$ (%t24) 2.2 Tasa-arvokäyrä: f(x,y)=c (%i25) g:implicit(x^2 + y^2 = 2, x,-1.5,1.5, y,-1.5,1.5)$
SL_esim_grafiikkaa.wxm 7 / 13 (%i26) wxdraw2d(g)$ (%t26) draw-kirjastossa user_preamble="set size ratio -1" asettaa x- ja y-akseleille saman mittayksikön: (%i27) wxdraw2d(user_preamble="set size ratio -1", g)$ (%t27) 2.3 Parametrisoitu käyrä: x=x(t), y=y(t) (%i28) cornu_spiral:parametric( fresnel_c(t), fresnel_s(t), t,-5,5)$ (%i29) circle:parametric(cos(t), sin(t), t, 0, 2*%pi)$
SL_esim_grafiikkaa.wxm 8 / 13 (%i30) wxdraw2d(user_preamble="set size ratio -1", nticks=200, color=red, cornu_spiral, color=blue, circle)$ (%t30) 2.4 Data (%i31) lst:[[1,55], [2,15], [3,20], [4,17], [5,50], [6,85], [7,72], [8,89], [9,128], [10,57], [11,25], [12,90]]$ (%i32) wxdraw2d(xrange=[0.5,12.5], yrange=[0,130], fill_color=blue, points_joined=impulses, points(lst) )$ (%t32) Pylväsdiagrammeja varten datapisteissä pitää kolmantena komponenttina olla pylvään leveys: (%i33) lst2:makelist([lst[j][1], lst[j][2], 0.8], j,1,length(lst)); (%o33) [ [ 1, 55, 0.8 ], [ 2, 15, 0.8 ], [ 3, 20, 0.8 ], [ 4, 17, 0.8 ], [ 5, 50, 0.8 ], [ 6, 85, 0.8 ], [ 7, 72, 0.8 ], [ 8, 89, 0.8 ], [ 9, 128, 0.8 ], [ 10, 57, 0.8 ], [ 11, 25, 0.8 ], [ 12, 90, 0.8 ] ] Muutetaan lista pylväsdiagrammi-olioksi: (%i34) apply(bars, lst2); (%o34) bars ( [ 1, 55, 0.8 ], [ 2, 15, 0.8 ], [ 3, 20, 0.8 ], [ 4, 17, 0.8 ], [ 5, 50, 0.8 ], [ 6, 85, 0.8 ], [ 7, 72, 0.8 ], [ 8, 89, 0.8 ], [ 9, 128, 0.8 ], [ 10, 57, 0.8 ], [ 11, 25, 0.8 ], [ 12, 90, 0.8 ] )
SL_esim_grafiikkaa.wxm 9 / 13 (%i35) wxdraw2d(xrange=[0.5,12.5], yrange=[0,130], fill_color=blue, apply(bars, lst2) )$ (%t35) Komennon wxdraw jälkeen kuva ei ole EPS-muodossa talletettavaksi kelpaava, kommennon draw jälkeen on. Komento draw_file tallettaa viimeisimmän kuvan. --> draw2d(xrange=[0.5,12.5], yrange=[0,130], fill_color=blue, apply(bars, lst2) )$ --> draw_file(terminal=eps, dimensions=[1500,1000], file_name="/users/lehtonen/draw2d"); HUOMIO: Tulostettavaksi tarkoitettu kuva pitää tallettaa EPS-muotoon (tai PDF-muotoon; JPEG tai PNG ei ole riittävä). 2.5 3d/funktion kuvaaja: z=f(x,y) (%i36) g:explicit( sin(x)*sin(y), x,-2*%pi,2*%pi, y,-2*%pi,2*%pi)$ (%i37) wxdraw3d(g); (%t37) (%o37)
SL_esim_grafiikkaa.wxm 10 / 13 (%i38) wxdraw3d(xu_grid=50, yv_grid=50, surface_hide=true, view=[60, 30], g); (%t38) (%o38) (%i39) wxdraw3d(xu_grid=50, yv_grid=50, enhanced3d=true, surface_hide=true, view=[60, 30], contour=base, g); (%t39) (%o39) Erilliseen ikkunaan piirrettyä 3d-oliota voi pyörittää hiiren avulla; wxdraw3d-komennon tuottama kuva on täysin kaksiulotteinen. --> draw3d(xu_grid=50, yv_grid=50, enhanced3d=true, surface_hide=true, view=[60, 30], contour=both, g); --> draw_file(terminal=eps_color, dimensions=[1500,1000], file_name="/users/lehtonen/draw3d");
SL_esim_grafiikkaa.wxm 11 / 13 (%i40) wxdraw3d(xu_grid=50, yv_grid=50, contour_levels=10, contour=map, g); (%t40) (%o40) 2.6 Tasa-arvopinta f(x,y,z)=c (%i41) wxdraw3d(enhanced3d=true, surface_hide=true, proportional_axes=xyz, x_voxel=15, y_voxel=15, z_voxel=15, implicit( x^2 + y^2 + z^2 = 1, x, -1.1, 1.1, y, -1.1, 1.1, z, -1.1, 1.1) )$ (%t41) 2.7 Parametrisoitu pinta: x=f(u,v), y=g(u,v), z=g(u,v) (%i42) s2:[cos(theta)*cos(phi), sin(theta)*cos(phi), sin(phi)]; (%o42) [ cos φ cos θ, cos φ sin θ, sin φ ]
SL_esim_grafiikkaa.wxm 12 / 13 (%i43) wxdraw3d(enhanced3d=true, surface_hide=true, proportional_axes=xyz, xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1], parametric_surface( s2[1], s2[2], s2[3], theta, -%pi/2,%pi, phi, -%pi/2,%pi/2) )$ (%t43) 2.8 Parametrisoitu käyrä: x=f(t), y=g(t), z=g(t) (%i44) s2_c:ev(s2, phi=0.1*theta); (%o44) [ cos 0.1 θ cos θ, cos 0.1 θ sin θ, sin 0.1 θ ] (%i45) c:parametric(s2_c[1], s2_c[2], s2_c[3], theta, -6*%pi, 6*%pi)$ Spiraali (ns. loksodromi) pallopinnalla etelänavalta pohjoisnavalle: (%i46) wxdraw3d(enhanced3d=false, surface_hide=true, proportional_axes=xyz, xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1], nticks=500, line_width=2, color=red, c)$ (%t46)
SL_esim_grafiikkaa.wxm 13 / 13 (%i47) wxdraw3d(enhanced3d=false, surface_hide=true, proportional_axes=xyz, xrange=[-1.1, 1.1], yrange=[-1.1, 1.1], zrange=[-1.1, 1.1], parametric_surface( s2[1], s2[2], s2[3], theta, -%pi,%pi, phi, -%pi/2,%pi/2), nticks=500, line_width=2, color=red, c)$ (%t47)