Mathematica Introductiecursus
André Heck en Wolter Kaper AMSTEL Instituut © 2004
Voorwoord Mathematica is een computerprogramma om wiskunde mee te doen. Het bijzondere aan Mathematica is dat het niet alleen kan rekenen met getallen, maar ook met symbolen, a, b, x, y enzovoorts. Hierdoor kan Mathematica differentiëren, integreren, vergelijkingen oplossen en nog veel meer. Al in het eerste studiejaar zul je Mathematica bij veel vakken gebruiken. Om Mathematica te leren gebruiken besteden we drie computerpractica aan deze introductiecursus. Drie practica zijn niet genoeg om Mathematica helemaal te leren kennen. Veel Mathematica commando's leer je pas gebruiken zodra je ze nodig hebt, later in het jaar. Je leert hier genoeg om met Mathematica aan de slag te gaan. Deze tekst is daarnaast bedoeld als naslagwerk bij je werkzaamheden met Mathematica. Verder kun je veel nuttige informatie vinden op het webadres www.science.uva.nl/onderwijs/lesmateriaal/Mathematica.
Inhoud Mathematica........................................................................................................................................... 1 1. Kennismaking................................................................................................................................ 3 1.1. Mathematica starten en inrichten ........................................................................................... 3 1.2. Voorbeeld 1: Een simpele rekenopdracht .............................................................................. 4 1.3. Voorbeeld 2: Een grafiek om mee te beginnen ...................................................................... 5 1.4. Voorbeeld 3: Functieonderzoek ............................................................................................. 8 1.5. Voorbeeld 4: Met of zonder palet?....................................................................................... 11 1.6. Enkele handige tips en aanwijzingen ................................................................................... 13 1.7. Veel voorkomende fouten .................................................................................................... 15 1.8. Lijst met commando’s.......................................................................................................... 16 1.9. Tot slot ................................................................................................................................. 17 2. Een vraagstuk aanpakken met Mathematica ............................................................................... 19 2.1. Voorbeeld 1: Een dialoog met Mathematica........................................................................ 19 2.2. Vergelijking of toekenning................................................................................................... 22 2.3. Namen toekennen of procentteken gebruiken? .................................................................... 22 2.4. Toekenning of substitutie? ................................................................................................... 23 2.5. Functie of formule gebruiken? ............................................................................................. 24 2.6. Oefeningen ........................................................................................................................... 25 2.7. Voorbeeld 2: Een chemische berekening ............................................................................. 26 3. Mathematica vaardigheden ............................................................................................................ 29 3.1. Grafieken combineren .......................................................................................................... 29 3.2. Grafieken van functies in twee veranderlijken..................................................................... 31 3.3. Werken met lijsten ............................................................................................................... 33 3.4. Formules vereenvoudigen .................................................................................................... 37 3.4.1. Veeltermen en rationale uitdrukkingen ...................................................................... 38 3.4.2. Wiskundige functies................................................................................................... 38 3.5. Reëel probleem, reële oplossingen? ..................................................................................... 40 3.6. Hoe betrouwbaar is Mathematica?....................................................................................... 42 3.7. Van speciaal naar algemeen ................................................................................................. 44 3.8. Van algemeen naar speciaal ................................................................................................. 44 3.9. Nieuwe tekens en commando’s............................................................................................ 46 4. Mathematica als tekstverwerker.................................................................................................. 49 4.1. Een Mathematica notebook ophalen van het Web............................................................... 49 4.2. Werken met een door anderen gemaakt notebook ............................................................... 49 4.3. Zelf een notebook vormgeven.............................................................................................. 51 2
1. KENNISMAKING 1.1. Mathematica starten en inrichten Hier begint je kennismaking met Mathematica. Hoe je het programma Mathematica start hangt af van het type computer dat je gebruikt. We bespreken hieronder alleen hoe dit gaat op een PC. Opdracht 1. Mathematica starten en stoppen • Druk (met de linkermuis) op de Start knop, links onderaan in je beeldscherm. Er verschijnt een menu. • Verplaats de cursor in dit menu naar All Programs (met de muis; de selectie wordt met een donkerblauw kader aangegeven). Er verschijnt een vervolgmenu. • Kies Mathematica 5. Er verschijnt een vervolgmenu. • Kies in het vervolgmenu Mathematica 5. Mathematica wordt nu gestart en spoedig ziet het beeldscherm er ongeveer zo uit (Figuur 1):
Figuur 1: Het beeldscherm aan het begin van een Mathematica sessie op een PC. Er zijn een paar vensters verschenen. Achter deze vensters zie je nog het bureaublad van Windows. Bovenaan zie je een titelbalk met de naam van het programma “Mathematica 5.0”. Daaronder zie je de menubalk met opties zoals File, Edit en Help. Onder de menubalk is het venster waarin je je berekeningen gaat maken, het documentvenster. Dit venster heeft als titel de naam van het document waaraan je werkt (nu nog Untitled-1 omdat je nog geen naam hebt gegeven). Zo’n document noemen we een Mathematica notebook: in het algemeen zal een notebook zowel teksten, rekenwerk, formules als grafieken bevatten. 3
Rechts van het documentvenster zie je in Figuur 1 een verticale balk met knoppen met wiskundige symbolen erop. Dit is een palet. Hiermee kun je straks wiskundige symbolen invoegen in je notebook. Mathematica heeft verschillende paletten. In Figuur 1 zie je het BasicInput palet. Dit palet bevat de meest gebruikte wiskundige symbolen. Links hiervan staat het BasicTypesetting palet met nog meer wiskundige symbolen. Als je Mathematica voor de eerste keer start verschijnt ook een welkomstvenster, waarin je gewezen wordt op een mini-tutorial van slechts 10 minuten, het hulpsysteem en de website van de makers van de software. Haal aanvinking bij “Display this window at startup” weg en sluit dit venster. Je krijgt het dan niet meer ongevraagd in beeld. •
Stop Mathematica door in het File menu het item Exit te kiezen.
Eerst maar eens een oefening om Mathematica op te starten en de vensters van het programma naar eigen smaak in te richten. Voor technische details over het werken met de vensteromgeving verwijzen we naar beschrijvingen van het besturingssysteem op je computer of vraag anders de practicumassistent op raad. Opdracht 2. Werken met Mathematica vensters • Start Mathematica. • Verander de grootte en positie van het documentvenster. Open een tweede documentvenster Untitled-2 door in menu File de optie New te kiezen. Typ hier een paar letters. • Een deel van het venster Untitled 1 is vast nog wel zichtbaar. Klik met de muis ergens in dit venster of op de titelbalk ervan: het venster komt nu naar voren. Typ hier ook een paar letters. • Gebruik de knopjes het venster om één van beide vensters tijdelijk te verbergen en dan weer op te roepen. De tekst die je ingetoetst had is er nog! • Gebruik de ‘sluit’-knop (aangeduid met × ) op een van beide vensters (of in menu File de optie Close) om deze definitief te sluiten. Er wordt in een apart venster gevraagd of je je werk wilt bewaren. Druk hierin op de knop met het label Don’t Save. • Open een nieuw leeg venster voor de volgende oefeningen en gooi alle ander documentvensters weg. • Verander het formaat van het documentvenster zodat het je bevalt.
1.2. Voorbeeld 1: Een simpele rekenopdracht Opdracht 3. Toets een Mathematica commando in en voer deze uit • Klik met de muis op de titelbalk van het documentvenster om het venster te activeren. • Toets dan de volgende tekst in: 1 + 2 • Dit is een compleet commando. Druk nu op de Enter-toets aan de rechterkant van je toetsenbord, naast de numerieke toetsen. (Als aan de rechterkant van je toetsenbord geen numeriek toetsenblokje te vinden is dan werkt het zo: houd de Shift-toets ingedrukt en druk op de ‘gewone’ Enter knop. (Kort: Shift-Enter)). Het antwoord “3” komt je bekend voor. In het documentvenster zie je nu het volgende:
Elke opdracht die je geeft krijgt de aanduiding In met daarachter tussen haakjes een volgnummer. Het bijbehorende Out antwoord van Mathematica krijgt hetzelfde nummer. Door deze regelnummers kun je gemakkelijk naar een eerder commando of eerder resultaat terugverwijzen.
4
Rechts in het documentvenster zie je nu een stel blauw gekleurde haakjes. Elk haakje geeft een cel aan. De bovenste cel is een input-cel, de onderste een outputcel. Beide cellen horen bij elkaar, ze zijn gegroepeerd. Dit wordt aangegeven met het buitenste haakje, dat de andere twee haakjes omvat. • •
Probeer eens wat er gebeurt als je dubbelklikt op het buitenste haakje. Dubbelklik nog eens op het buitenste haakje.
Cellen zijn nuttig bij het lezen, opmaken of wijzigen van een groter document. Meer daarover volgt in het hoofdstuk over Notebooks. Als je Mathematica als geavanceerde rekenmachine gebruikt, wil je vaak terugverwijzen naar het laatst uitgerekende resultaat. Dit kan met het procentteken. In onderstaande opdracht wordt het getal 3 tot de macht 30 verheven en een symbool x wordt er bij opgeteld.
Je kunt met deze wiskundige uitdrukking, waarin ook nog symbolen voorkomen, verder rekenen:
Dit verklaart de naam “symbolisch rekenen” en “computer algebra” voor dit type rekenwerk op de computer. Je kunt variabelen ook een waarde toekennen en dan steeds de naam i.p.v. de eigenlijke waarde gebruiken. We geven een simpel voorbeeld, waarbij we de waarden voorzien van een maateenheid.
•
Werk de uitdrukking (x+y)k voor k=2,3,4,5 uit. Herken je in de resultaten een structuur?
We stappen nu over op het serieuzere rekenwerk.
1.3. Voorbeeld 2: Een grafiek om mee te beginnen We gaan Mathematica vragen om de grafiek van de functie x ( x + 1) 2 sin x op het gesloten interval [0,2π] te tekenen. Opdracht 4. Teken een grafiek Toets het volgende commando in Mathematica in en voer de opdracht uit. Let er op dat je de opdrachtregel heel precies overneemt. 5
Plot[(x+1)^2*Sin[x], {x, 0, 2 Pi}] Lees de uitleg hieronder aandachtig door. Als alles goed gaat ziet je documentvenster er als volgt uit:
Aan de hand van dit ene commando leggen we allerlei basisprincipes van werken met Mathematica uit. Interactie Ook nu zie je weer het interactieve karakter van werken met Mathematica: • je toetst een opdracht in; • wanneer het pakket het commando begrijpt voert het deze uit • uitvoer verschijnt in een aparte Out regel. Omdat de Out regel van een Plot commando niet interessant is wil je dit vast onderdrukken. Dit doe je door een puntkomma (;) achter de opdracht te plaatsen. Haakjes Haakjes worden in Mathematica voor verschillende doeleinden gebruikt: • Vierkante haakjes [ ] bakenen argumenten van functies af, zoals Sin[x] of Plot[ , ]. • Ronde haakjes groeperen onderdelen van formules, zoals in ( x + 1) 2 . • Accolades worden gebruikt voor lijsten. Lijsten zullen we in een volgend hoofdstuk bespreken. Een bijzonder soort lijst, de ‘iterator’ wordt nu alvast besproken omdat je die vaak tegenkomt. Iterator Het tweede argument {x, 0, 2 Pi} van het Plot commando is een zo genoemde iterator. Deze geeft hier aan, dat de variabele x hier beperkt blijft tot het gesloten interval [0,2π]. Iterators worden ook gebruikt bij sommatie of bij de creatie van een lijst:
Hier blijft de variabele i beperkt tot het interval [1, 10]. In het ‘Sum’ voorbeeld wordt de volgende som 10
uitgerekend:
∑i
2
= 12 + 22 + 32 + + 102 . In het ‘Table’ voorbeeld zie je hoe je snel een lijst kunt vullen
i =1
met de kwadraten van de getallen 1, 2, 3,… 10. 6
Ingebouwde functies en constanten Namen van ingebouwde functies en constanten beginnen altijd met een hoofdletter. Voorbeelden zijn de sinus functie Sin en de grafische functie Plot. In samengestelde namen begint elk onderdeel van de naam weer met een hoofletter, bijvoorbeeld arcsinus is ArcSin. Een goede stijl van werken is om eigen objecten namen te geven die beginnen met een kleine letter. Mathematica kent ook allerlei wiskundige constanten. In ons voorbeeld komt π voor, aangeduid met Pi. Nog een voorbeeld:
Het grondtal van de natuurlijke logaritme, e, wordt aangeduid met E; de natuurlijke logaritme overigens met Log en niet met Ln.
Symbolen, variabelen en spaties De volgende tabel geeft een overzicht van rekenkundige bewerkingen: + * / ^
optellen aftrekken vermenigvuldigen delen machtsverheffen
Een opmerking over haakjes: Mathematica begrijpt ronde haakjes zoals je ze zelf ook begrijpt. Voorbeeld: (31 + 45)*(78 + 21) betekent dat eerst 31 en 45 en ook 78 en 21 opgeteld moeten worden. Daarna pas worden de resultaten vermenigvuldigd. Een opmerking over het vermenigvuldigingsteken: De asterisk * mag vervangen worden door een spatie. Dus, a*b is gelijk aan a b. Als er geen twijfel mogelijk is dan mag zelfs de spatie ontbreken. Bijvoorbeeld 2Pi is gelijk aan 2 Pi omdat geen enkele naam met een cijfer mag beginnen. Maar Pi2, a2 en ab zijn gewone namen van variabelen en geen producten. Opdracht 5. Vind de fouten in een commando Stel dat je de grafiek van de functie x → (tan( x ) + 1) 2 op het gesloten interval [0, 21π ] wilt tekenen. Vind de foutjes in de volgende invoerregel plot([tan(x)+1]**2, x=0..1/2Pi) : en maak een correcte grafiek van de functie met Mathematica. Opdracht 6. Teken een grafiek Teken de grafiek van de functie x
2 sin(π x )
x
op het gesloten interval [−3,3]. 7
1.4. Voorbeeld 3: Functieonderzoek We gaan verder met de functie f met het functievoorschrift f ( x) = ( x + 1) 2 sin x op het gesloten interval [0,2π]. Functieonderzoek illustreert nog een paar dingen die je met Mathematica kunt doen. De nadruk ligt hier niet op het uitleggen van wiskunde, maar op het gebruik van Mathematica. Opdracht 7. Onderzoek de functie In onderstaande paragrafen komen onderdelen van functieonderzoek en hiervoor nuttige Mathematica commando’s aan bod. Voer de Mathematica opdrachten ook daadwerkelijk uit en lees de toelichting aandachtig door. Nulpunten. De eerder getekende grafiek suggereert dat deze functie drie nulpunten heeft op het gesloten interval [0,2π]. Het zijn oplossingen van de vergelijking ( x + 1) 2 sin x = 0 . In Mathematica toets je deze vergelijking als volgt in.
Binnen een wiskundige vergelijking gebruik je in de software twee gelijktekens ==. Het enkele gelijkteken = kun je gebruiken om een object in Mathematica een naam te geven. Laten we de vergelijking “(x + 1)^2 * Sin[x] == 0” de naam vergelijking gegeven (We kunnen hem ook vgl2 of eq of Pietje noemen, maar een zinvolle naam is vooral bij nalezen duidelijker) :
Laat Mathematica deze vergelijking in x oplossen met het commando Solve:
Hierbij gebruiken we de eerder ingetoetste naam vergelijking en we geven een nieuwe naam oplossing aan het resultaat van de Solve-opdracht. Op het eerste gezicht niet zo’n beste beurt van Mathematica: slechts twee nulpunten gevonden, waarvan er een nog buiten het gekozen domein [0,2π] ligt! Dit geeft alleen maar aan dat zelfs met geavanceerde rekenprogramma’s als Mathematica geldt: “niet alleen je handen, maar ook je hersens gebruiken”. De kwestie van de domeinkeuze is binnen Mathematica niet te regelen. het pakket probeert de vergelijking zo algemeen mogelijk op te lossen; je moet zelf uitzoeken welke gevonden oplossingen relevant zijn. De waarschuwing is een hint waarom er te weinig oplossingen gevonden worden: -1 is een nulpunt van de veelterm ( x + 1) 2 en 0 is één van de vele nulpunten van de sinus. Mathematica laat de gehele veelvouden van π als nulpunten van de sinus voor wat ze zijn en neemt genoegen met arcsin(0) als oplossing. Solve heeft twee oplossingen x = −1 en x = 0 van de vergelijking ( x + 1) 2 sin x = 0 gevonden en geeft de oplossingen weer als substitutieregels x → −1 en x → 0. Door deze substitutieregels toe te passen op de uitdrukking x via de operator /. , dan krijg je een lijstje van oplossingswaarden: 8
Laten we nu de eerste oplossing kiezen om mee verder te werken en deze oplossing de naam x1 geven.
Je kunt nu verdere berekeningen gaan doen met x1, bijvoorbeeld het kwadraat ervan uitrekenen met het commando x1^2. Je kunt ook de gevonden oplossingen controleren door ze te substitueren in de vergelijking, die we de naam vergelijking gegeven hebben.
Lees de laatste opdracht als volgt: “neem vergelijking en substitueer voor x de waarde a.” Kijk, hier zie je het verschil tussen een goede oplossing (-1), een onjuiste oplossing (2) en een onbekende oplossing (a). Voor een goede oplossing is de vergelijking ‘waar’. Wiskundige functies In de wiskunde is het vaak handig een functie f te definiëren: Let op: als je een functie definieert, plaats dan de argumenten van de functie tussen rechte haken en beëindig de namen van de argumenten met een liggend streepje (underscore, _ ). Gebruik het dubbelepunt-gelijkteken als definitiesymbool en typ daarachter de formule1. Aan de rechterkant van het gelijkteken gebruik je dezelfde namen als ervóór, maar dan zonder het liggende streepje. Een functiewaarde uitrekenen is nu eenvoudig:
Als elk ander computeralgebra-pakket legt Mathematica de nadruk op exact rekenen, maar een numerieke benadering van dit getal kan ook:
In dit laatste voorbeeld is het procentteken % gebruikt om te verwijzen naar het laatst uitgerekende resultaat. Gebruik %% om naar het voorlaatste resultaat te verwijzen, %%% om naar het op twee-na-laatste resultaat te verwijzen, enzovoorts. 1
Een enkel gelijkteken = als definitiesymbool in een functiedefinitie werkt ook. Er zijn technische verschillen met het dubbelepuntgelijkteken. Bijvoorbeeld, met het enkele gelijkteken kun je van een formule gemakkelijk op een functie overstappen met een opdracht van de vorm f[x_] = formule in x. Bij het dubbelepunt-gelijkteken werkt het gebruik van parameters juist weer beter.
9
Minima en maxima Je herinnert je wellicht van het VWO dat het exact bepalen van minima en maxima van een functie f(x) begint met het opsporen van nulpunten van de afgeleide f’(x):
Zie hierboven de formule voor de afgeleide en zijn grafiek op het interval [0,2π]. Je ziet in de grafiek nulputen van de afgeleide in de buurt van x = 2 en x = 5. Maar Mathematica kan de exacte waarden niet vinden met Solve:
Wel zijn met FindRoot numerieke benaderingen van de nulpunten van de afgeleide uit te rekenen:
Bij gebruik van Findroot moet je Mathematica helpen door te zeggen in welke buurt de oplossing gezocht moet worden. Dit doe je door bijvoorbeeld {x, 2} te typen (“zoek x in de buurt van 2”). Hogere afgeleiden kun je berekenen door extra accenten toe te voegen, dus f’’’’’[x] geeft de vijfde afgeleide, maar als het tellen van accenten vervelend wordt kun je het ook zo doen:
In een D commando betekent {x, 5} dus: differentieer naar x, vijfmaal. Als je dit soort details vergeet typ je in een lege invoercel bijvoorbeeld ?D of ?FindRoot. Je krijgt dan uitleg over het gevraagde commando. Opdracht 8. Onderzoek een veelterm van graad 4 Onderzoek de veelterm x 4 − 4 x 3 − 16 x 2 − 8 x + 4 : • Teken de grafiek over een geschikt domein. 10
• • • • •
Bereken in ‘Table’ opdracht de functiewaarden voor x in –8, -7, -6, ... , 6, 7, 8. Vind exacte waarden en numerieke benaderingen van de nulpunten. Bereken de eerste en tweede afgeleide. Bereken numerieke benaderingen van de maxima en minima. Bereken exacte waarde voor de buigpunten, d.w.z. de waarden voor x waarvoor de tweede afgeleide gelijk aan 0 is.
1.5. Voorbeeld 4: Met of zonder palet? We gaan nog even door met het onderzoek van de functie f met functievoorschrift f ( x) = ( x + 1) 2 sin x (zie voorbeeld 3). Stel dat ook nog gevraagd wordt de oppervlakte te berekenen van het vlakdeel tussen de grafiek van f en de lijnen y = 0, x = 0 en x = π. Je moet dan uitrekenen de bepaalde integraal π
∫ ( x + 1)
2
sin x dx
0
Dit kan in Mathematica op verschillende manieren: door een commando te typen zoals we tot nu toe steeds deden, of door een commando op te bouwen met het “BasicInput” palet. Opdracht 9. Probeer diverse invoermethoden. Reken bovenstaande integraal uit (a) door het commando in te toetsen, (b) met het BasicInput palet, (c) door beide methoden te combineren. Kies wat je het best bevalt. Tekst en uitleg staat hieronder, voor het geval je dit nodig mocht hebben. Zo niet, dan kun je na deze opdracht verder met Opdracht 9. A. door te typen Om bovenstaande integraal uit te rekenen kun je het Integrate commando gebruiken:
Voordeel van de intyp-methode is, dat het op den duur sneller werkt. Om dit goed te kunnen doen moet je een aantal dingen weten: • Een integraal maak je met Integrate • Na een commando of een functienaam, zoals Integrate, komt er altijd een paar rechte haken []. Tussen de rechte haken staan de gegevens die Mathematica nodig heeft om het commando uit te voeren. • “x varieert van a tot b” wordt in Mathematica aangegeven met een iterator: {x, a, b} • Na het Integrate commando zijn twee gegevens nodig. Ten eerste: wat moet er geïntegreerd worden? Antwoord: (x+1)^2 Sin[x]. Ten tweede: waartussen varieert x? Antwoord: {x,0,Pi} • Tussen de twee nodige gegevens staat een komma. Je ziet, dat is heel wat om te onthouden. Daar staat wel wat tegenover: behalve dat het sneller werkt, heb je ook het voordeel dat je het systeem van Mathematica beter begrijpt, als je deze notatie leert. B. met het BasicInput palet. Je kunt ook een commando opbouwen met het Basic Input palet. Zo’n commando ziet er dan heel anders uit: je krijgt op je scherm “wiskunde zoals je het schrijft”! Zorg dat het BasicInput palet op het scherm aanwezig is. Mocht dit niet het geval zijn, kies dan uit menu File de optie Palettes. Er verschijnt een vervolgmenu. Kies hieruit het gewenste palet. Dit palet verschijnt dan op het scherm op de plek waar het de laatste keer was achtergelaten. 11
Druk op de ↓ -toets tot je een zwarte streep ziet onder het antwoord op het vorige commando. Deze streep geeft de plaats aan waar de volgende input-cel zal komen. Druk (met de muis) op de knop voor een bepaalde integraal. Deze knop ziet er zo uit: In je documentvenster verschijnt nu het integraalteken, met daaromheen verschillende vierkante blokjes, precies zoals op de knop waarop je hebt gedrukt. Deze blokjes geven de plaatsen aan waar je nog wat moet invullen. Klik (met de muis) op een blokje dat je wilt invullen! • Direct rechts van de integraal willen we ( x + 1) 2 sin x invullen. Klik op het betreffende blokje. Dit blokje krijgt een vette zwarte punt erin, ten teken dat het is geactiveerd. . Het blokje waarop je geklikt hebt wordt nu vervangen door Druk nu op de exponent knop twee blokjes, zoals aangegeven op de knop waarop je drukte. o Het onderste blokje (met de vette zwarte punt erin) is al geactiveerd. Hier moet de uitdrukking (x+1) komen. Typ dus: (x+1) o Activeer nu het blokje dat de exponent aangeeft en toets daar 2 in. o Zet de cursor vlak voor de “d” en toets rest van de formule in, d.w.z. Sin[x] (Je ziet het: aan sommige Mathematica details valt toch niet te ontkomen!). • Achter de “d” komt, zoals je weet, de naam van de variabele: x. Klik op het blokje achter de “d” en typ dan x. • Als ondergrens voor de integratie kiezen we het getal nul. Bedenk zelf hoe je hier een nul kunt invullen. • Als bovengrens voor de integratie kiezen we het getal pi, symbool: π. Gebruik het palet om het grafische symbool π op de goede plek neer te zetten. Als het goed is zie je nu in je documentvenster het volgende commando: o
Er zijn geen blokjes meer open, het commando kan dus worden uitgevoerd. Druk op Shift-Enter om het commando te laten uitvoeren. Mathematica’s antwoord verschijnt: precies hetzelfde als na gebruik van het Integrate commando. C. Beide methoden combineren Je kunt de intyp-methode en de palet-methode op allerlei manieren combineren. Je kunt bijvoorbeeld het integraalteken met het palet maken. Vervolgens klik je op het blokje direct achter de integraal en daar typ je de tekst (x+1)^2 Sin[x]. Vervolgens klik je op het blokje voor de ondergrens van de integraal, typ 0, klik op het blokje voor de bovengrens en typ de tekst Pi (in plaats van op de π knop te drukken). Klik achter de “d” en typ x. Druk op Shift-Enter en klaar ben je. Opdracht 10. Probeer nog een paar knoppen in het BasicInput palet uit • Vergelijk de wortel knop op het BasicInput palet met het Sqrt commando • Bereken de som van alle oneven getallen tussen 0 en 100 op twee manieren: met de sommatie knop op het BasicInput palet en met het Sum commando. Wat bevalt je het beste? Informatie over het Sum commando vind je door ?Sum te typen, of door via de menubalk Help te kiezen en dan op het trefwoord Sum te zoeken. De voorbeelden zijn het meest geschikt om eerst naar te kijken Wanneer paletten gebruiken en wanneer typen? Het antwoord op deze vraag hangt af van je kennis van Mathematica en van het doel waarvoor je Mathematica gebruikt. Het beste advies is: doe wat je als het gemakkelijkst ervaart. Programmeurs en ervaren Mathematica gebruikers hebben doorgaans een sterke voorkeur voor de intyp-methode. Deze 12
methode geeft meer inzicht in hoe Mathematica “van binnen” werkt. De overstap naar gebruik van Mathematica als programmeertaal wordt dan ook veel makkelijker als je de intyp-methode goed beheerst. Belangrijke redenen om paletten binnen Mathematica te gebruiken zijn: 1. Gecompliceerde formules zijn overzichtelijker en gemakkelijker te maken m.b.v. een palet. De kans dat je een haakje per ongeluk verkeerd neerzet of vergeet te plaatsen is veel minder groot. 2. Als je een berekening maakt en de resultaten aan anderen wilt laten zien, dan is gebruik van een palet nuttig omdat het de leesbaarheid verbetert. 3. Wanneer je Mathematica als tekstverwerker gebruikt en een formule maakt die bedoeld is om gelezen te worden, dan bieden de paletten zonder meer uitkomst. Opdracht 11. Reken numeriek met een zelf gekozen precisie Met het commando N kun je een numerieke waarde van een uitdrukking uitrekenen. Je mag de numerieke precisie, d.w.z het aantal cijfers waarmee gerekend wordt, als 2-de argument opgeven. Bijvoorbeeld: N[Pi, 30] levert 30 cijfers van de numerieke benadering van π op. • •
Voer met het BasicInput palet de formule e π 163 − 744 in. Reken dit getal achtereenvolgens uit met een numerieke precisie van 10, 20, 30 en 50 cijfers. 3
Opdracht 12. Bereken een integraal en controleer het antwoord door te differentiëren Integreren is de omgekeerde operatie van differentiëren. We zeggen dat F de primitieve of onbepaalde integraal van f is als F’ = f. We noteren F = f .
∫
•
Bereken de integraal
∫
e −1 dx en controleer het antwoord door differentiëren en vereenvoudigen x
(met Simplify). Opdracht 13. Voorkom veel voorkomende fouten In de volgende twee paragrafen staan nuttige tips en aanwijzingen bij gebruik van Mathematica. Ook worden veel voorkomende fouten opgesomd. Lees beide paragrafen aandachtig door.
1.6. Enkele handige tips en aanwijzingen Algemene aanwijzingen Mathematica is een hulpmiddel om wiskunde te doen en geen doel op zich. Het is daarom helemaal niet verkeerd om ook pen en papier te gebruiken. Soms zijn afleidingen met pen en papier veel eenvoudiger dan met het computeralgebra-pakket. Gebruik in een Mathematica sessie dezelfde namen voor variabelen en uitdrukkingen als je op papier doet. Gebruik ook zoveel mogelijk logische namen voor de wiskundige objecten en let op gebruik van hoofdletters en kleine letters. Vermijd overbodig intikken van opdrachten en maak gebruik van Copy- en Paste-faciliteiten in een Mathematica Notebook. Bewaar tijdens een Mathematica sessie regelmatig het werk tot dan toe. Dit voorkomt teleurstellingen van verloren werk als er onverhoopt iets misgaat. Maak niet te veel gebruik van het procentteken om naar een vorig resultaat te verwijzen. Vooral bij het tussenvoegen van berekeningen midden in een sessie of het verbeteren van invoer in de sessie kan het zijn dat je sessie dan niet meer consistent is. 13
Controleer zo goed mogelijk de invoer. Het is verstandig eerst een formule te tonen om te kunnen zien of deze is wat je bedoeld en er dan pas een opdracht op los te laten. ln 2 ( x) + ln( x ) Een voorbeeld: stel je wilt de integraal dx door Mathematica laten uitrekenen. Het is dan x verstandig eerst de integrand in te toetsen en na te gaan dat je inderdaad de goede formule te pakken hebt; een tikfoutje is immers gauw gemaakt! Als alles in orde is kun je de formule uitbreiden tot een Integrate-opdracht of op een nieuwe regel een commando intoetsen om de integraal echt uit te rekenen. In onderstaande schermafdruk is voor de tweede methode gekozen. Zie wat het effect van het vergeten van haakjes is!
∫
Griekse letters Griekse letters kunnen in Mathematica net als zoveel andere lettertekens via het BasicInput en BasicTypeseting palet ingevoerd worden. Als je liever typt, gebruik dan de corresponderende naam ingesloten tussen Esc karakters. Bijvoorbeeld: druk Esc toets in, toets in alpha, en druk weer de Esc toets in om uiteindelijk de letter α te krijgen. Commando’s over meerdere regels uitsmeren Als de invoer niet op één regel past of als je de invoer voor alle duidelijkheid over meer regels wilt uitsmeren, dan kun je het beste de regel op een gunstig moment afkappen door op de Enter knop met de pijl naar links te drukken (ook wel Return-toets genoemd). Gebruik niet Shift-Enter want dan denkt Mathematica dat het commando af is en dat het rekenwerk kan beginnen. Numeriek rekenen Als je een invoer met een decimale punt geeft, rekent Mathematica verder alles uit in decimalen. Wil je dat niet dan moet je bijvoorbeeld 1/2 typen i.p.v. 0.5. Ongedaan maken van een toewijzing Om een eerdere toewijzing ongedaan te maken gebruik je het gelijkteken gevolgd door een punt ( =.) Met een schone lei beginnen Vaak is het handig als je een tijdje gewerkt hebt om weer met een schone lei te beginnen. Je kunt dit in een Mathematica notebook op de volgende manieren doen: 14
•
via de opdracht Quit. Dan wordt de rekenmotor van Mathematica, de zgn. kernel, gestopt. Wanneer je een nieuw commando intoetst wordt een nieuwe kernel gestart. • Via het Quit Kernel item van het Kernel menu • met het commando Clear["@"]. Nu wordt niet de Mathematica kernel onderbroken, maar worden alle variabelen op het hoogste niveau vrijgemaakt. Nog iets rigoreuzer is de opdracht Remove["Global`*"] De volgende schermafdruk dient als illustratie:
1.7. Veel voorkomende fouten Het typen van hoofdletter en kleine letters door elkaar (per ongeluk op Caps Lock gedrukt). Het intoetsen van pi als er Pi bedoeld wordt (het getal π ≈ 3.14 ). Het intoetsen van e als er E bedoeld wordt (het getal e ≈ 2.72 ). Het gebruiken van verkeerde haken en namen van wiskundige functies. Bijvoorbeeld, het typen van sin(x) i.p.v. Sin[x] Het hebben van goede bedoelingen maar het hanteren van verkeerde invoer. Bijvoorbeeld, het intoetsen van xy als er x*y of x y bedoeld wordt en het intoetsen van 1/2Pi als er 1/(2*Pi)bedoeld wordt. Het typen van de letter o of O als er nul 0 bedoeld wordt. Het gebruiken van een komma i.p.v. een decimale punt voor een kommagetal (floating-point getal), bijvoorbeeld 3,14 i.p.v. 3.14 Het gebruiken van het enkele gelijkteken voor een vergelijking. Mathematica gebruikt een enkel gelijkteken = voor een toekenning en twee gelijktekens == voor het vergelijking-smbool. 15
Het vergeten van het liggend streepje bij een functiedefinitie (f[x_] := ... ). Het tekenen van een grafiek lukt niet omdat niet alle toewijzingen aan variabelen goed overgekomen zijn en of omdat er variabelen zijn die onbedoeld een waarde hebben.
1.8. Lijst met commando’s Tekens en getallen: %, Pi, E, {}, [], () = en == D[f, x] D[f, {x,n}]
Zie paragraaf 1.3 Zie paragraaf 1.4
Geeft de afgeleide van f naar x. Geeft de n-de afgeleide van f naar x.
FindRoot[lk==rk, {x,x0}] Zoekt een numerieke oplossing van de vergelijking lk == rk in de variabele x, en begint te zoeken bij x=x0. Integrate[f, x] Berekent de onbepaalde integraal van f als functie van x. Integrate[ f, {x, xmin, xmax}] Berekent de bepaalde integraal van f als functie van x met ondergrens xmin en bovengrens xmax. Log[x] Log[10,x]
Natuurlijke logaritme (niet ln gebruiken!). Logartime met grondtal 10.
N[expr] Geeft de numerieke waarde van de uitdrukking expr. N[expr, d] Geeft de numerieke waarde van de uitdrukking expr in een precisie van d cijfers. Plot[f, {x, xmin, xmax}] Simplify[expr]
Tekent de grafiek van f als een functie van x tussen xmin en xmax.
Vereenvoudigt de uitdrukking expr.
Sin[x] Betekent de sinus van x. Zo ook de andere trigonometrische functies als Cos[x], Tan[x] en inverse trigonometrische functies als ArcSin[x]. Sqrt[x]
Betekent de vierkantswortel van x, d.w.z. x .
Solve[vgl, var] Probeert de vergelijking vgl in de variabele var op te lossen. expr /. x->a
Neemt expr en substitueert daarin voor x de waarde a.
Sum[expr, {i, imin, imax}]
Berekent de som van expr voor i lopend van imin tot imax.
Table[expr, {i, imin, imax, di}] Berekent expr voor i lopen van imin tot imax met stapgrootte di en plaatst de resultaten in een lijst. Dit soort summiere beschrijvingen van een commando kun je ook binnen Mathematica krijgen door in te toetsen ?commando. Bijvoorbeeld: 16
Als je een lijst wilt hebben van alle commando’s en speciale woorden die eindigen met Plot gebruik dan de asterisk als ‘wild coard’, zeg maar een joker die overal voor ingezet mag worden.
Uiteraard geeft het on-line hulpsysteem van Mathematica (onder het Help-menu) meer tekst en uitleg over de commando’s, maar het kan een beginnend gebruiker ook intimideren. Via de Help Browser heb je ook toegang tot het dikke naslagwerk “The Mathematica Book” van Stphen Wolfram, de bedenker en maker van de software.
1.9. Tot slot Je hebt nu hopelijk een goede indruk van het soort dingen dat je met Mathematica kunt doen. Mathematica is een programma om wiskunde mee toe doen! Wiskunde wordt vaak gebruikt in andere exacte vakken zoals scheikunde en natuurkunde. Mathematica weet echter niet veel van deze disciplines, dus alle nodige vakkennis moet je er zelf instoppen. Pas daarna kan Mathematica een antwoord geven. Mathematica weet ook niet alles van wiskunde! Dus het komt ook wel eens voor dat je je eigen wiskundige verstand moet gebruiken om Mathematica een handje te helpen. Het is dus nog steeds nodig dat je zelf veel van wiskunde begrijpt.
In volgende hoofdstukken gaan we nader in op de details van allerlei commando’s die je hierboven bent tegengekomen.
17
18
2. EEN VRAAGSTUK AANPAKKEN MET MATHEMATICA In het vorige hoofdstuk heb je veel commando’s gezien en uitgeprobeerd. Je hebt daardoor al een indruk van wat je allemaal met Mathematica kunt doen. Mathematica verstaat zoveel verschillende commando’s dat je zou kunnen denken, dat er voor elk vraagstuk wel een commando bestaat, waarmee het vraagstuk kan worden opgelost. Dat is helaas niet zo! Om een vraagstuk op te lossen, zul je meestal een aantal commando’s moeten geven, waarbij elk commando voortbouwt op de resultaten van voorafgaande opdrachten. We beginnen weer met een voorbeeld. De principes die een ‘dialoog’ met Mathematica mogelijk maken worden daarna besproken. Nieuwe commando’s zullen niet geïntroduceerd worden; alleen leer je bekende commando’s beter in te zetten.
2.1.
Voorbeeld 1: Een dialoog met Mathematica
Opdracht 1. Voer een dialoog met Mathematica. Probeer het onderstaand vraagstuk eerst zelf te maken voordat je verder gaat met het lezen van de gegeven oplossing. Vraag: Twee rechte wegen kruisen elkaar loodrecht. Op de ene weg nadert een auto de kruising en is op tijdstip t = 0 de afstand van de auto tot de kruising gelijk aan a0. Op de andere weg nadert een tandem de kruising en is op t = 0 de afstand van de fiets tot de kruising gelijk aan b0. De constante snelheden van auto en tandem zijn respectievelijk u en v. Hierbij zijn afstanden uitgedrukt in meters en snelheden in meters per seconde. Wat is de kortste afstand tussen auto en tandem en op welk tijdstip wordt die afstand bereikt? Het is duidelijk dat het antwoord geen concreet getal kan zijn. Toch kan de vraag wel beantwoord worden. Met Mathematica lukt dat bijvoorbeeld als volgt. Oplossing. We maken eerst een schets van de situatie. De auto en tandem rijden richting kruispunt en de afstand tot de kruising op tijdstip t noemen we voor de auto en tandem respectievelijk a en b. Nu kunnen we, met de Wet van Pythagoras, de afstand tussen auto en tandem uitrekenen (zie figuur 1). Deze afstand noemen we bijvoorbeeld c.
Figuur 1. Situatieschets van auto en tandem die een kruispunt naderen. Er geldt: c = a 2 + b 2 We voeren dit in een kersverse Mathematica sessie in: 19
We maken vervolgens een formule voor de afstand van de auto tot de kruising, als functie van de tijd. Op t = 0 is de afstand gelijk aan a0 en elke seconde gaan er u meters van af. Dit leidt tot de formule
a = a0 − u × t
Voor de afstand van de tandem tot het kruispunt kunnen we net zo’n formule maken:
b = b0 − v × t
Laten we deze formules in Mathematica intoetsen. Het is in het pakket mogelijk om met geïndexeerde namen als a0 en b0 te werken, maar het kost wel zoveel moeite dat je eigenlijk beter af bent met namen als a0 en b0.
Opvragen wat c nu is levert het volgende antwoord op:
Je ziet dat de afstand c tussen auto en tandem gezien kan worden als een functie van de tijd t. De symbolen a0, b0, u en v zijn immers in de opgave bedoeld als (onbekende) constanten. De tijd t daarentegen is bedoeld als variabele. Van c opgevat als een grootheid die van t afhangt kunnen we het minimum uitrekenen! Dat doen we door eerst de afgeleide te vragen en dan te kijken waar deze nul is. Vraag de afgeleide van de formule genaamd c, met t als variabele:
Vraag nu het tijdstip waar deze afgeleide nul is:
Als antwoord krijg je het tijdstip, waar de afstand minimaal is, uitgedrukt in a0, b0, u en v. Dit antwoord wordt gegeven als een substitutieregel. Substitutieregels herken je aan de pijl → (in te toetsen als een koppelteken – gevolgd door het groter-dan teken >). Omdat een vergelijking meer dan één oplossing kan hebben, worden oplossingen standaard in een lijst geplaatst. Een lijst herken je aan de accolades. Deze lijst hebben we de naam opl gegeven, om er dadelijk gebruik van te kunnen maken. Nu we het tijdstip kennen waar de afstand minimaal is, kan de afstand c op dit tijdstip worden uitgerekend.
20
We substitueren het gevonden tijdstip in de formule voor c met de operator /. of met de equivalente prodecure ReplaceAll. We kiezen daarbij de eerste (en enige) oplossing uit de lijst die we opl hebben genoemd. Het resultaat geven we weer een naam (cmin) om er later iets mee te kunnen doen. Eerst maar eens proberen of het antwoord niet te vereenvoudigen is. Dit lukt inderdaad! We kennen de simpelere uitdrukking toe aan de variabele cmin:
Als antwoord hebben we nu een formule voor de minimale afstand tussen auto en tandem. We hebben het vraagstuk nu opgelost voor alle mogelijke waarden van a0, b0, u en v. Dit hadden we met een spreadsheet programma als Excel of met een grafische calculator niet kunnen doen. Als we de oplossing willen weten voor een speciaal geval, bijvoorbeeld voor a0 = 990, b0 = 350, u = 20, v = 7, dan hoeven we alleen nog maar getallen in te vullen:
We hebben de decimale waarde uitgerekend met N[%]. De minimale afstand tussen auto en tandem blijkt 3,3035 (meters) te zijn, voor dit speciale geval van een bijna-botsing. Net zo vlug kunnen we nu de oplossing krijgen voor elke andere combinatie van a0, b0, u en v.
Hier zie je het voordeel van rekenen met onbekenden. Je krijgt dan als antwoord een formule die algemeen is en die je vervolgens op allerlei situaties kunt toepassen. Dit is een aanpak die je vaak zult gebruiken. Mathematica is een programma voor het afleiden van lastige formules! Het is daarom vaak voordelig om een vraagstuk eerst algemeen op te lossen, dat wil zeggen met zoveel mogelijk onbekenden er in. Bij het aanpakken van een vraagstuk zijn er steeds diverse mogelijkheden waaruit je kunt kiezen. In de volgende paragrafen gaan we diverse details uit bovenstaand voorbeeld nader bekijken, zodat je in het vervolg zelf een verstandige aanpak kunt kiezen. Opdracht 2. Varieer op een thema. In de volgende secties gaan we er van uit, dat je het uitgewerkte voorbeeld op je scherm hebt staan, zodat je er naar kunt kijken en varianten kunt uitproberen.
21
2.2.
Vergelijking of toekenning
Om aan Mathematica de afstand tussen auto en kruising kenbaar te maken typte je het volgende commando: a = a0 – u * t De rechterkant a0 – u*t is een formule en a is de naam die we aan deze formule hebben gegeven. Bij elkaar is het een toekenning. De naam a krijgt als waarde a0 – u*t toegekend. Wat is het gevolg? Overal waar in volgende opdrachten de naam a voorkomt, wordt nu de toegekende waarde ingevuld! De waarde van a is in dit geval geen getal, maar een formule, namelijk a0-u*t. We hadden ook iets anders kunnen typen dat er veel op lijkt. a == a0 – u * t Dit is géén toekenning maar een vergelijking zoals je al weet uit paragraaf 1.4. Een vergelijking kun je oplossen; bij een toekenning lukt dat niet! Omgekeerd: als je een vergelijking intoetst die begint met a == dan zal Mathematica dit niet als een toekenning opvatten. Dus a wordt in volgende opdrachten niet vervangen. Opdracht 3. Vergelijking of toekenning • Waarom gebruikten we in het voorbeeld een toekenning en géén vergelijking? • Hoe zou de oplossing van het probleem verlopen als we alleen maar vergelijkingen zouden gebruiken? • Gevraagd: een formule voor het tijdstip t waarop de afstand a tot de kruising nul is. Gebruik Mathematica om het antwoord af te leiden. • Waarom heb je een vergelijking nodig bij de vorige opdracht? Of je een toekenning of een vergelijking gebruikt, hangt dus af van wat je ermee wilt doen en wat je als handig ervaart. En dat hangt weer af van de opdracht waaraan je werkt. Om het helemaal moeilijk te maken: hieronder zie je een toekenning en een vergelijking in één commando: vgl1 = a == a0 – u * t Aan de naam vgl1 wordt nu als waarde de vergelijking a == a0 – u*t toegekend. Het prettige gevolg is, dat je in volgende opdrachten deze vergelijking onder deze naam kunt gebruiken. Bijvoorbeeld zo: Solve[vgl1, t] Opdracht 4. Solve-commando In plaats van bovenstaande twee commando’s had je ook in één keer kunnen typen Solve[a == a0 – u*t, t] • Waarom heeft bovenstaande opdracht hetzelfde effect als Solve[vgl1, t]? • Wanneer heeft het voordelen om eerst een naam te geven aan een vergelijking? • Je kunt een vergelijking ook oplossen door deze eerst in te toetsen en onmiddellijk hierna het commando Solve[%, t] te geven. Wanneer doe je dat? (Zie de volgende paragraaf als je het niet weet).
2.3.
Namen toekennen of procentteken gebruiken?
Een formule of een vergelijking hoeft niet noodzakelijkerwijs een naam te krijgen. Je kunt formules en vergelijkingen ook gebruiken als ze geen namen hebben. In dat geval gebruik je procenttekens (zie paragraaf 1.4) om naar eerdere resultaten te verwijzen.. % betekent: “het resultaat van het vorige uitgevoerde commando”, %% betekent: “het resultaat van twee commando’s terug”, enzovoorts.
In plaats van de volgende serie commando’s: 22
a = a0 – u * t b = b0 – v * t c = Sqrt[a^2 + b^2] kun je dus ook (evengoed?) gebruiken: a – a0 * t b – b0 * t Sqrt[%^2 + %%^2] Deze tweede werkwijze is bijna altijd af te raden. Je berekening wordt minder leesbaar, je ziet minder gemakkelijk wat je gedaan hebt. Het wordt lastig (tussenliggende commando’s tellen!) om verderop in een lange berekening dezelfde formule nóg eens te gebruiken, of je moet hem opnieuw intoetsen. Opdracht 5. Namen of procentteken? • Bedenk een korte opgave waar je tóch, ondanks de waarschuwingen, een procentteken zou gebruiken. Waarom is het procentteken in jouw opgave niet of nauwelijks schadelijk?
2.4.
Toekenning of substitutie?
In het voorbeeld gebruikten we helemaal aan het eind de volgende substitutie: cmin /. {a0->990, b0->350, u->20, v->7} In plaats daarvan hadden we ook de waarden 990, 350, 20 en 7 kunnen toekennen aan de symbolen a0, b0, u en v. We hadden dus ook kunnen typen: a0 = 990; b0 = 350; u = 20; v = 7; cmin Nota bene: de puntkomma’s aan het einde van de toekenningen onderdrukken uitvoer van Mathematica. Dit kan hier omdat het resultaat van de toekenning op het scherm niet meer informatie geeft dan er aan de invoerkant al staat. Het resultaat van bovenstaande berekening is hetzelfde als voorheen. Je merkt pas verschil als je hierna wilt verder werken. Na een toekenning heeft a0 tot nader order de genoemd waarde 990 gekregen, dat wil zeggen, deze waarde wordt voortaan in alle volgende commando’s ingevuld. Een substitutie met /. en een pijltje (gesimuleerd met ->) daarentegen geldt alleen tijdelijk, voor de duur van één commando. Opdracht 6. Substitutie of toekenning Stel je wilt de minimale afstand weten tussen auto en tandem voor het geval a0 = 990, b0 = 350, u = 20 en v = 7. En daarna wil je óók nog een formule afleiden voor het verschil tussen de tijdstippen t1 en t2 waar de trein en de tandem de kruising passeren (met a0, b0, u en v als onbekenden). • Zou je een toekenning of een substitutie gebruiken om de minimale afstand te berekenen? • Stel je gebruikt 4 toekenningen voor a0, b0, u en v. Wat zou je daarna doen om a0, b0, u en v weer als onbekenden te kunnen gebruiken? Je hoeft niet altijd te kiezen tussen toekenning of substitutie. Allebei tegelijk kan óók. Zoek het volgende commando op in het voorbeeld: cmin = c /. opl[[1]] Opdracht 7. Verander een toekenning • Waarom staat er in dit commando geen pijltje? (spiek in het voorbeeld!) 23
• •
We hadden ook kunnen intoetsen c = c /. opl[[1]] In plaats daarvan gaven we de oplossing een nieuwe naam cmin. Welke gevolgen heeft de toekennig c = c /. opl[[1]] voor het gebruik van het symbool c in volgende commando’s? Wat is het voordeel van onze aanpak? Wat is de betekenis van het commando c =. (gelijkteken gevolgd door een punt)?
Soms is het gunstig om een berekening langzaam op te bouwen, zodat je elke stap goed kunt overdenken. Een andere keer weet je al precies hoe het moet en ga je voor het snelste resultaat. Met de opgave hieronder kun je beide stijlen (de snelle en de rustige) vergelijken. Opdracht 8. Één of meer commando’s? De eerste vier commando’s van het voorbeeld waren als volgt. c = Sqrt[a^2 + b^2] a = a0 – u * t b = b0 – v * t c Je krijgt uiteindelijk een uitdrukking voor c in termen van a0,b0,u,v en t. Deze vier commando’s kun je vervangen door één enkel substitutie-commando. • Probeer het. • Kan het nog korter? (één commando, zonder substitutie) • Wat heeft je voorkeur, vier korte commando’s of één langere?
2.5.
Functie of formule gebruiken?
In hoofdstuk 1, paragraaf 1.4 heb je functies leren gebruiken. In dit hoofdstuk hebben we tot nu toe niet met functies gewerkt. Maar dat hadden we wel kunnen doen. De volgende serie opdrachten uit het voorbeeld had ook anders gekund. c = Sqrt[a^2 + b^2] a = a0 – u*t b = b0 – v*t D[c, t] (of via het palet ∂t c) opl = Solve[%==0, t] namelijk zo, met een functie: c = Sqrt[a^2 + b^2] a = a0 – u*t b = b0 – v*t fc[t_] = c fc’[t] opl = Solve[fc’[t]==0, t] Door de bovenste serie commando’s wordt c de naam van een formule, namelijk van:
(a0 − u t )2 + (b0 − v t )2 Mathematica weet nu niet dat a0, b0, u en v onbekende constanten zijn, terwijl t de enige variabele is. Dat weten wij wel, omdat we de opgave gelezen hebben, maar we hebben dat niet aan Mathematica verteld.
Volgens het tweede recept maken we bij de formule c ook nog een functie, zeg fc, waarin t de enige ‘echte’ variabele is. Merk op dat t in de rechterkant van de functiedefinitie niet letterlijk hoeft voor te komen. Het is genoeg als a en b een waarde hebben in c waar t een rol in speelt! 24
Opdracht 9. Definieer en gebruik een functie • Probeer het: definieer de functie fc van t zoals hierboven aangegeven. • Probeer daarna ook nog de volgende commando’s: fc[3] fc’[3] fc[x + 1] fc’[2*y + 1] • Naar welke variabele differentieert Mathematica en wat doet Mathematica met het argument 3, en met de formules x + 1 en 2*y + 1? • Begin de Mathematica sessie met een schone lei. Wat komt er uit fc’[t] als je de toewijzingen a = a0 – u*t en b = b0 – v*t pas invoert nadat je de definitie fc[t_] = c al gedaan hebt? Wat leer je van dit voorbeeld? Het handige van functies is, dat je er van alles in kunt stoppen. Ze zijn zo flexibel! Met een formule die c heet kun je dit soort geintjes niet uithalen. Bij een formule moet je bijvooreeld steeds expliciet aangeven naar welke variabele er gedifferentieerd moet worden (met D[ , ] of ). Een functie gebruik je dus in Mathematica: • als je eenmalig wilt vastleggen wat je variabele is (zodat je dit niet steeds hoeft aan te geven), • als je veel verschillende getallen of formules wilt substitueren in een uitdrukking, • als je wiskunde doet en met een functie wilt werken zoals je dat gewend bent. Opdracht 10. Functie of formule? Gegeven is de volgende functie: f : x → x 2 − 4 x − 1 • Bewijs met hulp van Mathematica dat de grafiek van deze functie symmetrisch is ten opzichte van de lijn x = 2, dat wil zeggen: bewijs dat f(2 + x) = f(2 – x) voor alle x. • Hoe heb je f(2+x) = f(2-x) naar Mathematica vertaald? Als een vergelijking, als een toekenning, of nog anders? • Lukt het ook als je begint met f als formule te definiëren, in plaats van als functie? (En zo ja, hoe bevalt die aanpak?)
2.6.
Oefeningen
Los de volgende problemen op met Mathematica. Vraag hulp als je de natuurkunde, scheikunde of de wiskunde van het vraagstuk niet begrijpt. Als je een extra voorbeeld wilt doorwerken kun je terecht in paragraaf 2.7. (eventueel in je eigen tijd). Doe de volgende opgaven tijdens het werkcollege, aangezien je er vermoedelijk hulp bij nodig hebt! Opdracht 11. Reactiekinetiek In een oplossing vindt een chemische reactie plaats, A → B + C. Als gevolg hiervan neemt de concentratie van stof A af. De concentratie [A] is dus een functie van de tijd. Stel, uit metingen blijkt: [A] = c e –k t met c = 1 mol / liter en k = 0.5 (per seconde). De snelheid van de reactie is recht evenredig met de afgeleide van [A] naar t. In dit eenvoudige geval geldt:
v=−
d [ A] dt
Na hoeveel seconden sinds het begin van de reactie (t=0) is de snelheid van de reactie gehalveerd?
25
Opdracht 12. Kogelstoten Een kogelstoter gooit een kogel weg: hij laat de kogel los op hoogte h, op afstand d met zijn hand buiten de werpring, met snelheid v en onder een hoek α. Zie onderstaande schets (figuur 2)
Figuur 2. Schematisch zijaanzicht van de baan van de kogel We gaan de baan van de kogel onderzoeken. a. Bepaal de positie van de kogel op tijdstip t, d.w.z. geef de hoogte y en de afgelegde horizontale afstand x, uitgedrukt als formules waarin de tijd voor komt. Je mag hierbij veronderstellen dat de kogel alleen onderworpen is aan de zwaartekracht en bijvoorbeeld geen luchtweerstand ondervindt. Dit houdt ondermeer in dat de horizontale component van de snelheid van de kogel in de lucht constant is en dat de verticale snelheid lineair in de tijd afneemt (afhankelijk van de valversnelling g). b. Welke wiskundige formule in x en y, waarin de tijd t niet meer voor komt, beschrijft de baan van de kogel in de lucht? c. Op welk tijdstip heeft de kogel zijn hoogste punt bereikt en hoe hoog is dat dan? d. Op welke afstand van de werpring ploft de kogel op de grond neer? e. De formule voor de afstand R van de worp kan geschreven worden als 2
v2 v2 v2 R=d+ sin(2α ) + sin(2α ) + 2h cos 2 α 2g g 2g Enkele waarden van parameters voor een getrainde kogelstoter: h=1,98 m, d=0,23 m, α=41o, v=12,5 m/s en g=9,81 m/s2. Wat is de afstand van de worp van deze kogelstoter? f. Als dezelfde kogelstoter uit de vorige onderdeel de kogel onder een hoek van 45o weggegooid had, was de worp dan korter, verder of even ver geweest? Wat verwacht je en wat komt er uit een berekening? g. Houd alle parameters constant, behalve de hoek α van weggooien. Anders gezegd, bekijk de afstand R van de worp als functie van de hoek α. Teken de grafiek van R als functie van α op het segment [0, π 2] . h. Stel dat je coach van een kogelstoter bent. Welk advies zou jij jouw atleet geven bij een worp in wedstrijdverband: let heel goed op de hoek van weggooien, of probeer zo hard mogelijk de kogel weg te gooien. Onderbouw je antwoord met een berekening.
2.7.
Voorbeeld 2: Een chemische berekening
Tot slot geven we nog een voorbeeld van een chemische berekening die niet in één commando is te vangen maar uit meerdere opdrachten bestaat. Het is niet erg als je de chemische details niet helemaal begrijpt; we willen alleen maar laten zien hoe je zo’n berekening aanpakt 26
Opdracht 13. Berekening van zuurgraad van een oplossing De zuurconstante Ka van azijnzuur HAc is 1.76 .10-5. We doen 1 mol HAc in een maatkolf en we vullen aan met water tot 1 liter. Gevraagd: de H+ concentratie van de oplossing en de pH-waarde. Voer onderstaande opdrachten daadwerkelijk uit. Aanpak: We vertellen Mathematica zo vlug mogelijk de vergelijking die moet worden opgelost. In deze vergelijking gaan we gegevens invullen, net zo lang tot we één vergelijking met één onbekende over hebben. We zorgen ervoor dat “H+” als enige onbekende overblijft. Dan vragen we Mathematica om de oplossing van de vergelijking en berekenen de pH-waarde. Oplossing: 1. We vertellen Mathematica de definitie van Ka voor dit specifieke geval: • Geef het volgende commando: vgl = Ka == Hplus * Acmin / HAc • Resultaat:
Ka ==
Acmin Hplus HAc
We hebben nu één vergelijking met vier onbekenden. vgl is de naam die we aan deze vergelijking hebben gegeven. Met behulp van deze naam kunnen we de vergelijking straks oplossen. Maar: één vergelijking met vier onbekenden heeft talloze oplossingen. We moeten Mathematica eerst nog wat meer gegevens geven. 2. We vertellen Mathematica dat in dit geval de concentratie [H+] gelijk is aan [Ac-] • Commando: Acmin = Hplus; Het commando eindigt met een puntkomma zodat er geen uitvoer op het scherm komt. Het resultaat zou immers toch maar hetzelfde zijn als de invoerregel al laat zien. 3. Vraag Mathematica hoe de vergelijking vgl er nu uitziet. • Commando: vgl • Resultaat:
Ka ==
Hplus 2 HAc
Je ziet dat de onbekende Acmin is verdwenen. In stap 2 hebben we Acmin gedefinieerd als gelijk aan Hplus. Mathematica vervangt daarom overal Acmin door Hplus, zodat er nu Hplus2 staat. 4. We vertellen Mathematica dat de concentratie HAc gelijk is aan de toegevoegde concentratie C0 minus de ontstane concentratie [Ac-] • Commando: HAc = C0 – Acmin; 5. Vraag Mathematica hoe de vergelijking vgl er nu uitziet. • Commando: vgl • Resultaat:
Ka ==
Hplus 2 C 0 − Hplus
Je ziet dat de onbekende Acmin niet opnieuw verschijnt. In stap 2 hebben we Acmin nu eenmaal gedefinieerd als gelijk aan Hplus. Mathematica vervangt daarom altijd Acmin door Hplus. De noemer wordt dus C0–Hplus. 27
6. Nu maken we de vergelijking die we straks gaan oplossen. We weten dat Ka = 1.76 .10-5, een we weten dat C0 = 1 mol per liter, dus: • Commando’s: Ka = 1.76*10^-5; C0 = 1; We laten de eenheid (mol per liter) weg, want daar kan Mathematica niets mee doen. Onthoud zelf in welke eenheden je rekent! Beide commando’s eindigen met een puntkomma zodat er geen uitvoer op het scherm komt. Het resultaat zou immers toch maar hetzelfde zijn als de invoerregel al laat zien. 7. Vraag Mathematica hoe de vergelijking vgl er nu uitziet. Zie stap 3 hierboven. Resultaat: een tweedegraads vergelijking met Hplus als enige onbekende. Deze vergelijking kan worden opgelost! 8. Vraag Mathematica om de oplossing. • Commando: Solve[vgl, Hplus ] • Resultaat: een verzameling van twee oplossingen. Slechts één van deze oplossingen is chemisch juist. Bedenk zelf welke oplossing de juiste is! In welke eenheid is dit antwoord uitgedrukt? 9. In voorbeeld 3 van hoofdstuk 1, “functieonderzoek” onder “nulpunten”, heb je geleerd hoe je één van de oplossingen kunt uitkiezen om ermee verder te werken. Geef deze oplossing de naam Hplus1. Gebruik het commando -Log[10, Hplus1] om de pH-waarde van de oplossing uit te rekenen. Je weet nu meteen hoe de logaritme met grondtal 10 in Mathematica is ingevoerd..
28
3. MATHEMATICA VAARDIGHEDEN De hoofdzaken van Mathematica beheers je inmiddels: je kent de voornaamste commando’s en je weet waar ze voor dienen (uit hoofdstuk 1) en je kent verschillende manieren om commando’s slim te combineren (hoofdstuk 2). In dit hoofdstuk gaan we dieper in op enkele commando’s die je al kent en breiden we het repertoire uit. Het zal gaan over het maken van grafieken, over het oplossen van vergelijkingen en over het gebruik van lijsten. Je zult zien hoe je deze drie technieken handig kunt combineren. We bespreken ook het vereenvoudigen van formules. Het verschil tussen exact en numeriek oplossen komt aan de orde. Ook gaan we in op de betrouwbaarheid van Mathematica en laten we zien wat je kunt doen als in een reële context onverhoopt het imaginaire getal i verschijnt.
3.1.
Grafieken combineren
Om twee grafieken te kunnen vergelijken is het nuttig om beiden weer te geven in één figuur. Hierbij willen we meestal verschillende kleuren of lijnstijlen gebruiken, om de grafieken te onderscheiden. Het volgende voorbeeld laat zien hoe dit werkt.
Voorbeeld: Stel we willen de functies x → x 2 en x → 1 x plotten in een enkele figuur. Een snelle methode is:
Opdracht 1. Teken twee grafieken in één figuur Gegeven zijn twee functies die we bekijken op het domein [-4, 4]: f : x 3 − ( x + 1) 2 1 g:x x +1 • Maak een grafiek van beide functies in één figuur, en bepaal daarmee het aantal snijpunten.
29
Voor eigen gebruik is bovenstaande methode genoeg. Als we de grafiek aan anderen willen tonen dan zullen we kleuren of andere opmaak willen gebruiken, om beide curven van elkaar te onderscheiden. Om dit te bereiken is de volgende werkwijze aan te bevelen.
De drie getallen bij RGBColor staan voor Rood, Groen en Blauw. De combinatie [1, 1, 1] levert wit op. De twee aparte grafieken krijgen elk een (fantasie-)naam. Nu gaan we deze grafieken combineren:
De plaats van het snijpunt is zo niet goed af te lezen. Je kunt de schaalverdeling op de vertikale aanpassen door het Show-commando te wijzigen, als volgt: Show[{Jan, Piet}, PlotRange->{ymin, ymax}]; •
Gebruik de PlotRange optie om het snijpunt f en g in opdracht 1 nauwkeuriger te kunnen aflezen. 30
Bij PlotStyle kun je kiezen uit de opties uit Tabel 1. Dashing is nuttig als je je verslag in zwart-wit wilt afdrukken. Tabel 1: diverse Plotstyle opties om krommen te onderscheiden optie PlotStyle→RGBColor[1, 0, 0] PlotStyle→GrayLevel[0.8] PlotStyle→Thickness[0.01] PlotStyle→Dashing[{0.01, 0.03}]
Opmerking resultaat rood, groen, blauw of gemengd kies 3 getallen tussen 0 en 1* kies getal tussen 0 en 1 grijstint (0=zwart, 1=wit) kies getal veel kleiner dan 1** lijndikte kies één of meer getallen, streepjespatroon veel kleiner dan 1 * Je kunt in het menu Input het item Color Selector kiezen, een geschikte kleur uitzoeken en dit als waarde in de optie PlotStyle plakken. ** gekozen getal = fractie van totale breedte van de grafiek Als je een verslag maakt van je berekening, dan is het netjes om alleen de laatste (gecombineerde) grafiek te laten zien. De twee andere grafieken kun je onzichtbaar maken door op de buitenste blauwe haak te dubbelklikken. Wis de commando’s niet! Je lezers willen wel zien hoe de uiteindelijke grafiek is ontstaan. • • • •
Hoeveel snijpunten hebben de grafieken van f en g? (vervolg van vorige opdracht) Wijzig de eerder gekozen PlotStyle, Kies er één die geschikt is voor zwart-wit afdrukken. Breng je resultaten (voor de functies f en g) in een vorm die geschikt is voor een verslag Bewaar je resultaten (kies uit menu File de optie Save). Deze oefening dient als basis voor opdrachten in hoofdstuk 4 waarbij Mathematica als tekstverwerker gebruikt zal worden.
Opdracht 2. Oefenen met de opties PlotRange en AspectRatio Gegeven zijn twee functies die we bekijken op het domein [-1, 1]: f ( x) = x 3 − x 2 , g ( x) = x 3 . • Teken de grafieken van deze twee functies in één figuur in verschillende kleuren.. • Onderzoek het effect van de volgende vier keuzes van PlotRange: PlotRange→All, PlotRange→{-0.5,0}, PlotRange→Automatic, en PlotRange→{-1,Automatic} • Wat is het effect in de figuur als je bij de optie AspectRatio kiest voor Automatic?
3.2.
Grafieken van functies in twee veranderlijken
Met een driedimensionale grafiek (kortweg 3D-grafiek genoemd) kun je formules bestuderen die twee 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 eigen smaak in te richten.
Opdracht 3. Teken de grafiek van een functie in twee veranderlijken Gegeven is de functie f met het functievoorschrift f ( x, y ) = (1 − sin x ) ( 2 − cos ( 2 y ) ) . We bekijken deze functie op het domein [-4, 4] x [-2,2], d.w.z., voor x tussen -4 en 4, en voor y tussen -2 en 2..
31
•
Voer de formule (1 − sin x ) ( 2 − cos ( 2 y ) ) in.
• •
Maak de grafiek over het gegeven domein. Kloppen de afmetingen van het grondvlak met de ingevoerde schaal?
Net als bij 2D-grafieken kun je 3D-grafieken combineren met het commando Show en kun je (achteraf) de verticale schaal aanpassen met de optie PlotRange.
Opdracht 4. Combineren van 3D-grafieken Hier is nog een formule in twee onbekenden: ( 2 + sin x ) (1 + cos ( 2 y ) ) • • •
Maak de grafiek hiervan, voor x tussen -4 en 4, en voor y tussen -2 en 2. Combineer deze grafiek met de grafiek uit de vorige opdracht in één figuur. Teken de gecombineerde figuur met een aangepaste schaal: laat deze schaal lopen van 0 tot 4.
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. De standaardwaarde is:
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. Je kunt in het menu Input het item 3D ViewPoint Selector kiezen, handmatig een geschikt gezichtspunt uitzoeken en dit als optie in een incompleet Plot3D commando plakken (zie onderstaande schermafdruk).
Opdracht 5. ViewPoint Teken nogmaals de laatste grafiek van de vorige opdracht, maar nu meer met een aanblik van bovenaf.
32
3.3.
Werken met lijsten
We weten al dat in Mathematica een lijst niets meer en minder is dan een rijtje van objecten geplaatst tussen accolades. Bijvoorbeeld: {Sin[x], Cos[x], Tan[x]} is een lijst van trigonometrische formules. 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.
De algemene vorm van de opdracht is
Table[ uitdrukking, iterator ] waarbij de iterator de manier vastlegt waarop lijstelementen gemaakt worden. De meest algemene vorm van een iterator is {var , min , max , stapgrootte } Dan wordt de gegeven uitdrukking herhaalde malen geëvalueerd, startend met var = min en eindigend bij var = max , waarbij var in elke stap met stapgrootte opgehoogd wordt. De resultaten van de evaluaties worden in een lijst geplaatst. Een lijst is nuttig als je gegevens overzichtelijk wilt bewaren en gebruiken, of als je alle elementen uit een lijst via eenzelfde recept wilt bewerken.
Hierboven worden achtereenvolgens het eerste, tweede, derde,... element uit de lijst gehaald en deze worden opgeteld (want de teller k loopt van 1 tot 10). Om alleen het 5-de element uit bovenstaande lijst van kwadraten te halen, kun je intoetsen
Als je negatieve indices gebruikt dan wordt neerwaarts geteld van rechts naar links:
Opdracht 6. Lijsten maken (i) Maak een lijst van de eerste 20 oneven positive getallen (d.w.z, 1, 3, 5, .., 39)
(ii) Selecteer hieruit de priemgetallen (hint: Select en PrimeQ zijn nuttige commando's) Allerlei operaties kun je loslaten op lijsten om weer nieuwe lijsten te maken, die al dan niet dezelfde vorm hebben. Dit zul je in praktijk en zeker bij gebruik van Mathematica als programmeertaal veelvuldig gebuiken. Vandaar dat we er hier aandacht voor vragen. Een paar voorbeelden van lijstoperaties: 33
Herrangschikking
Combinatie
Vormverandering
34
Met Partition splits je een lijst in meerdere stukken en met Flatten sla je een geneste lijststructuur tot een enkelvoudige lijst plat, d.w.z. haal je alle accolades met uitzondering van de buitenste twee weg. Met het commando ListPlot kun je lijsten van getallen en lijsten van puntenparen grafisch weergeven.
Door een enkele optie toe te voegen kun je de punten in de grafiek beter zichtbaar maken:
35
Mathematica is in staat om precies dezelfde berekening op alle lijstelementen los te laten. Een paar voorbeelden maken dit duidelijk:
Mathematica weet dat bovenstaande kan doordat de Sqrt functie en het commando N de eigenschap Listable hebben. Een zelfgemaakte procedure heeft deze eigenschap niet vanzelf. In zo’n geval moet je de procedure expliciet deze eigenschap geven of de opdracht via Map op een lijst loslaten. Onderstaand voorbeeld illustreert de laatste mogelijkheid.
Map[ commando, lijst] past het commando toe op elk element van lijst. 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}: 36
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 Mathematica doe je dit met het commando Apply.
In het algemeen ziet een expressie er intern in Mathematica altijd uit als Kop[a] Apply[ Naam, à] vervangt de Kop door de Naam.
Opdracht 7. Manipuleren van veeltermvergelijkingen (optioneel) (i) Schrijf een Mathematica procedure die een vergelijking herschrijft in de vorm vergelijking == 0 en dan alleen het linkerlid teruggeeft. Bijvoorbeeld, x 2 = y − 2 moet de veelterm 2 + x 2 − y opleveren. (ii) Gebruik deze procedure om het stelsel
{x
2
= y − 2, x + y 2 + z = 0, x − z = y + 2}
te associëren met de volgende veeltermverzameling 2 + x 2 − y, x + y 2 + z , −2 + x − y − z} .
(iii)Gebruik het commando GroebnerBasis om een stelsel veeltermen te vinden dat in bepaalde opzichten simpeler is en dezelfde nulpunten heeft als de in (ii) genoemde veeltermverzameling. In het bijzonder, als je een oplossing (x, y, z) van het oorspronkelijke stelsel vergelijkingen hebt, van welke veelterm is z dan een nulpunt?
3.4.
Formules vereenvoudigen
Het vereenvoudigen van uitdrukkingen in Mathematica is een tak van sport die je alleen met vallen en opstaan onder de knie krijgt. En ook wanneer je later meer ervaring opgedaan hebt lijkt het soms meer op een puzzel, dan op een systematische probleemaanpak. Soms kun je pas, ook al ben je nog zo'n ervaren Mathematica gebruiker, na enig uitproberen de ideale simplificatie-route aangeven. Daarom moet je je ook telkens weer afvragen wat het handigst is: formules te manipuleren met pen en papier, enkel en alleen met Mathematica of in een mengvorm. We zetten hier de belangrijkste vereenvoudigingscommando's op een rijtje en maken hierbij gemakshalve het onderscheid tussen twee soorten formules: (1) veeltermen en rationale uitdrukkingen. (2) wiskundige functies. 37
3.4.1. Veeltermen en rationale uitdrukkingen We bekijken de volgende twee veeltermen p = 3x 3 + 3 x 2 + x + 1 en q = 3x 4 − 2 x 2 − 1 .
Natuurlijk kunnen we de som en het product uitrekenen. Hieronder staat het product:
Een tikkeltje teleurstellend: Mathematica voert de berekening pas uit na een expliciet verzoek om de haakjes weg te werken uit:
De omgekeerde bewerking van uitwerking is ontbinding in factoren.
Ook deling gebeurt niet volautomatisch:
Een eenvoudiger resultaat krijg je met Simplify:
Opdracht 8. Samen en apart nemen van termen 1 x + en pas op het resultaat de x x +1 opdracht Apart toe. Breng aan de hand van dit voorbeeld onder woorden wat de twee commando's doen en controleer je antwoord m.b.v. het hulpsysteem.
Laat het commando Together los op de rationale uitdrukking
Opdracht 9. Vereenvoudigen van veeltermen en rationale uitdrukkingen x 4 + x3 − 4 x 2 − 4 x Beschouw de rationale uitdrukking 4 3 2 . Zet deze uitdrukking om in x +x −x −x ( x − 2 )( x + 2 ) a) ( x − 1)( x + 1) 3 3 b) 1 − + 2( x − 1) 2( x + 1) c)
x2 − 4 x2 − 1
3.4.2. Wiskundige functies Het commando Simplify past allerlei rekenregels voor wiskundige functies toe, net zolang totdat Mathematica van mening is dat het resultaat in de meest eenvoudige gedaante is. Bijvoorbeeld worden bekende trigonometrische identiteiten gebruikt. 38
Omgekeerd, werkt Expand de formule sin(2x) niet uit; hiervoor bestaat TrigExpand.
Behalve het algemene vereenvoudigingscommando Simplify kun je ook het meer op trigonometrische formules gerichte TrigReduce gebruiken.
Soms denk je ten onrechte dat een verenvoudiging simpel is. Een voorbeeld:
Mathematica vereenvoudigt dit terecht niet verder naar p x want in het algemeen is dit niet waar. Neem bijvoorbeeld x = -1. Je kunt dit oplossen door veronderstellingen toe te voegen.
Als je zeker van je zaak bent of het risico van een niet altijd geldige vereenvoudiging voor lief neemt, dan kun je simplificatie forceren met PowerExpand.
Nog een voorbeeld van PowerExpand:
Soms werken de vereenvoudigingsopdrachten niet naar wens en moet je een list verzinnen. Bijvoorbeeld, door de exponentiële afbeelding op het vorige resultaat toe te passen en dan weer de logaritme te nemen krijg je de oorspronkelijke formule terug. 39
Als Simplify niet werkt bij functies, kun je altijd nog het krachtigere FullSimplify gebruiken. Een eenvoudig voorbeeld:
Dit is een andere manier van opschrijven van n!
Opdracht 10. Vereenvoudigen van formules Vereenvoudig de volgende uitdrukkingen (desnoods door veronderstellingen over variabelen te introduceren) a) cosh 2 x − sinh 2 x b) cos x cos y − sin x sin y c) 16cos5 x − 20cos3 x + 5cos x d)
tan 3 x − 3tan x 3tan 2 x − 1
e)
ln(exp( x))
f)
3.5.
x2 y
Reëel probleem, reële oplossingen?
In het VWO heb je diverse soorten getallen leren kennen: natuurlijke getallen, gehele getallen, rationale en reële getallen. Al deze getallen zijn af te beelden op een getallenlijn die loopt van min oneindig naar plus oneindig. Zoals je weet is het kwadraat van al deze getallen positief. Wiskundigen hebben daarom nog een volgende soort getallen uitgevonden, de “imaginaire getallen”. Deze getallen behoren niet tot de reële getallen en hebben dan ook geen plaats op een gewone (reële) getallenlijn. Imaginaire getallen worden genoteerd als veelvouden van het bijzondere getal i dat gedefinieerd is als − 1 . Een reëel getal en een imaginair getal kun je bij elkaar optellen. Het resultaat heet een ‘complex getal’, dus 3 + 5 i is een complex getal. Meer hierover leer je bij wiskunde.
40
Mathematica gebruikt bij het oplossen van een vergelijking methoden die zo algemeen zijn, dat ze ook nog kloppen voor complexe getallen. Dit heeft allerlei voordelen, maar voor beginners heeft het ook een nadeel. Als je een ‘reële vraag’ stelt, krijg je van Mathematica regelmatig een ‘complex’ antwoord! Hieronder staat een voorbeeld.
1 en de horizontale as. Dit cosh( x) is het ingekleurde gebied in onderstaand diagram (FilledPlot komt uit de binnengehaalde Graphics` context). We berekenen de oppervlakte van het vlakdeel tussen de grafiek van y =
∞
Met andere woorden, we berekenen de integraal
1
∫ cosh( x)dx .
−∞
Helaas! Mathematica komt met een antwoord waarin het complexe getal i staat. Een decimale benadering suggereert wel een reëel antwoord:
Het imaginaire deel is kennelijk zo klein dat het als 0. in het antwoord staat. Kleine getallen dicht bij 0 kun je wegpoetsen m.b.v. het commando Chop:
Even goed kijken naar het antwoord, brengt je misschien op het idee dat het exacte antwoord wel eens gelijk aan π kan zijn. Dit kun je met Mathematica ook hard maken. Een beproefd recept is als volgt: Test of het schijnbaar complex getal reëel is met één van de volgende commando’s2: Simplify[getal ∈ Reals] FullSimplify[getal ∈ Reals] Het “element van” symbool, ∈ vind je op het “BasicInput” palet. Probeer eerst Simplify en pas als dit niet lukt FullSimplify. Bij gecompliceerde expressies kan FullSimplify veel tijd kosten.
2
41
In ons voorbeeld:
Als het resultaat True verschijnt bij één van deze commando’s, weet je zeker dat je oplossing reëel is. Als False verschijnt weet je zeker dat je oplossing niet reëel is! In alle andere gevallen weet je nog niets. Als je weet dat je resultaat reëel is, dan kun je dit proberen om te zetten in een vorm zonder i met hulp van één van de volgende commando’s. ComplexExpand[getal] Simplify[Re[ComplexExpand[getal]]] FullSimplify[Re[ComplexExpand[getal]]]
In ons voorbeeld werkt het eerste commando al:
Vooruitlopend op een volgende paragraaf, merken we op dat de introductie van een parameter voor een constante, d.w.z. het veralgemeniseren van het probleem, in dit voorbeeld ook werkt:
Opdracht 11. Bepaal het snijpunt van een parabool en hyperbool • Hoeveel oplossingen heeft de volgende vergelijking? 1 3 − ( x + 1) 2 = x +1 • Zijn de oplossingen reëel? (Hint: gebruik je resultaten opdracht 1 om deze vraag te beantwoorden en bedenk dat deze vergelijking de snijpunten van twee grafieken van bekende soort vastlegt) • Los bovenstaande vergelijking op met Mathematica’s Solve commando. Wat valt je op? • Noem de diverse oplossingen x1, x2,… om er straks mee verder te kunnen werken. • Gebruik N[%] en NSolve om numerieke benaderingen van de oplossingen te krijgen. Wat is nu je conclusie? Welk commando bevalt je het beste? • Probeer ook eens exacte reële oplossingen te vinden.
3.6.
Hoe betrouwbaar is Mathematica?
Mathematica is een computerprogramma en dus geldt dat je net zo bedacht moet zijn op fouten als in andere softwares. Vooral als er numerieke berekeningen gedaan worden kunnen er wat lastig te begrijpen situaties voordoen. Je kunt verrast worden door het verschil tussen 42
en
Het eerst antwoord is evident niet wat je verwacht. Maar de oorzaak is geen ‘echte’ fout van Mathematica maar een probleem dat aan numeriek rekenen kleeft, nl. nauwkeurigheid. Als je het aantal cijfers waarmee gerekend wordt ophoogt, dan zie je hoe Mathematica de eerste rekensom uitvoert en hoe het gegeven antwoord tot stand komt.
Maar ook bij exact rekenen moet je op je hoede blijven en het motto “gebruik je verstand” hanteren. Mathematica probeert een probleem zo algemeen mogelijk op te lossen zonder oog te hebben voor speciale gevallen. Zonder morren lost Mathematica de vergelijking ( sin 2 (a) + cos 2 (a) − b ) x = 1 op.
Het speciale geval dat b = 1 wordt niet genoemd.
43
Aan de andere kant is Mathematica soms erg strikt in de leer, met name wanneer het gaat om toepassen van vereenvoudigingen die strikt genomen niet altijd correct zijn. Een voorbeeld is de vereenvoudiging ln(e x ) = x , die alleen maar correct is als het argument van het complexe getal x tussen –π en π ligt. Door aan het Simplify commando een veronderstelling zoals x ∈ Real toe te voegen lukt de vereenvoudiging
wel. We kunnen het niet vaak genoeg herhalen: gebruik je verstand bij omgang met een computeralgebra pakket. Een leerzaam voorbeeld is de integraal π
sin t
∫π 1 + sin
−
40
t
dt .
Met enig nadenken en zonder rekenen (ja?) kun je tot de conclusie komen dat het antwoord 0 moet zijn. Als je misplaatst lui bent en Mathematica het antwoord laat uitrekenen kun je heel lang hierop wachten.
3.7.
Van speciaal naar algemeen
Mathematica is software voor symbolische algebra, dat wil zeggen: Mathematica kan goed rekenen met onbekenden. De beste strategie is dus meestal: algemeen beginnen en alleen als het niet anders kan ‘terugschakelen’ naar rekenen met getallen. Toch kan het soms gebeuren dat je al getallen hebt ingevuld, bijvoorbeeld omdat je niet in de meest algemene oplossing geïnteresseerd bent. Als het dan misgaat, loont het de moeite om te proberen de getallen door onbekenden te vervangen. Een voorbeeld daarvan volgt hieronder. Opdracht 12. Bereken een bepaalde integraal 2π 1 • Bereken de bepaalde integraal ∫ dx 0 3 − sin 2 x • Het vorige resultaat is een schijnbaar complex antwoord. Probeer met de eerder besproken methode een exact antwoord te vinden. • Vervang in de integrand het getal 3 door een parameter a. Bereken de integraal en substitueer a → 3 in het antwoord.
Hierboven volgde je een strategie die tegengesteld is aan die meestal gebruikt en ook weer tegenkomt in de volgende paragraaf. Daarin beginnen we (min of meer) algemeen en op het moment dat het niet luk gaan we getallen invullen. Zoals je ziet, blijkt de omgekeerde strategie soms ook goed te werken. Als je niet helemaal algemeen begonnen bent en je loopt vast, dan loont het soms om getallen door onbekenden te vervangen. Vooral bij niet-lineaire differentiaalvergelijkingen blijkt dit nogal eens voordelig.
3.8.
Van algemeen naar speciaal
Als het oplossen van een vraagstuk niet (meteen) lukt, dan zijn er twee algemene strategieën die je kunt gebruiken om uit de impasse te komen: het vraagstuk concretiseren, of juist veralgemeniseren. We hebben tot nu toe de ‘algemene aanpak’ gepropageerd (zie bijvoorbeeld paragraaf 2.1): éérst het vraagstuk zo algemeen mogelijk oplossen, dus met zoveel mogelijk onbekenden erin, en pas op het allerlaatst getallen invullen. Deze aanpak werkt vaak goed, maar niet altijd! Hieronder zie je een voorbeeld waar het misgaat.
44
Opdracht 13. Los een botsingsprobleem op Een gewicht, A, slingert heen en weer aan een koord, vlak boven een tafel. Een zware bal, B, komt aanrollen over deze tafel met een constante snelheid v. Beide voorwerpen bewegen langs de x-as van ons coördinatenstelsel.
De positie van gewicht A op de x-as wordt gegeven door een sinusfunctie:
x A (t ) = 2 sin t
De positie van bal B wordt gegeven door een lineaire functie:
x B (t ) = −4 + v t
Gevraagd: het tijdstip waar zij op elkaar botsen, dat wil zeggen de waarde van t waarvoor geldt 2 sin t = −4 + v t . Dit tijdstip hangt af van de onbekende constante, v. • Probeer de vraag te beantwoorden met hulp van Solve. Waarom lukt het niet? • Kun je NSolve of FindRoot hier gebruiken? We zouden het liefst een formule willen vinden voor het antwoord, waar v als onbekende in voorkomt. We zouden dan het vraagstuk in één keer hebben opgelost. In die formule kunnen we dan achteraf net zoveel getallen voor v invullen als we willen. Maar dat feest gaat nu niet door, want Solve weigert dienst: deze vergelijking is te moeilijk voor Solve! De andere commando’s die we kennen, NSolve en FindRoot, werken niet als de op te lossen vergelijking nog extra onbekenden bevat. Deze commando’s kunnen geen formule als resultaat geven, ze werken alleen als er een concreet getal uit komt. We moeten dus overstappen op een andere strategie. •
Los het vraagstuk eerst eens op voor v = 3. Maak een grafiek om de plaats van botsing bij benadering te bepalen (zie paragraaf 3.1). Gebruik dan FindRoot om het antwoord in 6 cijfers nauwkeurig te bepalen (zie paragraaf 1.4).
Hierboven volgde je de strategie ‘van algemeen naar speciaal’: als een algemene oplossing (met onbekenden erin) niet lukt, dan doe je een stapje terug en probeer je een speciale oplossing voor één van alle mogelijke situaties. Dat lukt bijna altijd. Maar nu hebben we nog geen inzicht in de vraag hoe het botsingstijdstip afhangt van de snelheid v, en dat was wel de bedoeling van de opgave. Nu het niet lukt om een formule te vinden, zouden we toch minstens een grafiek willen maken van tbotsing uitgezet tegen v. Het volgende recept laat zien hoe je dit met hulp van lijsten voor elkaar kunt krijgen.
45
Voorbeeld: Stel we willen de vergelijking cos x = a − x / 2 oplossen en de oplossing weergeven in een grafiek, als functie van de onbekende constante a, voor a tussen –5 en 5 dan kunnen we dit als volgt aanpakken: 1. Maak een lijst met waarden van de onbekende constante, waarvoor je de vergelijking wilt oplossen. Kies deze waarden goed gespreid over het gewenste domein van a. Bijvoorbeeld: L = {-5, -3, -1, 1, 3, 5} of: L = Table[-5+0.1*i, {i, 0, 100}] 2. Maak een lijst met de vergelijkingen die je wilt oplossen, waarin a telkens door een ander getal wordt vervangen. Dit lukt met het Table commando (zie paragraaf 1.8). Bijvoorbeeld, als er 101 waarden zijn die je wilt uitproberen, dan lukt het zo: vgl = Cos[x] == a – x / 2; L2 = Table[(vgl /. a – > L[[i]]), {i, 1, 101}] 3. Los al deze vergelijkingen in één keer op met FindRoot of NSolve. Als je FindRoot gebruikt, bepaal dan eerst (grafisch) in welke buurt de oplossing gezocht moeten worden. L3 = Table[ x /. FindRoot[Evaluate[L2[[i]]], {x, gok}, MaxIterations - > 1000], {i, 1, 101}] Hier is gok een getal dat aangeeft in welke buurt de oplossing gezocht moet worden. We zetten x /. vóór het FindRoot commando om getallen te krijgen, in plaats van substitutieregels. De betekenis van Evaluate en MaxIterations kun je opzoeken in de Helpfunctie. 4. Nu kunnen we het resultaat in een grafiek zetten. Eerst maken we een lijst met punten (a, x) L4 = Table[ {L[[i]], L3[[i]]}, {i, 1, 101}] ListPlot[L4, PlotJoined → True]
•
Gebruik bovenstaand recept om het vraagstuk over het gewicht en de bal op te lossen voor v tussen 0.8 en 8. Kies genoeg tussenpunten om een min of meer ‘gladde’ grafiek te krijgen.
Je ziet, als het niet lukt om een vraagstuk algemeen op te lossen dan helpt het soms om concrete getallen in te vullen. Door de ‘domme kracht’ van de computer te gebruiken kunnen we de berekening eindeloos vaak herhalen zonder dat dit al te veel moeite kost. Hierdoor krijgen we toch inzicht in de samenhang van het botsingstijdstip en de snelheid van de bal.
3.9.
Nieuwe tekens en commando’s
Nieuwe tekens: ∈
‘element van’ een verzameling. Gebruikt in een commando zoals FullSimplify[% ∈ Reals] om te testen of een getal tot de reële getallen behoort
[[ ]]
Dubbele rechte haken worden als volgt gebruikt: L[[i]] is het element met volgnummer i uit lijst L.
Nieuwe opties: AspectRatio -> Optie in het Plot en Show commando, waarmee de verhouding van horizontale en verticale lengte in een grafiek gespecificeerd wordt.
46
PlotPoints -> kan worden.
Optie in het Plot commando, waarmee het aantal punten in een grafiek beïnvloed
PlotStyle -> Optie in het Plot commando, waarmee de lijnstijl van een grafiek wordt bepaald. Je kunt kiezen uit o.a. RGBColor, GrayLevel, Thickness en Dashing stijlcommando’s. PlotRange -> {ymin, ymax} Optie in het Plot of het Show commando. Laat de schaalverdeling voor de vertikale as lopen van ymin tot ymax. ViewPoint -> {x, y, z} gezichtspunt op de 3D-grafiek vast.
Optie in het Plot3D of het Show commando. Legt het
Nieuwe commando’s: Apart[expr]
Schrijft een rationale uitdrukking als een som van termen met minimale noemers.
Apply[Kop, expr] Vervangt de huidige kop van de uitdrukking (in interne datastructuur) door Kop. Chop[expr]
Vervangt floating-point getallen dicht bij 0 in exact het gehele getal 0.
ComplexExpand[expr] Schrijft de complexe formule expr in de standaardvorm a + b i. Hier heet a het reële deel en b het imaginaire deel van expr. Er wordt verondersteld dat alle onbekenden in expr reële getallen voorstellen. Expand[expr]
Werkt producten en machten met positieve gehele exponenten in expr uit.
FullSimplify[expr] Vereenvoudigt de formule expr. Krachtige variant van Simplify. Kan meer, maar kost ook meer tijd, soms zéér veel meer tijd. ListPlot[l]
Tekent de grafiek van de lijst l van punten in het vlak.
Map[f, expr]
Pas het commando f toe op alle componenten van de uitdrukking.
NSolve[vgl, var] veeltermvergelijking vgl.
Geeft een lijst numerieke oplossingen voor de variabele var in de
Plot3D[f, {x, xmin, xmax}, {y, ymin, ymax}] functie van x tussen xmin en xmax en van y tussen ymin en ymax. PolarPlot[r, {t, tmin, tmax}] tussen tmin en tmax in poolcoördinaten. PowerExpand[expr]
Tekent de grafiek van f als een
Tekent de grafiek van r als een functie van t
Werkt alle machten van producten en machten in expr uit.
Re[getal] Geeft het reële deel van getal. Formules met onbekenden worden ongewijzigd teruggegeven. (Gebruik in dat geval ComplexExpand) Show[{A, B, C}]
Toont de eerder gemaakte grafieken A, B en C in een enkele figuur. 47
TrigExpand[expr]
Werkt trigonometrische uitdrukkingen in expr uit.
TrigReduce[expr]
Herschrijft producten en machten van trigonometrische functies in expr.
Together[expr]
Brengt alles in expr onder één noemer.
48
4. MATHEMATICA ALS TEKSTVERWERKER Als je met Mathematica werkt ontstaat er een tekst, die je kunt bewaren (in menu File met het item Save) om hem later weer op te roepen. Zo’n tekst heet een Mathematica notebook. Je kunt een notebook gebruiken om resultaten van berekeningen netjes aan anderen te presenteren. Of je kunt notebooks lezen die door anderen zijn gemaakt, om kennis te nemen van hun resultaten. In dit hoofdstuk leer je: • te werken met een notebook dat al gegevens bevat. Het notebook is bijvoorbeeld door iemand anders gemaakt en jij wilt het lezen of wijzigen. Tijdens cursussen zul je regelmatig werken met notebooks die door docenten zijn gemaakt. •
zelf een notebook te maken. Doorgaans maak je eerst een berekening in Mathematica. Pas als de berekening af is, ga je toelichting, nette indeling in paragrafen en andere verfraaiingen toevoegen. Deze dienen om de lezer te helpen je berekening te begrijpen.
4.1.
Een Mathematica notebook ophalen van het Web
Mathematica notebooks voor verschillende vakken worden veelal aangeboden via de onderwijs-website. Zo haal je een notebook dan binnen: • Start een webbrowser, bijvoorbeeld Mozilla • Geef een webadres op waar notebooks verzameld zijn, bijvoorbeeld: www.science.uva.nl/onderwijs/ict/mathematica • Houd de Shift-toets ingedrukt en klik met de linkermuisknop op de hyperlink naar een bestand dat je wilt ophalen (bijvoorbeeld.: Voorbeeld notebook). Je vraagt hiermee de webbrowser het document op te halen.3 • Een file browser verschijnt met een suggestie voor de bestandnaam. Kies hiermee een geschikte lokatie (diskette of eigen directory op de studentenserver) en een geschikte bestandnaam om het document op te slaan (verstandig is de extensie .nb aan te houden). • Sluit de webbrowser. Opdracht 1. Haal notebooks op Gebruik in deze opdracht het webadres www.science.uva.nl/onderwijs/ict/mathematica Haal de Mathematica handleiding op. Bewaar deze op een diskette of in een eigen directory op de studentenserver. Haal het Voorbeeld notebook op.
4.2.
Werken met een door anderen gemaakt notebook
Opdracht 2. Bekijk het voorbeeld-notebook Start Mathematica en open het in opdracht 1 opgehaalde Voorbeeld notebook.
3 Zonder de Shift toets krijg je de mogelijkheid om het notebook meteen te openen. Hierna zou je het alsnog moeten bewaren op een locatie waar je de nodige rechten hebt. Om verwarring te voorkomen doen we dit liever direct!
49
Hoe klein dit notebook ook is, toch is er al een nette indeling gemaakt in hoofdstukken, paragrafen, tekstgebieden, in- en uitvoergebieden, grafieken, etc. In Mathematica spreken we dan van secties, subsecties, tekstcellen, inputcellen, outputcellen, enzovoort.
Figuur 1. Voorbeeld van een Mathematica notebook
Door op de rechte haken aan de rechterkant te dubbelklikken open en sluit je secties en subsecties. Probeer dit uit om een betere indruk van het document te krijgen en gewend te raken aan het werken met open en dicht te klappen onderdelen. Je zult vast een tekst zien als in bovenstaande figuur 1. Dubbelklik op de buitenste haak. In menu Cell is een submenu Cell Grouping met de opties Open All Subgroups en Close All Subgroups. Zoek uit hoe deze opties werken. Open alle cellen van het notebook. Klap nu achtereenvolgens de subsectie Opdracht, de sectie Formule van Leibniz (1671) en de sectie Andere formules dicht. Je hebt dan een net notebook gekregen om weer te bewaren. Hoe had dit sneller gekund?
In bovenstaande figuur 1 zie je al dat het voorbeeld-noteboek uit verschillende gebieden bestaat nl. voor tekst (titels en ‘gewone’ teksten met verschillende lettertypes), formules en in- en uitvoer van Mathematica opdrachten. Dit alles duidt op mogelijkheden van tekstverwerking. Opdracht 3. Speel met de presentatie van een notebook • Onderaan in het menu Format kun je werkbalken kiezen: selecteer Show Ruler en Show Toolbar. Je krijgt een lineaal dat je van een tekstverwerkingsprogramma herkent. De werkbalk is
50
•
•
• •
klein: handige knopjes voor uitlijning van tekst (links, gecentreerd, rechts, uitgelijnd) en een rolmenu van celtypes. Hiermee kun je zien in wat voor type cel de cursor staat. Zoek de eerste invoercel in het notebook op, zet de cursor in deze cel en druk op Shift-Enter of op de Enter-toets rechts op het toetsenbord naast het numerieke gedeelte. De opdracht wordt uitgevoerd (opstarten duurt even; de balk aan de rechterkant van de cel is tijdens het rekenen verdikt) en er verschijnen regelnummers bij in- en uitvoerregels. Misschien vind je de letters en formules op het scherm te klein. Selecteer dan in menu Format in het submenu Screen Style Environment de optie Presentation. Alles wordt dan naar verhouding uitvergroot. Is dit nog niet genoeg, dan kun je in menu Format in submenu Magnification een uitvergroting naar wens kiezen. Een drastische verandering van presentatie van het notebook treedt op als je de stijl van het docu-ment wijzigt. Verander via het submenu Style Sheet in het menu Format de Default stijl in Demo. Kijk ook eens naar ander stijlen en keer uiteindelijk terug naar de Default stijl. Tot slot, haal alle uitvoercellen weg via het menu Kernel en bewaar het document in deze toestand onder dezelfde naam.
In de vorige opdracht is al een groot verschil tussen een Mathematica notebook en een gewoon tekstdocument aan het licht gekomen: een notebook kan commando’s bevatten, die je al dan niet na wijziging kunt laten uitvoeren. Een commando in een invoercel activeren doe je zo: • Klik in de invoercel zodat de cursor daar knippert – het doet er niet toe waar precies, als het maar binnen de invoercel is. • Druk op Shift-Enter. (Of gebruik de Enter-toets van het numerieke toetsenblok).
Elke geactiveerde invoercel krijgt een In-nummer. Bij de invoercel verschijnt een uitvoercel met Mathematica’s antwoord op je opdracht. Dit heb je al vaak gedaan! Opdracht 4. Reken in een bestaand notebook • Open het notebook dat je in opdracht 3 hebt achtergelaten. • Activeer achtereenvolgens de eerste vijf Mathematica commando’s die je ziet. Begin bij de bovenste! (Waarom?) • Laat alle commando’s in het notebook op volgorde uitvoeren door in het menu Kernel in het submenu Evaluation de optie Evaluate Notebook te kiezen. We noemen dit het doorrekenen van een notebook.
Een goed notebook toont na Evaluate Notebook precies de resultaten zoals jij die aan de lezer wilt laten zien. Controleer dit, voordat je een notebook publiceert (op het WWW) of inlevert. Opdracht 5. Maak een opdracht middenin een notebook Open zo nodig het voorbeeld-notebook en voer de opdrachten in de subsectie Opdracht in de sectie Formule van Leibniz uit. Merk op dat de nieuwe cellen die je maakt automatisch worden gegroepeerd onder de subsectie getiteld Opgave. (Dit komt ‘automatisch groeperen’ actief is; zie het Cell menu).
4.3.
Zelf een notebook vormgeven
Doorgaans heb je je berekening al af, als je erover gaat denken om je werk aan anderen door te geven. Achteraf ga je dan de notebook indelen in secties en toelichtende tekst toevoegen, om te zorgen dat je lezers begrijpen wat je gedaan hebt. Hieronder staat hoe je dit kunt doen. 51
Een notebook indelen in secties doe je zo: • Kies uit menu Cell de optie Cell grouping en vervolgens Automatic. • Gebruik de pijltjestoetsen ↑↓ tot je de horizontale streep ziet op de plaats waar een nieuwe sectietitel moet komen. • Kies uit het menu Format de optie Style en vervolgens Section, Subsection of Subsubsection (hoofdstuk, paragraaf of sub-paragraaf !) • Typ de titel voor de nieuwe sectie. Resultaat: alle cellen die beneden de nieuwe sectietitel staan behoren nu automatisch tot de nieuw gemaakte sectie. Je kunt deze sectie nu sluiten en vervolgens weer openen. Binnen een sectie kun je subsecties maken, enzovoorts. Een sectie eindigt pas als je hem onderbreekt door een nieuwe sectie-titel tussen te voegen. Zo ook eindigt een subsectie pas als je een nieuwe subsectie-titel tussenvoegt. Opdracht 6. Deel een notebook in secties in In hoofdstuk 3 heb je een serie opgaven beantwoord die alle te maken hadden met de functies f : x → (x − a )2 − 1
en g : x →
−1 a+x
of met de vergelijking f = g, waarbij soms a gelijk was aan 2. We gaan
deze serie berekeningen omwerken tot een goed vormgegeven notebook. • Zoek je berekeningen van toen bij elkaar. Open het (de) nodige notebook(s). • Indien nodig: zet alles in een goede, logische volgorde met behulp van Cut, Copy en Paste. • Deel het notebook op gepaste wijze in secties in: • Maak helemaal bovenaan een passende titel voor de hele notebook (Style: Title) en voeg auteursnamen en een korte samenvatting van het notebook toe. Het is netjes om elke sectie te beginnen met een paar zinnen waarin je uitlegt wat je zult gaan doen, en eventueel hoe of waarom je het doet. Ook tussen de In- en uitvoercellen zul je soms wat uitleg moeten toevoegen om je werk begrijpelijk te maken. Aan het einde van een sectie wil je misschien een conclusie noteren. Voor dit alles maak je tekstcellen. Deze verschillen qua opmaak van in- en van uitvoercellen. Zo maak je een tekstcel: • Gebruik de pijltjestoetsen ↑↓ tot je de horizontale streep ziet op de plaats waar de nieuwe tekstcel moet komen • Kies uit menu Format de optie Style en vervolgens Text • Typ de gewenste tekst. Opdracht 7. Maak een notebook klaar voor publicatie • Maak een notebook over de vergelijking f = g af. Stel je voor dat je deze notebook zou inleveren bij een docent, of dat je het wilt geven aan een collega student. Typ alle toelichting die nodig is om te begrijpen wat je gedaan hebt. Houd het kort, maar wel duidelijk. • Controleer de vormgeving van figuren. Als er meer curven in een figuur staan, zijn deze duidelijk onderscheiden? Staat er een toelichting bij? (rood =…, blauw =…) • Verwijder fouten of overbodige delen van een berekening. Je docent of collega hoeft geen chronologisch overzicht van alles wat je gedaan hebt. Zij of hij moet kunnen zien en (en narekenen) hoe je aan je conclusies bent gekomen. • Controleer met Evaluate notebook of de lezer je werk kan narekenen. Als alles goed is, verandert er niets aan de berekende uitvoer!
52