Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek...

28
Capita Selecta: Grafieken en Lijsten André Heck © 2001 AMSTEL Instituut, Universiteit van Amsterdam ¯ Inleiding Resultaten van berekeningen worden vaak grafisch weergegeven. Je weet al hoe je de grafiek van een functie, bijvoor- beeld x # sin 1 þþþþ 2 x , tekent: In[1]:= Plot Abs Sin x 2 , x, -6 * Pi, 6 * Pi ; -15 -10 -5 5 10 15 0.2 0.4 0.6 0.8 1 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 2 p 4 p 6 p In deze les leer je dergelijke methoden en technieken op het gebied van het tekenen van grafieken met Mathematica. In de wiskunde en haar toepassing komt het vaak voor dat je een serie gegevens getallen volgens eenzelfde recept wilt bewerken. Lijsten maken het mogelijk om dat op een korte en systematische manier te doen. Een voorbeeld uit "Simul- eren en modelleren"; een som over de bevolkingsgroei in de VS tussen 1790 en 1990. capita.nb 1

Transcript of Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek...

Page 1: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Capita Selecta:

Grafieken en Lijsten

André Heck

© 2001 AMSTEL Instituut,

Universiteit van Amsterdam

Å Inleiding

Resultaten van berekeningen worden vaak grafisch weergegeven. Je weet al hoe je de grafiek van een functie, bijvoor-

beeld x # sin 1þþþþ2 x , tekent:

In[1]:= Plot Abs Sin x 2 , x, -6*Pi, 6*Pi ;

-15 -10 -5 5 10 15

0.2

0.4

0.6

0.8

1

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 2 p 4 p 6 p

In deze les leer je dergelijke methoden en technieken op het gebied van het tekenen van grafieken

met Mathematica.

In de wiskunde en haar toepassing komt het vaak voor dat je een serie gegevens getallen volgens eenzelfde recept wilt

bewerken. Lijsten maken het mogelijk om dat op een korte en systematische manier te doen. Een voorbeeld uit "Simul-

eren en modelleren"; een som over de bevolkingsgroei in de VS tussen 1790 en 1990.

capita.nb 1

Page 2: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[3]:= years = Table 1790 + 10 n, n, 0, 20 ;

pop = 3.9, 5.3, 7.2, 9.6, 12.9, 17.1, 23.2, 31.4, 38.6, 50.2, 62.9,

76.0, 92.0, 105.7, 122.8, 131.7, 150.7, 179.3, 203.3, 226.5, 248.7 ;

data = Table years i , pop i , i, 1, 21 ;

logdata = Table years i , Log pop i , i, 1, 21 ;

ListPlot data, AxesOrigin � 1780, 0 , Prolog � PointSize .015 ;

1800 1850 1900 1950

50

100

150

200

250

In[8]:= ListPlot logdata, AxesOrigin � 1780, Log 3 , Prolog � PointSize .015 ;

1800 1850 1900 1950

2

3

4

5

In deze les leer je met lijsten in Mathematica om te gaan. Dit is een begin van leren programmeren in Mathematica.

Dit notebook is een korte selectie uit de laatste twee notebooks horende bij de Mathematica introductie. Werk dit

Mathematica notebook aandachtig door en maak de oefeningen.

Succes!

Å Telkens opnieuw beginnen met

In[9]:= 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.

capita.nb 2

Page 3: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Å Opties

Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-

beeld 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[11]:= Plot x^3 - x^2, x, -1, 1 ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

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[12]:= Plot x^3 - x^2, x, -1, 1 , PlotRange � All ;

-1 -0.5 0.5 1

-2

-1.5

-1

-0.5

Je kunt ook zelf een bereik opgeven:

In[13]:= Show %, PlotRange � -0.5, 0 ;

-1 -0.5 0.5 1

-0.5

-0.4

-0.3

-0.2

-0.1

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.

capita.nb 3

Page 4: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[14]:= 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[15]:= Show %, PlotPoints � 100 ;

Graphics::optx : Unknown option PlotPoints in ú Graphics ú.

Je kunt informatie over een optie krijgen op de bekende manier:

In[16]:= ?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[17]:= ?? Plot

Plot f, x, xmin, xmax generates a plot of f as a function of x from xmin to

xmax. Plot f1, f2, ... , x, xmin, xmax plots several functions fi. More…

Attributes Plot = HoldAll, Protected

Options Plot = AspectRatio �1

þþþþþþþþþþþþþþþþþþþþþþþþGoldenRatio

