grafieken.nb
1
Grafieken André Heck © 2001 AMSTEL Instituut, Universiteit van Amsterdam Resultaten van berekeningen worden vaak grafisch weergegeven. Je weet al hoe je de grafiek van een functie, bijvoorbeeld x # sin þþþþ12 x , tekent: In[1]:= Plot Abs Sin x
2
,
x,
-
6 * Pi, 6 * Pi
;
1 0.8 0.6 0.4 0.2 -15 -10 -5
5
10
15
In "Klassieke Natuurkunde: Golven en trillingen" wordt deze grafiek verfraaid d.m.v. opties: In[2]:= Plot Abs Sin x
2 , x, - 6 * Pi, 6 * Pi , PlotStyle Hue 0 , AspectRatio 1 4, Ticks Range - 6 * Pi, 6 * Pi, 2 * Pi , None
-
6 p -4 p -2 p
;
2p 4p 6p
In deze les leer je dergelijke methoden en technieken op het gebied van het tekenen van grafieken met Mathematica. We gaan ook in op de werking van Mathematica wat betreft grafieken. Werk dit Mathematica notebook aandachtig door en maak de oefeningen. Succes!
Å
Telkens opnieuw beginnen met
In[3]:= Clear "ë" ;
Off General::"spell1" ;
Het eerste commando maakt toegewezen waarden en definities van alle gebruikte symbolen die alleen uit kleine letters bestaan ongedaan. Het tweede commando onderdrukt meldingen over mogelijke spelfouten.
grafieken.nb
Å
2
Opties
Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoorbeeld het bereik van de grafiek, welke merktekens langs de assen staan en waar, lijndiktes, etc. Vaak is dit goed, maar soms is het niet naar wens en moet je zelf sturing geven. Bekijk de grafiek van de functie x # x3 - x2 op het interval (-1,1): In[5]:= Plot x ^ 3 - x ^ 2, -1
-0.5
x,
-
1, 1
;
0.5
-0.05
1
-0.1 -0.15 -0.2 -0.25 -0.3 -0.35
Als je alle functiewaarden op het gegeven domein wilt zien, dan kun je de optie PlotRange de waarde All geven (schrijf de optie als substitutieregel): In[6]:= Plot x ^ 3 -1
-
x ^ 2,
x,
-
1, 1 , PlotRange All ;
-0.5
0.5
1
-0.5 -1 -1.5 -2
Je kunt ook zelf een bereik opgeven: In[7]:= Show %, PlotRange -1
-0.5
-
0.5, 0
;
0.5
1
-0.1 -0.2 -0.3 -0.4 -0.5
We hebben hier nog meer gedaan: we gebruiken Show commando om de grafiek opnieuw te tekenen onder nieuwe condities. Voorwaarde om dit commando te gebruiken is wel dat er geen nieuwe functiewaarden meer uitgerekend hoeven te worden. Je kunt bijvoorbeeld wel vragen om de grafiek te tekenen zonder de assen.
grafieken.nb
3
In[8]:= Show %, Axes
False ;
Maar je kunt Show niet gebruiken met de optie PlotPoints om het aantal punten in de grafiek in te stellen; hiervoor is echt een nieuwe berekening nodig. In[9]:= Show %, PlotPoints
100 ;
Graphics::optx : Unknown option PlotPoints in
ú
Graphics ú.
Je kunt informatie over een optie krijgen op de bekende manier: In[10]:= ? PlotPoints PlotPoints is an option for plotting functions that specifies how many sample points to use.
More… Er zijn twee manieren om een overzicht van de opties van het Plot-commando te krijgen: In[11]:= ?? Plot generates a plot of f as a function of x from xmin to Plot f, x, xmin, xmax xmax. Plot f1, f2, ... , x, xmin, xmax plots several functions fi. More… Attributes Plot
=
HoldAll, Protected
1 Options Plot = AspectRatio þþþþþþþþþþþþþþþþ þþþþþþþþ , Axes Automatic, AxesLabel None, GoldenRatio AxesOrigin Automatic, AxesStyle Automatic, Background Automatic, ColorOutput Automatic, Compiled True, DefaultColor Automatic, Epilog , Frame False, FrameLabel None, FrameStyle Automatic, FrameTicks Automatic, GridLines None, ImageSize Automatic, MaxBend 10., PlotDivision 30., PlotLabel None, PlotPoints 25, PlotRange Automatic, PlotRegion Automatic, PlotStyle Automatic, Prolog , RotateLabel True, Ticks Automatic, DefaultFont $DefaultFont, DisplayFunction $DisplayFunction, FormatType $FormatType, TextStyle $TextStyle
In[12]:= Options Plot Out[12]=
1 , Axes Automatic, AxesLabel None, GoldenRatio AxesOrigin Automatic, AxesStyle Automatic, Background Automatic, ColorOutput Automatic, Compiled True, DefaultColor Automatic, Epilog , Frame False, FrameLabel None, FrameStyle Automatic, FrameTicks Automatic, GridLines None, ImageSize Automatic, MaxBend 10., PlotDivision 30., PlotLabel None, PlotPoints 25, PlotRange Automatic, PlotRegion Automatic, PlotStyle Automatic, Prolog , RotateLabel True, Ticks Automatic, DefaultFont $DefaultFont, DisplayFunction $DisplayFunction, FormatType $FormatType, TextStyle $TextStyle AspectRatio
þþþþþþþþþþþþþþþþ þþþþþþþþ þþþþþþþþþ
grafieken.nb
4
Je ziet hier nogal vaak als waarde van een optie Automatic verschijnen: dit betekent dat Mathematica een ingebouwd algoritme gebruikt. We bespreken enkele veel gebruikte opties.
é
PlotRange
Bij de instelling Automatic wordt de verdeling van functiewaarden bekeken en op basis hiervan wordt een tekengebied gekozen; extreme waarden worden niet getekend. Je kunt dit ook combineren met vastgestelde grenzen: In[13]:= Plot x ^ 3 - x ^ 2,
x,
-
2, 2 , PlotRange
-
1, Automatic
;
0.2 -2
-1
1
2
-0.2 -0.4 -0.6 -0.8 -1
é
PlotStyle
De stijl van een getekende lijn kun je vastleggen in de optie PlotStyle. Als je deze de waarde Thickness[0.05] geeft, dan krijg je een dikke lijn; met GrayLevel[0.5] krijg je een grijze lijn en met PlotStyle -> {Thickness[0.05], GrayLevel[0.5]} krijg je een dikke grijze lijn: In[14]:= Plot x ^ 3 - x ^ 2, -1
-0.5
x,
-
1, 1 , PlotStyle Thickness 0.05 , GrayLevel 0.5 0.5
-0.05
1
-0.1 -0.15 -0.2 -0.25 -0.3 -0.35
Je kunt ook stippellijntjes specificeren: In[15]:= Plot x ^ 3 - x ^ 2, -1
-0.5
-0.05 -0.1 -0.15 -0.2 -0.25 -0.3 -0.35
x,
-
1, 1 , PlotStyle Dashing 0.5
1
0.02
;
;
grafieken.nb
5
Of kleuren kiezen. Dit kan op meerdere manieren: Hue[h] kleurenschema op basis van verzadiging h tussen 0 en 1. RGBColor[r,g,b] kleurenschema met rood-groen-blauw-waarden r, g, en b tussen 0 en 1. In[16]:= Plot x ^ 3 - x ^ 2, -1
-0.5
x,
-
1, 1 , PlotStyle Hue 0 0.5
-0.05
;
1
-0.1 -0.15 -0.2 -0.25 -0.3 -0.35 In[17]:= Plot x ^ 3 - x ^ 2, -1
-0.5
x,
-
1, 1 , PlotStyle RGBColor 0, 0, 1 0.5
-0.05
;
1
-0.1 -0.15 -0.2 -0.25 -0.3 -0.35
Als je Engelse namen wilt gebruiken, dan moet je eerst het Graphics‘Colors‘ pakket laden: In[18]:=
<<
Graphics‘Colors‘
In[19]:= Plot x ^ 3 - x ^ 2, -1
-0.5
-0.05
x,
-
1, 1 , PlotStyle Green ; 0.5
1
-0.1 -0.15 -0.2 -0.25 -0.3 -0.35
é
Diverse kleurenkaarten
De volgende opdrachten, die je nog niet hoeft te snappen, geven diverse kleurenkaarten voor GrayLevel, Hue en RGBColor. Ze zijn louter en alleen bedoeld als naslagkaarten; de code hoef je (nog) niet te snappen:
grafieken.nb
6
In[20]:= Show
Graphics Join Table GrayLevel i 25 , Rectangle i, 0 , i + 1, 8 Table Text i 5.0, 5 * i + 0.5, - 1 , i, 0, 5 , AspectRatio Automatic ;
0
0.2
0.4
0.6
0.8
, i, 0, 25
1.
In[21]:= Show
Graphics Join Table Hue i 25 , Rectangle i, 0 , i + 1, 8 Table Hue i 5.0 , Text i 5.0, 5 * i + 0.5, - 1 , AspectRatio Automatic ;
0
0.2
In[22]:= rgkleuren
0.4 =
merktekens
0.6
0.8
, i, 0, 25 , i, 0, 5
,
1.
Table RGBColor i, j, 0 , j, 0, 1, 0.1 , i, 0, 1, 0.1 ; 0, 0 , 5, 0.5 , 11, 1 , 0, 0 , 5, 0.5 , 11, 1 ;
=
In[24]:= Show Graphics RasterArray rgkleuren
, Frame Automatic, FrameTicks merktekens, AspectRatio Automatic, FrameLabel r, g , RotateLabel False, PlotLabel -> "RGB r,g,0 kleurenschema" ; RGB r,g,0 kleurenschema 0 0.5 1 1
g
1
0.5
0.5
0
0 0
In[25]:= rbkleuren
0.5 r =
1
Table RGBColor i, 0, j ,
j, 0, 1, 0.1 , i, 0, 1, 0.1
;
,
grafieken.nb
7
In[26]:= Show Graphics RasterArray rbkleuren
, Frame Automatic, FrameTicks merktekens, AspectRatio Automatic, FrameLabel r, b , RotateLabel False, PlotLabel -> "RGB r,0,b kleurenschema" ; RGB r,0,b kleurenschema 0 0.5 1 1
b
1
0.5
0.5
0
0 0
In[27]:= gbkleuren
0.5 r =
1
Table RGBColor 0, i, j ,
j, 0, 1, 0.1 , i, 0, 1, 0.1
In[28]:= Show Graphics RasterArray gbkleuren
, Frame Automatic, FrameTicks merktekens, AspectRatio Automatic, FrameLabel g, b , RotateLabel False, PlotLabel -> "RGB 0,g,b kleurenschema" ; RGB 0,g,b kleurenschema 0 0.5 1 1
b
1
0.5
0.5
0
0 0
é
0.5 g
1
PlotLabel, AxesLabel en Ticks
Het volgende voorbeeld moge duidelijk maken hoe je - titels en teksten bij de assen kunt plaatsen, - markeringen naar keuze maakt.
;
grafieken.nb
8
In[29]:= titel
=
"grafiek van Sin x ^2"
Out[29]= grafiek van Sin x ^2 In[30]:= asteksten Out[30]=
x, Sin x
In[31]:= markers Out[31]=
0,
p þþþþ
2
x, Sin x ^ 2
=
2
=
, p,
Range 0, 2 * Pi, Pi 2 , Automatic 3 , 2 p , Automatic 2
p þþþþþþþþ
In[32]:= Plot Sin x ^ 2,
x, 0, 2 * Pi , PlotLabel titel, AxesLabel asteksten, Ticks markers ; 2 Sin xgrafiek van Sin x ^2 1
0.8 0.6 0.4 0.2 p þþþþ
3 2
p þþþþþþþþ
p
2
x 2p
Je kunt het allemaal zo mooi maken als je zelf wilt. Een voorbeeld van letterkeuze en notatiekeuze: In[33]:= lbl
=
StringForm "grafiek van ‘1‘", Sin x ^ 2
Out[33]= grafiek van Sin x
2
In[34]:= titel
= StyleForm TraditionalForm lbl , FontSize 15, FontWeight -> "Bold", FontSlant "Italic" ; asteksten = x, None ;
Plot Sin x ^ 2, x, 0, 2 * Pi , PlotLabel titel, AxesLabel asteksten, Ticks markers ;
grafiek van sin2 x 1 0.8 0.6 0.4 0.2 p þþþþ
2
é
p
3 2
p þþþþþþþþ
x 2p
Gridlines
Met GridLines geef je aan of je "ruitjespapier" wilt.
grafieken.nb
9
In[37]:= Plot x ^ 2,
x,
-
3, 3 , PlotRange All, GridLines Automatic ;
8 6 4 2 -3
é
-2
-1
1
2
3
AspectRatio
Met AspectRatio stel je de schaling van de grafiek in (standaardwaarde geeft guldensnede verhouding). De waarde Automatic geeft een 1-1 schaling zoals het volgende voorbeeld illustreert. In[38]:= ParametricPlot
Cos t , Sin t
,
t, 0, 2 * Pi
;
,
t, 0, 2 * Pi ,
1 0.5
-1
-0.5
0.5
1
-0.5 -1 In[39]:= ParametricPlot
AspectRatio
Cos t , Sin t Automatic ;
1
0.5
-1
-0.5
0.5
1
-0.5
-1
Het verschil tussen AspectRatio gende voorbeeld:
1 en AspectRatio
Automatic komt het best tot uiting in het vol-
grafieken.nb
10
In[40]:= ParametricPlot
PlotRange AspectRatio
Cos t , Sin t , 2, 2 , - 1, 1 , 1 ;
t, 0, 2 * Pi ,
-
1 0.75 0.5 0.25 -2 -1.5 -1 -0.5
0.5
1
1.5
2
-0.25 -0.5 -0.75 -1 In[41]:= ParametricPlot
Cos t , Sin t , PlotRange - 2, 2 , - 1, 1 , AspectRatio Automatic ;
t, 0, 2 * Pi ,
1 0.75 0.5 0.25 -2 -1.5 -1 -0.5 -0.25 -0.5 -0.75 -1
é
0.5
1
1.5
2
Oefeningen
1. De grafiek van de tangens ziet er in Mathematica niet zo mooi uit: In[42]:= Plot Tan x ,
x,
-
5, 5
;
40 20
-4
-2
2
4
-20 -40
Verbeter de grafische weergave. 2. Je kunt in Mathematica grafieken van meerdere functies in één figuur tekenen. Je moet dan het eerste argument van het Plot commando vervangen door een lijst van functies. Je kunt dan ook lijsten gebruiken voor de waarde van een optie om ze per fucntie te laten werken. De algemene vorm is dus Plot[ {f1[x], f2[x],...}, {x, xmin, xmax}, optie {o1, o2, ...}] (i) Teken de grafiek van sin x en sin x2 in één figuur.
grafieken.nb
11
(ii) Teken de grafiek van sin x en sin x2 in één figuur, met de eerste rood-gekleurd en de tweede groen-gestreept. (iii) Laad het Graphics‘Legend‘ pakket via In[43]:=
<<
Graphics‘Legend‘
Je kunt nu de optie PlotLegend gebruiken om een bijschrijft toe te voegen aan de grafiek. Doe dit voor de twee gegeven functies.
Å
3-dimensionale grafieken
In[44]:= Clear "ë" ;
Met een 3-dimensionale grafiek (kortweg 3D-grafiek genoemd) kun je formules bestuderen die 2 onbekenden bevatten. De twee onbekenden bepalen het grondvlak van de grafiek. De waarde van de formule wordt op de verticale as uitgezet. Er vormt zich een gebogen vlak dat bij elk punt in het grondvlak de bijbehorende waarde van de formule aangeeft. Het maken van een 3D-grafiek is net zo eenvoudig als bij een 2D-grafiek: alleen gebruik je nu het commando Plot3D en enkele andere opties om de grafiek naar je eigen smaak in te richten. In[45]:= Clear "ë" ;
Plot3D Exp
-
x^2 - y^2 ,
x,
1 0.75 0.5 0.25 0 -2
-
2, 2 ,
y,
-
2, 2
;
2 1 0 -1
-1
0 1
2 -2
Nieuwe opties zijn: ViewPoint Het tekenen van een 3D-grafiek in twee dimensies op het computerscherm of op papier gebeurt gewoonlijk via projectie. Het centrum van de projectie heet in Mathematica het ViewPoint. Hieronder staat de standaardwaarde: In[47]:= Options Plot3D, ViewPoint Out[47]=
ViewPoint 1.3,
-
2.4, 2.
Het coördinatenstelsel van het gezichtspunt is gecentreerd op het centrum van de getekende kubusrand en dusdanig geschaald dat de langste ribbe lengte 1 heeft. De coördinaten hebben dus niets te maken met de coördinaten van de getekende formule. Laten we eens van onderen en van grotere afstand tegen dezelfde grafiek aankijken.
grafieken.nb
12
In[48]:= Plot3D Exp
-x ^ 2 - y ^ 2 , ViewPoint 4, - 1.5,
-2
-1
0
x, - 2, 2 , 2 ;
y,
-
2, 2 ,
-
1
2 1 0.75 0.5 0.25 0 2 1
0 -1 -2
Je kunt in het menu Input de optie 3D ViewPoint Selector kiezen, handmatig een geschik gezichtspunt uitzoeken en dit als optie in een incompleet Plot3D commando plakken. PlotPoints, Shading, Mesh, etc. Je kunt ook de kleuring van het oppervlak en de fijnmazigheid van het rooster van het grondvlak beïnvloeden: In[49]:= Plot3D Exp
x^2 - y^2 , PlotPoints 30, 30 , Shading False ; -
x,
1 0.75 0.5 0.25 0 -2
-
2, 2 ,
y,
-
2, 2 ,
y,
-
2, 2 ,
2 1 0 -1
-1
0 1
2 -2
In[50]:= Plot3D Exp
-x ^ 2 - y ^ 2 , PlotPoints 50, 50 , ColorFunction Hue, Mesh False ;
x,
1 0.75 0.5 0.25 0 -2
-
2, 2 ,
2 1 0 -1
-1
0 1
2 -2
grafieken.nb
é
13
Oefeningen
3. Maak de volgende formule: 1 - sin x 2 - cos 2 y Teken de grafiek voor x tussen -3 en +2 en y tussen -2 en 2. Kloppen de afmetingen van het grondvalk met de ingevoerde waarden? 4. Hier is nog een formule: 2 + sin x 1 + cos 2 y Maak er een grafiek van en combineer deze grafiek met de vorige in één figuur 5. Maak een grafiek van de functie f: x # x
y met de titel "De functie f x, y
=
x
y ".
6. Leg in woorden uit wat voor gezichtspunt je inneemt bij ViewPoint -> {0,-2,0}.
Å
Speciale grafieken
In[51]:= Clear "ë" ;
Mathematica kan meer dan grafieken van functies in één of twee veranderlijken tekenen. We geven enkele voorbeelden zonder veel commentaar. Bekijk ze eens voordat je de oefeningen maakt.
é
Geparametriseerde krommen en oppervlakken t * Cos t , t * Sin t , t, 0, 8 * Pi , AspectRatio Automatic ;
In[52]:= ParametricPlot
20
10
-20
-10
10
20
-10
-20
In[53]:= ParametricPlot3D
t * Cos t , t * Sin t , t , t, 0, 8 * Pi , ViewPoint 3, 2, 1 ; -20 0 -10 20 10
20 10 0 -20
-10
0
10
20
grafieken.nb
14
In[54]:= ParametricPlot3D
r * Cos t , r * Sin t , t , r, 0, 6 , t, 0, 8 * Pi , PlotPoints 15, 50 , ViewPoint -> 2.5, 1.5, 2 ; -5-5
0
0
5
5
20
10
0
é
Contouroppervlakken, Dichtheidsgrafieken
In[55]:= Plot3D Sin x * y ,
x,
-
2, 2 , y,
1 0.5 z 0 -0.5 -1 -2
2, 2 , AxesLabel x, y, z
;
2 1 0 y -1
-1
0 x
1
2 -2
In[56]:= ContourPlot Sin x * y ,
x,
-
2, 2 , y,
2
1
0
-1
-2 -2
-
-1
0
1
2
-
2, 2 , PlotPoints 50 ;
grafieken.nb
15
In[57]:= DensityPlot Sin x * y ,
x, - 2, 2 , y, PlotPoints 100, Mesh False ;
-
2, 2 ,
2
1
0
-1
-2 -2
é
-1
0
1
2
Grafieken van impliciet gedefinieerde functies
Met ImplicitPlot en ImplicitPlot3D kun je grafieken van impliciet gedefinieerde functies tekenen. Maar zie wat er gebeurt als je de commando’s zo maar aanroept: In[58]:= ImplicitPlot x ^ 2 + y ^ 2
ç
1,
x,
-
1, 1 , y,
-
1, 1 , AspectRatio Automatic ;
Op zichzelf een correct commando, maar Mathematica weet nog niet wat het betekent. De code is opgeborgen in een pakket, Graphics‘ImplicitPlot‘ genaamd, en dit moet je eerst ophalen in het systeem: In[59]:=
<<
Graphics‘ImplicitPlot‘;
ImplicitPlot::shdw : Symbol ImplicitPlot appears in multiple contexts 8Graphics‘ImplicitPlot‘, Global‘<; definitions in context Graphics‘ImplicitPlot‘ may shadow or be shadowed by other definitions.
De boodschap zegt het al: er zijn nu twee betekenissen voor ImplicitPlot: door onze eerste aanroep hebben we een ImplicitPlot functie aangemaakt naast het op de tweede plaats opgehaalde commando. Mathematica neemt de eerste functie en dus werkt het commando nog steeds niet. In[60]:= ImplicitPlot x ^ 2 + y ^ 2
ç
1,
x,
-
1, 1 , y,
Eerst maar eens de ongewenste functie opruimen met Remove: In[61]:= Remove ImplicitPlot
Nu gaat het wel goed:
-
1, 1 , AspectRatio Automatic ;
grafieken.nb
16
In[62]:= ImplicitPlot x ^ 2 + y ^ 2
ç
1,
x,
-
1, 1 , y,
-
1, 1 , AspectRatio Automatic ;
1
0.5
0
-0.5
-1 -1
-0.5
0
0.5
In[63]:= Show %, AxesOrigin 0, 0
1
;
1
0.5
-1
-0.5
0.5
1
-0.5
-1
Moraal: altijd eerst het Mathematica pakket laden voordat je een commando hieruit gebruikt.
é
Speciale grafieken uit het Graphics‘Graphics‘ pakket
In[64]:=
<<
Graphics‘Graphics‘
In[65]:= LogPlot x ^ 2 + 2 ^ x,
x, 0.1, 10 , PlotPoints 200 ;
1000 500 100 50 10 5 1 0
2
4
6
8
10
grafieken.nb
17
In[66]:= LogLogPlot x ^ 2 + 2 ^ x,
x, 0.1, 10 , PlotPoints 200 ;
1000 500 100 50 10 5 1 0.1 0.2
0.5
In[67]:= PolarPlot Cos t
1 *
2
5
10
4 * Sin t ^ 2 - 1 ,
t, 0, 2 * Pi
;
0.75 0.5 0.25
-1 -0.75-0.5-0.25
0.25 0.5
-0.25 -0.5 -0.75
é
Vectorvelden
Je kunt ook in één klap allerlei grafische pakketten ophalen d.m.v. In[68]:=
<<
Graphics‘
Dan snapt Mathematica ook wel dat bijvoorbeeld voor het tekenen van een vectorveld het pakket Graphics‘PlotField` nodig is. Een voorbeeld van een vectorveld: In[69]:= PlotVectorField
Sin x , Cos y
, x, 0, Pi , y, 0, Pi
;
grafieken.nb
é
18
Animaties
Je kunt in Mathematica bewegende beelden, oftewel animaties, maken. Er zijn 3 manieren: 1. Animate - Je plaatst in de tekenopdracht een parameter, - je zet om de opdracht Animate en - je geeft een gebied op waardoor de animatie-parameter loopt. Mathematica maakt dan een serie grafieken onder elkaar. - Selecteer ze allemaal door de juiste groepshaak rechts te kiezen met de linkermuisknop. - Voor de overzichtelijkheid kun je dubbelklikken om alleen het eerste plaatje in beeld te houden. - Je zet de animatie aan met ÇY of door in het menu Cell de optie Animate Selected Graphics te kiezen. - Links onderin het notebook verschijnt een controlepaneel om bijvoorbeeld de snelheid van de animatie te regelen. Prober het hieronder uit: In[70]:= Plot Sin x ,
x, 0, 6 * Pi
;
1 0.5
2.5
5
7.5 10 12.5 15 17.5
-0.5 -1 In[71]:= Animate
Plot Sin x + t , t, 0, 2 * Pi ;
x, 0, 6 * Pi
,
1 0.5
2.5
5
7.5 10 12.5 15 17.5
-0.5 -1
2. ShowAnimation Je kunt ook een rijtje graphische objecten, die wellicht op verschillende wijzen gemaakt zijn, als animatie afspelen. We geven het voorbeeld van een animatie van een slinger, afkomstig uit "Klassieke natuurkunde: Golven en Trillingen". In[72]:= a
= 1.95; T = Min 13, Abs 4 * EllipticK a ^ 2 4 ; bwp = f ’’ t + Sin f t ç 0, f 0 ç 0, f ’ 0
Out[74]=
Sin
f
t
+ f
t
==
0,
f
0
==
0,
f
0
==
1.95
ç
a
grafieken.nb
19
In[75]:= opl Out[75]=
f
=
First NDSolve bwp, f, t, 0, T
InterpolatingFunction
0., 11.6576
,
= Table Graphics Line 0, 0 , Sin f t , - Cos f t . opl, PlotRange - 1.2, 1.2 , - 1.2, 1.2 , AspectRatio Automatic , t, 0, T - T 50, T 50 ;
<>
In[76]:= obj
, Disk
Sin
f
t
,
-
Cos
f
t
, 0.1
In[77]:= ShowAnimation obj ;
3. Via het user interface. Je kunt ook een lijst van grafieken maken, deze figuren selecteren en via de menu-optie Animate Selected Graphics achter elkaar tonen als ware het een tekenfilm. We doen het voorafgaande voorbeeld in deze werkstijl: In[78]:= Do
Show Graphics Line 0, 0 , Sin f t , - Cos f t . opl, PlotRange - 1.2, 1.2 , - 1.2, 1.2 , AspectRatio Automatic , t, 0, T - T 50, T 50 ;
, Disk
Sin
f
t
,
-
Cos
f
t
, 0.1
grafieken.nb
é
20
Oefeningen
7. Teken de grafiek van de Catenoide die gedefiieerd is door de paramterisering t, z waarbij 0 b t b 2 p, - 1 b z b 1.
#
8. Teken de grafiek van de kromme bepaald door de vergelijking x3 + y3 - 5 x y + 1 5
=
cos t cosh z, sin t cosh z, z
0.
9. Het vectorveld van de gradient van een (scalaire) functie f op het x-y vlak is het vectorveld van
f x
þþþþþþþþ
,
f y
þþþþþþþþ
. We
noemen dit ook wel het vectorveld van de potentiaalfunctie f. Teken het vectorveld van de potentiaal f x, y
=
ln
x+1
2
+
y2
-
ln
x-1
2
+
y2 , horende bij het electrisch
veld van twee parallelle lijnladingen. 10. Maak een animatie van en rondraaiende spiraal.
Å
Structuur van grafieken
In[79]:= Clear "ë"
Om grafieken in Mathematica echt goed te begrijpen moet je weten wat er bij het tekenen van grafieken eigenlijk gebeurt. We onderscheiden twee fasen in het tekenen van grafieken: 1) de constructie van een grafisch object. 2) de weergave van het grafisch object. 1) Een grafisch object is opgebouwd uit grafische primitieven zoals Point[], Line[], Rectangle[], of Circle[]. Een voorbeeld van een grafisch object: In[80]:= happyface
Graphics Circle 0, 0 , 2 , Line - 1, - 0.5 , 0, - 1 , 1, - 0.5 , Disk 0.5, 0.5 , 0.2 , Disk - 0.5, 0.5 , 0.2 , AspectRatio Automatic
Out[80]=
ú
=
Graphics ú
Met Show kun je dit object grafisch weergeven:
grafieken.nb
21
In[81]:= Show happyface ;
We kijken hoe het grafisch object is opgebouwd bij het Plot commando: In[82]:= grafiek
=
Plot 2 * x,
1
x, 0, 2 , Ticks
2
1, 2 , None
;
grafieken.nb
In[83]:= InputForm grafiek Out[83]//InputForm=
Graphics[{{Line[{{8.333333333333333*^-8, 1.6666666666666665*^-7}, {0.08113398314583158, 0.16226796629166315}, {0.16961759971874735, 0.3392351994374947}, {0.2527187326770772, 0.5054374653541543}, {0.3326368155416561, 0.6652736310833122}, {0.4177051816458175, 0.835410363291635}, {0.49959049765622804, 0.9991809953124561}, {0.586626096906221, 1.173252193812442}, {0.6704786460624632, 1.3409572921249264}, {0.7511481451249545, 1.502296290249909}, {0.8369679274270283, 1.6739358548540566}, {0.9196046596353512, 1.8392093192707024}, {0.9990583417499231, 1.9981166834998463}, {1.0836623071040776, 2.1673246142081553}, {1.1650832223644811, 2.3301664447289623}, {1.251654420864467, 2.503308841728934}, {1.3350425692707022, 2.6700851385414044}, {1.4152476675831864, 2.830495335166373}, {1.500603049135253, 3.001206098270506}, {1.582775380593569, 3.165550761187138}, {1.6700979952914672, 3.3401959905829344}, {1.7542375598956146, 3.508475119791229}, {1.8351940744060111, 3.6703881488120222}, {1.92130087215599, 3.84260174431198}, {1.9999999166666667, 3.9999998333333333}}]}}, {PlotRange -> Automatic, AspectRatio -> GoldenRatio^(-1), DisplayFunction :> $DisplayFunction, ColorOutput -> Automatic, Axes -> Automatic, AxesOrigin -> Automatic, PlotLabel -> None, AxesLabel -> None, Ticks -> {{1, 2}, None}, GridLines -> None, Prolog -> {}, Epilog -> {}, AxesStyle -> Automatic, Background -> Automatic, DefaultColor -> Automatic, DefaultFont :> $DefaultFont, RotateLabel -> True, Frame -> False, FrameStyle -> Automatic, FrameTicks -> Automatic, FrameLabel -> None, PlotRegion -> Automatic, ImageSize -> Automatic, TextStyle :> $TextStyle, FormatType :> $FormatType}]
Je ziet de grafische primitieve Line en de teken-opties. In de tweede fase wordt dit pas concreet gemaakt; assen, labels, lijndiktes, e.d. worden uit de opties gedestilleerd.
22
grafieken.nb
23
In[84]:= InputForm FullGraphics grafiek Out[84]//InputForm=
Graphics[{{{Line[{{8.333333333333333*^-8, 1.6666666666666665*^-7}, {0.08113398314583158, 0.16226796629166315}, {0.16961759971874735, 0.3392351994374947}, {0.2527187326770772, 0.5054374653541543}, {0.3326368155416561, 0.6652736310833122}, {0.4177051816458175, 0.835410363291635}, {0.49959049765622804, 0.9991809953124561}, {0.586626096906221, 1.173252193812442}, {0.6704786460624632, 1.3409572921249264}, {0.7511481451249545, 1.502296290249909}, {0.8369679274270283, 1.6739358548540566}, {0.9196046596353512, 1.8392093192707024}, {0.9990583417499231, 1.9981166834998463}, {1.0836623071040776, 2.1673246142081553}, {1.1650832223644811, 2.3301664447289623}, {1.251654420864467, 2.503308841728934}, {1.3350425692707022, 2.6700851385414044}, {1.4152476675831864, 2.830495335166373}, {1.500603049135253, 3.001206098270506}, {1.582775380593569, 3.165550761187138}, {1.6700979952914672, 3.3401959905829344}, {1.7542375598956146, 3.508475119791229}, {1.8351940744060111, 3.6703881488120222}, {1.92130087215599, 3.84260174431198}, {1.9999999166666667, 3.9999998333333333}}]}}, {{GrayLevel[0.], AbsoluteThickness[0.25], Line[{{1., 0.}, {1., 0.04247339043496007}}]}, Text[1, {1., -0.08494678086992014}, {0., 1.}], {GrayLevel[0.], AbsoluteThickness[0.25], Line[{{2., 0.}, {2., 0.04247339043496007}}]}, Text[2, {2., -0.08494678086992014}, {0., 1.}], {GrayLevel[0.], AbsoluteThickness[0.25], Line[{{-0.04999999791666667, 0.}, {2.049999914583333, 0.}}]}, {GrayLevel[0.], AbsoluteThickness[0.25], Line[{{0., -0.09999999583333334}, {0., 4.099999829166666}}]}}}]
Het complete grafische object wordt vervolgens vertaald in PostScript voor weergave op het beeldscherm of op papier. Dit kun je met Show voor elkaar krijgen. Dit commando wordt ook gebruikt om verschillende grafieken te combineren tot één figuur. We geven een voorbeeld, ontleend aan "Simuleren en Modeleren": In[85]:= Clear kromme, puntenparen, punten ; In[86]:= puntenparen Out[86]=
=
Table
x, x ^ 2 ,
x,
-
2, 2, 0.5
2, 4 , - 1.5, 2.25 , - 1., 1. , - 0.5, 0.25 , 0., 0. , 0.5, 0.25 , 1., 1. , 1.5, 2.25 , 2., 4. -
In[87]:= kromme
=
ListPlot puntenparen, PlotJoined True ; 4 3 2 1
-2
-1
1
2
grafieken.nb
24
In[88]:= punten
=
Graphics
PointSize 0.03 , Map Point, puntenparen
;
In[89]:= Show kromme, punten ; 4 3 2 1
-2
-1
1
2
Als je op deze manier een figuur opbouwt wil je vast de grafische weergave van tussenresultaten onderdrukken. Dit doe je met de optie DisplayFunction -> Identity. Je krijgt de ingebouwde routine voor weergave terug met DisplayFunction -> $DisplayFunction. In[90]:= kromme
ListPlot puntenparen, PlotJoined True, DisplayFunction Identity ; Show kromme, punten, DisplayFunction $DisplayFunction ; =
4 3 2 1
-2
é
-1
1
2
Oefeningen
11. Maak het volgende symbool in Mathematica.
12. Kijk nog eens naar onderstaande opdracht om een grijstinten-kaart te maken. Is de Mathematica code begrijpelijk?
grafieken.nb
Show Graphics Join Table GrayLevel i 25 , Rectangle i, 0 , i + 1, 8 Table Text i 5.0, 5 * i + 0.5, - 1 , i, 0, 5 , AspectRatio Automatic ;
25
, i, 0, 25
13. Gegeven is een serie meetpunten in de tabel hieronder. x y 1 2.2 2 3.5 3 6.4 4 7.8 5 10.3 6 11.6 7 14.1 8 15.7 (i) Maak een lijst van puntenparen (x,y) en teken ze in een grafiek met ListPlot. (ii) Gebruik het commando Fit om een goed bijpassende rechte lijn te vinden (hint: zoek in het hulpsysteem op hoe dit moet). (iii) Teken de meetpunten en de functiefit in één figuur.
,