, Axes � Automatic, AxesLabel � None,

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[18]:= Options Plot

Out[18]= AspectRatio �1

þþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþþGoldenRatio

, Axes � Automatic, AxesLabel � None,

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

capita.nb 4

Page 5: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Je ziet hier nogal vaak als waarde van een optie Automatic verschijnen: dit betekent dat Mathematica een inge-

bouwd algoritme gebruikt.

We bespreken enkele veel gebruikte opties. Bekijk ze eens voordat je de oefeningen maakt.

é PlotRange

Bij de instelling Automatic wordt de verdeling van functiewaarden bekeken en op basis hiervan wordt een tekenge-

bied gekozen; extreme waarden worden niet getekend. Je kunt dit ook combineren met vastgestelde grenzen:

In[19]:= Plot x^3 - x^2, x, -2, 2 , PlotRange � -1, Automatic ;

-2 -1 1 2

-1

-0.8

-0.6

-0.4

-0.2

0.2

é 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[20]:= Plot x^3 - x^2, x, -1, 1 , PlotStyle � Thickness 0.05 , GrayLevel 0.5 ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

Je kunt ook stippellijntjes specificeren:

capita.nb 5

Page 6: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[21]:= Plot x^3 - x^2, x, -1, 1 , PlotStyle � Dashing 0.02 ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

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[22]:= Plot x^3 - x^2, x, -1, 1 , PlotStyle � Hue 0 ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

In[23]:= Plot x^3 - x^2, x, -1, 1 , PlotStyle � RGBColor 0, 0, 1 ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

Als je Engelse namen wilt gebruiken, dan moet je eerst het Graphics‘Colors‘ pakket laden:

In[24]:= << Graphics‘Colors‘

In[25]:= Plot x^3 - x^2, x, -1, 1 , PlotStyle � Green ;

-1 -0.5 0.5 1

-0.35

-0.3

-0.25

-0.2

-0.15

-0.1

-0.05

é Diverse kleurenkaarten

De volgende opdrachten geven diverse kleurenkaarten voor GrayLevel, Hue en RGBColor. Ze zijn louter en

alleen bedoeld als naslagkaarten; de code hoef je (nog) niet te snappen:

capita.nb 6

Page 7: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[26]:= Show

Graphics

Join

Table GrayLevel i 25 , Rectangle i, 0 , i + 1, 8 , i, 0, 25 ,

Table Text i 5.0, 5*i + 0.5, -1 , i, 0, 5

, AspectRatio � Automatic ;

0 0.2 0.4 0.6 0.8 1.

In[27]:= Show

Graphics

Join

Table Hue i 25 , Rectangle i, 0 , i + 1, 8 , i, 0, 25 ,

Table Hue i 5.0 , Text i 5.0, 5*i + 0.5, -1 , i, 0, 5

, AspectRatio � Automatic ;

0 0.2 0.4 0.6 0.8 1.

In[28]:= rgkleuren = Table RGBColor i, j, 0 , j, 0, 1, 0.1 , i, 0, 1, 0.1 ;

merktekens = 0, 0 , 5, 0.5 , 11, 1 , 0, 0 , 5, 0.5 , 11, 1 ;

In[30]:= Show Graphics RasterArray rgkleuren ,

Frame � Automatic,

FrameTicks � merktekens,

AspectRatio � Automatic,

FrameLabel � r, g ,

RotateLabel � False,

PlotLabel -> "RGB r,g,0 kleurenschema"

;

0 0.5 1r

0

0.5

1

g

0 0.5 1

0

0.5

1

RGB r,g,0 kleurenschema

In[31]:= rbkleuren = Table RGBColor i, 0, j , j, 0, 1, 0.1 , i, 0, 1, 0.1 ;

capita.nb 7

Page 8: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[32]:= Show Graphics RasterArray rbkleuren ,

Frame � Automatic,

FrameTicks � merktekens,

AspectRatio � Automatic,

FrameLabel � r, b ,

RotateLabel � False,

PlotLabel -> "RGB r,0,b kleurenschema"

;

0 0.5 1r

0

0.5

1

b

0 0.5 1

0

0.5

1

RGB r,0,b kleurenschema

In[33]:= gbkleuren = Table RGBColor 0, i, j , j, 0, 1, 0.1 , i, 0, 1, 0.1 ;

In[34]:= Show Graphics RasterArray gbkleuren ,

Frame � Automatic,

FrameTicks � merktekens,

AspectRatio � Automatic,

FrameLabel � g, b ,

RotateLabel � False,

PlotLabel -> "RGB 0,g,b kleurenschema"

;

0 0.5 1g

0

0.5

1

b

0 0.5 1

0

0.5

1

RGB 0,g,b kleurenschema

é PlotLabel, AxesLabel en Ticks

Het volgende voorbeeld moge duidelijk maken hoe je

- titels en teksten bij de assen kunt plaatsen,

- markeringen naar keuze maakt.

capita.nb 8

Page 9: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[35]:= titel = "grafiek van Sin x ^2"

Out[35]= grafiek van Sin x ^2

In[36]:= asteksten = x, Sin x ^2

Out[36]= x, Sin x 2

In[37]:= markers = Range 0, 2*Pi, Pi 2 , Automatic

Out[37]= 0,pþþþþ2, p,

3 pþþþþþþþþ2

, 2 p , Automatic

In[38]:= Plot Sin x ^2, x, 0, 2*Pi ,

PlotLabel � titel,

AxesLabel � asteksten,

Ticks � markers ;

pþþþþ2

p 3 pþþþþþþþþ2

2 px

0.2

0.4

0.6

0.8

1Sin x 2

grafiek van Sin x ^2

Je kunt het allemaal zo mooi maken als je zelf wilt. Een voorbeeld van letterkeuze en notatiekeuze:

In[39]:= lbl = StringForm "grafiek van ‘1‘", Sin x ^2

Out[39]= grafiek van Sin x 2

In[40]:= 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 ;

pþþþþ2

p 3 pþþþþþþþþ2

2 px

0.2

0.4

0.6

0.8

1grafiek van sin2 x

é Gridlines

Met GridLines geef je aan of je "ruitjespapier" wilt.

capita.nb 9

Page 10: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[43]:= Plot x^2, x, -3, 3 , PlotRange � All, GridLines � Automatic ;

-3 -2 -1 1 2 3

2

4

6

8

é 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[44]:= ParametricPlot Cos t , Sin t , t, 0, 2*Pi ;

-1 -0.5 0.5 1

-1

-0.5

0.5

1

In[45]:= ParametricPlot Cos t , Sin t , t, 0, 2*Pi ,

AspectRatio � Automatic ;

-1 -0.5 0.5 1

-1

-0.5

0.5

1

Het verschil tussen AspectRatio � 1 en AspectRatio � Automatic komt het best tot uiting in het vol-

gende voorbeeld:

capita.nb 10

Page 11: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[46]:= ParametricPlot Cos t , Sin t , t, 0, 2*Pi ,

PlotRange � -2, 2 , -1, 1 ,

AspectRatio � 1 ;

-2 -1.5 -1 -0.5 0.5 1 1.5 2

-1

-0.75

-0.5

-0.25

0.25

0.5

0.75

1

In[47]:= ParametricPlot Cos t , Sin t , t, 0, 2*Pi ,

PlotRange � -2, 2 , -1, 1 ,

AspectRatio � Automatic ;

-2 -1.5 -1 -0.5 0.5 1 1.5 2

-1-0.75-0.5

-0.25

0.250.5

0.751

é Oefeningen

1. De grafiek van de tangens ziet er in Mathematica niet zo mooi uit:

In[48]:= Plot Tan x , x, -5, 5 ;

-4 -2 2 4

-40

-20

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 functie te laten werken. De algemene vorm is dus

Plot[ {f1[x], f2[x],...}, {x, xmin, xmax},

optie �{o1, o2, ...}]

capita.nb 11

Page 12: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

(i) Teken de grafiek van sin x en sin x2 in één figuur.

(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[49]:= << 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[50]:= 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 uit-

gezet. Er vormt zich een gebogen vlak dat bij elk punt in het grondvlak de bijbehorende waarde van de formule aan-

geeft.

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[51]:= Clear "ë" ;

Plot3D Exp -x^2 - y^2 , x, -2, 2 , y, -2, 2 ;

-2-1

01

2 -2

-1

0

1

2

00.250.5

0.751

-2-1

01

2

Nieuwe opties zijn:

ViewPoint

Het tekenen van een 3D-grafiek in twee dimensies op het computerscherm of op papier gebeurt gewoonlijk via projec-

tie. Het centrum van de projectie heet in Mathematica het ViewPoint. Hieronder staat de standaardwaarde:

In[53]:= Options Plot3D, ViewPoint

Out[53]= 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.

capita.nb 12

Page 13: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Laten we eens van onderen en van grotere afstand tegen dezelfde grafiek aankijken.

In[54]:= Plot3D Exp -x^2 - y^2 , x, -2, 2 , y, -2, 2 ,

ViewPoint � 4, -1.5, -2 ;

-2-1

01

2

-2-1

01

2

00.250.50.751

00.250.50.751

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[55]:= Plot3D Exp -x^2 - y^2 , x, -2, 2 , y, -2, 2 ,

PlotPoints � 30, 30 ,

Shading � False ;

-2-1

01

2 -2

-1

0

1

2

00.250.5

0.751

-2-1

01

2

In[56]:= Plot3D Exp -x^2 - y^2 , x, -2, 2 , y, -2, 2 ,

PlotPoints � 50, 50 ,

ColorFunction � Hue,

Mesh � False ;

-2-1

01

2 -2

-1

0

1

2

00.250.5

0.751

-2-1

01

2

capita.nb 13

Page 14: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

é 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

Å Speciale grafieken

In[57]:= 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

In[58]:= ParametricPlot t* Cos t , t* Sin t ,

t, 0, 8*Pi , AspectRatio � Automatic ;

-20 -10 10 20

-20

-10

10

20

In[59]:= ParametricPlot3D t* Cos t , t* Sin t , t ,

t, 0, 8*Pi , ViewPoint � 3, 2, 1 ;

-20-1001020

-20-100

1020

0

10

20

0

10

20

capita.nb 14

Page 15: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

é Speciale grafieken uit extra Mathematica pakketten

Met LogPlot en LogLogPlot kun je grafieken van functies tekenen in logaritmische of dubbel-logaritmische

schaal. Maar zie wat er gebeurt als je de commando’s zo maar aanroept:

In[60]:= LogPlot x^2 + 2^x, x, 0.1, 10 , PlotPoints � 200 ;

Op zichzelf een correct commando, maar Mathematica weet nog niet wat het betekent. De code is opgeborgen in een

pakket, Graphics‘Graphics‘ genaamd, en dit moet je eerst ophalen in het systeem. Er bestaan nog meer speciale

grafieken-pakketten en je kunt ze allemaal gebruiken als je de zogenaamde context Graphics‘ binnenhaalt. Maar dit

moet je wel doen voordat je een procedure aanroept. Daarom verwijderen we eerst de door ons ingevoerde, foutieve

LogPlot en halen daarna de Graphics‘ context binnen:

In[61]:= Remove LogPlot ;

<< Graphics‘;

Nu werkt het LogPlot commando wel goed:

In[63]:= LogPlot x^2 + 2^x, x, 0.1, 10 , PlotPoints � 200 ;

0 2 4 6 8 101

510

50100

5001000

We geven nog enkele voorbeelden van speciale grafieken:

In[64]:= LogLogPlot x^2 + 2^x, x, 0.1, 10 , PlotPoints � 200 ;

0.1 0.2 0.5 1 2 5 101

510

50100

5001000

capita.nb 15

Page 16: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[65]:= PolarPlot Cos t * 4*Sin t ^2 - 1 , t, 0, 2*Pi ;

-1 -0.75-0.5-0.25 0.25 0.5

-0.75

-0.5

-0.25

0.25

0.5

0.75

In[66]:= PlotVectorField Sin x , Cos y , x, 0, Pi , y, 0, Pi ;

é Animaties

Je kunt in Mathematica bewegende beelden, oftewel animaties, maken. Er zijn 3 manieren, waarvan we er twee

bespreken:

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:

capita.nb 16

Page 17: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[67]:= Plot Sin x , x, 0, 6*Pi ;

2.5 5 7.5 10 12.5 15 17.5

-1

-0.5

0.5

1

In[68]:= Animate

Plot Sin x + t , x, 0, 6*Pi ,

t, 0, 2*Pi

;

2.5 5 7.5 10 12.5 15 17.5

-1

-0.5

0.5

1

2. ShowAnimation

Je kunt ook een rijtje graphische objecten, die wellicht op verschillende wijzen gemaakt zijn, als animatie afspelen met

het commando ShowAnimation. We behandelen dit niet verder.

3. Via het user interface.Je kunt ook een opeenvolgende serie van grafieken maken, deze figuren selecteren en via de menu-optie Animate

Selected Graphics achter elkaar tonen als ware het een tekenfilm. We geven het voorbeeld van een animatie van

een slinger, afkomstig uit "Klassieke natuurkunde: Golven en Trillingen".

In[69]:= a = 1.95;

T = Min 13, Abs 4*EllipticK a^2 4 ;

bwp = f’’ t + Sin f t ç 0, f 0 ç 0, f’ 0 ç a

Out[71]= Sin f t + f�� t == 0, f 0 == 0, f� 0 == 1.95

In[72]:= opl = First NDSolve bwp, f, t, 0, T

Out[72]= f � InterpolatingFunction 0., 11.6576 , <>

In[73]:= Do

Show Graphics

Line 0, 0 , Sin f t , -Cos f t , Disk Sin f t , -Cos f t , 0.1

. opl,

PlotRange � -1.2, 1.2 , -1.2, 1.2 ,

AspectRatio � Automatic

,

t, 0, T - T 50, T 50 ;

capita.nb 17

Page 18: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

é Oefeningen

5. Teken de grafiek van de Catenoide die gedefiieerd is door de parameterisering t, z # cos t cosh z, sin t cosh z, z

waarbij 0 b t b 2 p, -1 b z b 1.

6. 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.

7. Maak een animatie van en rondraaiende spiraal.

Å Werken met lijsten

Gegevens worden vaak opgeslagen in de vorm van lijsten. In deze sectie leer je hoe hier mee om te gaan.

é Het maken van lijsten en selecteren van lijstelementen

In[74]:= Clear "ë" ;

In Mathematica is een lijst een rijtje van objecten geplaatst tussen accolades. Bijvoorbeeld:

In[75]:= Sin x , Cos x , Tan x

Out[75]= Sin x , Cos x , Tan x

Vaak is het handig de procedure Table te gebruiken om lijsten te maken. In de volgende twee opdrachten maken we

een lijst van kwadraten van de eerste 10 natuurlijke getallen en een lijst van de even getallen tussen 50 en 75.

In[76]:= kwadraten = Table i^2, i, 1, 10

Out[76]= 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

In[77]:= even = Table i, i, 50, 75, 2

Out[77]= 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74

capita.nb 18

Page 19: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

De algemene vorm van de opdracht is

Table[ uitdrukking, iterator ]

waarbij de iterator het aantal te genereren lijstelementen bepaalt.

De meest algemene vorm van een iterator is

{var, min, max, stapgrootte}

Dan wordt de gegeven expressie herhaalde malen geevalueerd, startend met var = min en eindigend bij var = max,

waarbij var in elke stap met stapgrootte opgehoogd wordt .

Note bene: i.p.v. de opdracht Table[i, {i,0,10,2}] mag je ook het kortere Range[0,10,2] gebruiken om

een lijst van de even getallen tussen 0 en 10 te krijgen.

Elementen uit een lijst kun je gemakkelijk selecteren: telling van links naar rechts begint bij 1 en als je bijvoorbeeld het

5e element van bovenstaande lijst van kwadraten wilt hebben, dan kun je intoetsen

In[78]:= kwadraten 5

Out[78]= 25

Als je negatieve indices gebruikt dan wordt neerwaarts geteld van rechts naar links:

In[79]:= kwadraten -1

Out[79]= 100

Om het eerste en laatste element van een lijst te selecteren mag je ook de commando’s First en Last gebruiken.

Je kunt ook meerdere lijstelementen tegelijkertijd kiezen en het antwoord is op zijn beurt een lijst:

In[80]:= kwadraten 1, -1, 1

Out[80]= 1, 100, 1

Een lijstelement kun je een andere waarde geven en daarmee verandert eigenlijk de hele lijst:

In[81]:= kwadraten

Out[81]= 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

In[82]:= kwadraten 3 = "IX";

kwadraten

Out[83]= 1, 4, IX, 16, 25, 36, 49, 64, 81, 100

é Operaties op lijsten

In[84]:= Clear "ë"

é Herrangschikking

Mathematica heeft verschillende commando’s om lijsten te herrangschikken:

capita.nb 19

Page 20: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[85]:= lijst = Table Random Integer, 0, 6 , 10

Out[85]= 4, 0, 2, 1, 2, 5, 6, 1, 4, 1

Onderstaande commando’s mogen voor zich spreken

In[86]:= Sort lijst

Out[86]= 0, 1, 1, 1, 2, 2, 4, 4, 5, 6

In[87]:= Reverse %

Out[87]= 6, 5, 4, 4, 2, 2, 1, 1, 1, 0

In[88]:= RotateLeft %

Out[88]= 5, 4, 4, 2, 2, 1, 1, 1, 0, 6

é Combinatie

Mathematica heeft verschillende commando’s om lijsten te combineren:

In[89]:= L1 = 1, 2, 3 ;

L2 = 2, 3, 4 ;

Vergelijk de resultaten van onderstaande opdrachten.

In[91]:= Union L1, L2

Out[91]= 1, 2, 3, 4

In[92]:= Join L1, L2

Out[92]= 1, 2, 3, 2, 3, 4

In[93]:= L1, L2

Out[93]= 1, 2, 3 , 2, 3, 4

é Aanpassing

Een element van een bestaande lijst kun je een andere waarde geven en daarmee verandert eigenlijk de hele lijst. Een

voorbeeld:

In[94]:= oneven = 1, 3, 5, 7, 9 ;

In[95]:= oneven 1 = "I";

oneven

Out[96]= I, 3, 5, 7, 9

Met PrependTo en AppendTo voeg je elementen voor of achteraan toe aan een lijst:

capita.nb 20

Page 21: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[97]:= AppendTo oneven, 11 ;

oneven

Out[98]= I, 3, 5, 7, 9, 11

In[99]:= PrependTo oneven, 0 ;

oneven

Out[100]= 0, I, 3, 5, 7, 9, 11

Er zijn nog meer operaties op lijsten die het aantal lijstelementen veranderen. Maar deze wijzigen niet stilzwijgend een

toewijzing van een lijst, zoals onderstaand voorbeeld illustreert.

In[101]:= oneven

Out[101]= 0, I, 3, 5, 7, 9, 11

In[102]:= Rest oneven

Out[102]= I, 3, 5, 7, 9, 11

In[103]:= oneven

Out[103]= 0, I, 3, 5, 7, 9, 11

Om met dergelijke commando’s een lijst te wijzigen moet je expliciet een toewijzing doen. In onderstaande opdracht

worden de eerste twee lijstelelementen weggelaten in oneven en het resultaat wordt op zijn beurt aan deze variabele

toegewezen.

In[104]:= oneven = Drop oneven, 1, 2

Out[104]= 3, 5, 7, 9, 11

In[105]:= priemen = Take oneven, 1, 3

Out[105]= 3, 5, 7

In[106]:= priemen = Append priemen, 11

Out[106]= 3, 5, 7, 11

Tussen twee haakjes, het aantal lijstelementen bepaal je met Length.

In[107]:= Length priemen

Out[107]= 4

é Verandering van vorm

Mathematica biedt mogelijkheden om snel de vorm van een lijst te veranderen. Een paar voorbeelden.

In[108]:= L = Table i, i, 1, 10

Out[108]= 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

capita.nb 21

Page 22: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Met Partition kun je een lijst opsplitsen. Het resultaat is een lijst van lijsten, die opgevat kan worden als een tabel:

In[109]:= T1 = Partition lijst, 2

Out[109]= 4, 0 , 2, 1 , 2, 5 , 6, 1 , 4, 1

In[110]:= TableForm T1

Out[110]//TableForm=

4 02 12 56 14 1

In[111]:= Dimensions T1

Out[111]= 5, 2

Inderdaad, een tabel met 5 rijen en 2 kolommen.

In[112]:= T2 = Partition lijst, 5

Out[112]= 4, 0, 2, 1, 2 , 5, 6, 1, 4, 1

In[113]:= TableForm T2

Out[113]//TableForm=

4 0 2 1 25 6 1 4 1

In[114]:= Dimensions T2

Out[114]= 2, 5

De gespiegelde tabel krijg je met Transpose:

In[115]:= T3 = Transpose T2

Out[115]= 4, 5 , 0, 6 , 2, 1 , 1, 4 , 2, 1

In[116]:= TableForm T3

Out[116]//TableForm=

4 5

0 62 11 42 1

Je kunt een lijst van lijsten of een ingewikkeldere structuur van geneste lijsten plat slaan tot een enkelvoudige lijst met

het commando Flatten.

In[117]:= T3

Out[117]= 4, 5 , 0, 6 , 2, 1 , 1, 4 , 2, 1

In[118]:= Flatten T3

Out[118]= 4, 5, 0, 6, 2, 1, 1, 4, 2, 1

capita.nb 22

Page 23: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Met andere woorden: alle accolades met uitzondering van de buitenste twee worden weggehaald met Flatten.

é Grafieken van lijsten van getallen

In[119]:= Clear "ë"

Met het commando ListPlot kun je lijsten van getallen grafisch weergeven.

In[120]:= kwadraten = Table i^2, i, 1, 10

Out[120]= 1, 4, 9, 16, 25, 36, 49, 64, 81, 100

In[121]:= ListPlot kwadraten ;

4 6 8 10

20

40

60

80

100

Door een enkele optie toe te voegen kun je de punten in de grafiek beter zichtbaar maken:

In[122]:= ListPlot kwadraten, PlotStyle � PointSize 0.03 ;

4 6 8 10

20

40

60

80

100

En je kunt het natuurlijk altijd zo mooi maken als je zelf wilt:

capita.nb 23

Page 24: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[123]:= ListPlot kwadraten,

PlotLabel � StyleForm "kwadraten", FontFamily -> "Times-Bold",

FontSize -> 16 ,

Background � GrayLevel 0.9 ,

PlotStyle � PointSize 0.03 , GridLines � Range 10 , Automatic ,

AxesOrigin � 1, 0 ,

AxesLabel �

StyleForm n, FontSize � 14 , StyleForm n^2, FontSize � 14

;

2 4 6 8 10n

20

40

60

80

100

n2 kwadraten

Het commando ListPlot kun je ook gebruiken om de grafiek van een lijst van puntenparen te tekenen.

In[124]:= xydata = 0, 2 , 1, 3 , 2, 1 , 3, 2 , 4, 3 , 5, 2 ;

In[125]:= ListPlot xydata, PlotStyle � PointSize 0.02 ;

1 2 3 4 5

1.5

2

2.5

3

Er bestaat een optie PlotJoined, die bij de waarde True de punten met rechte lijnen verbindt.

In[126]:= ListPlot xydata, PlotJoined � True ;

1 2 3 4 5

1.5

2

2.5

3

capita.nb 24

Page 25: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Als je de gegevens in twee lijsten hebt en tegen elkaar uit wilt zetten, dan moet je lijstoperaties gebruiken om de juiste

puntenparen aan te maken. Bijvoorbeeld:

In[127]:= x = 0, 1, 2, 3, 4, 5 ;

y = 2, 3, 1, 2, 3, 2 ;

xy = Transpose x, y

Out[129]= 0, 2 , 1, 3 , 2, 1 , 3, 2 , 4, 3 , 5, 2

é Rekenen met lijsten

In[130]:= Clear "ë"

We bekijken de lijst van eerste 10 priemgetallen

In[131]:= priemen = Table Prime i , i, 1, 10

Out[131]= 2, 3, 5, 7, 11, 13, 17, 19, 23, 29

Mathematica is in staat om precies dezelfde berekening op alle lijstelementen los te laten.

Bijvoorbeeld, om overal 1 af te trekken:

In[132]:= priemen - 1

Out[132]= 1, 2, 4, 6, 10, 12, 16, 18, 22, 28

Of elk element te kwadrateren:

In[133]:= priemen^2

Out[133]= 4, 9, 25, 49, 121, 169, 289, 361, 529, 841

Worteltrekken en numeriek benaderen zijn twee andere voorbeelden:

In[134]:= Sqrt priemen

Out[134]= 2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29

In[135]:= N %

Out[135]= 1.41421, 1.73205, 2.23607, 2.64575,

3.31662, 3.60555, 4.12311, 4.3589, 4.79583, 5.38516

Mathematica weet dat dit kan doordat de Sqrt functie en het commando N de eigenschap Listable hebben. Dit kun

je eenvoudig controlleren.

In[136]:= ?? Sqrt

Sqrt z gives the square root of z. More…

Attributes Sqrt = Listable, NumericFunction, Protected

Een zelfgemaakte functie heeft deze eigenschap niet, met bijkomende gevolgen.

Als voorbeeld dient de volgende functie die de priemdelers van een natuurlijk getal groter dan 1 opsomt.

In[137]:= priemdelers n_Integer? # > 1 & := First Transpose FactorInteger n

capita.nb 25

Page 26: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[138]:= priemdelers 10

Out[138]= 2, 5

In[139]:= L = Range 2, 10

Out[139]= 2, 3, 4, 5, 6, 7, 8, 9, 10

In[140]:= priemdelers L

Out[140]= priemdelers 2, 3, 4, 5, 6, 7, 8, 9, 10

Op een lijst van getallen werkt de functie niet. Allicht want de functie heeft niet de eigenschap Listable.

In[141]:= ?? priemdelers

Global‘priemdelers

priemdelers n_Integer? #1 > 1 & := First Transpose FactorInteger n

Wil je deze functie toch toegepast zien op elk lijstelement afzonderlijk, dan moet je de procedure Map van stal halen:

In[142]:= Map priemdelers, L

Out[142]= 2 , 3 , 2 , 5 , 2, 3 , 7 , 2 , 3 , 2, 5

Map[ commando, lijst] past het commando toe op elk element van lijst.

I.p.v. het commando Map zie je ook wel eens de volgende infix-notatie:

In[143]:= priemdelers ë L

Out[143]= 2 , 3 , 2 , 5 , 2, 3 , 7 , 2 , 3 , 2, 5

Je kunt ook de procedure zelf de eigenschap Listable geven via SetAttributes:

In[144]:= SetAttributes priemdelers, Listable

In[145]:= priemdelers 20, 25, 30

Out[145]= 2, 5 , 5 , 2, 3, 5

Soms wil je niet dat een commando op elk lijstelement afzonderlijk toegepast wordt, maar wil je de lijst helemaal

vervangen, bijvoorbeeld door de som van de lijstelementen. Je kunt dit doen op verschillende manieren, maar er bestaat

een hele efficiënte methode in een functionele programmeerstijl.

Eerst maar eens kijken hoe uitdrukkingen er intern in Mathematica uitzien. Vergelijk x + y en {x, y}:

In[146]:= FullForm x + y

Out[146]//FullForm=

Plus x, y

In[147]:= FullForm x, y

Out[147]//FullForm=

List x, y

capita.nb 26

Page 27: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

Het verschil tussen de som en de lijst is alleen de aanduiding Plus en List voor de soort uitdrukking. Als je in staat

bent om List door Plus te vervangen, dan heb je een lijst vervangen door de som van de lijstelementen. In Mathemat-

ica doe je dit met het commando Apply.

In[148]:= Apply Plus, x, y

Out[148]= x + y

En omgekeerd:

In[149]:= Apply List, x + y

Out[149]= x, y

In het algemeen ziet een expressie er intern in Mathematica altijd uit alsKop[ argument en ]

Apply[ naam, Å] vervangt de Kop door de naam.

Nog twee voorbeelden ter illustratie en tevens om het gebruik van een verkorte notatie @@ te introduceren:

In[150]:= Apply Subtract, x ç y ç 0

Out[150]= x - y == 0

In[151]:= Apply Times, x, y, z

Out[151]= x y z

In[152]:= Plus ëë x, y, z

Out[152]= x + y + z

é Oefeningen

8. Maak een lijst van de eerste 20 oneven positive getallen (d.w.z, 1, 3, 5, .., 39) d.m.v.

(i) Range

(ii) Table

(iii) Selecteer hieruit de priemgetallen (hint: Select en PrimeQ zijn nuttige commando’s)

9. (i) Ga na wat Mathematica oplevert als je de volgende commando’s toepast op de onderstaande lijst

In[153]:= Clear g ;

lijst = a, b , c, d , e, f ;

In[155]:= Map g, lijst

Out[155]= g a, b , g c, d , g e, f

In[156]:= MapAt g, lijst, 1

Out[156]= g a, b , c, d , e, f

capita.nb 27

Page 28: Capita Selecta: Grafieken en Lijsten - science.uva.nl · ¯Opties Als je Mathematica een grafiek van een functie laat tekenen, dan maakt het pakket allerlei keuzes: het kiest bijvoor-beeld

In[157]:= MapAll g, lijst

Out[157]= g g g a , g b , g g c , g d , g g e , g f

In[158]:= Apply g, lijst

Out[158]= g a, b , c, d , e, f

In[159]:= Apply g, lijst, 1

Out[159]= g a, b , g c, d , g e, f

(ii) Beschouw de geneste lijst als een tabel:

In[160]:= TableForm lijst

Out[160]//TableForm=

a bc de f

Bedenk een efficiënte manier in functionele programmeerstijl om van de gegeven lijst een nieuwe lijst te maken

bestaande uit alleen de tweede kolom, dw.z {b,d,f}. Hoe krijg je op efficiënte wijze de eerste kolom

10. Definieer de functie gemiddelde die het gemiddelde van een lijst getallen uitrekent:

In[161]:= gemiddelde lijst_ :=

Pas de functie toe op de lijst van eerste 100 natuurlijke getallen

capita.nb 28