Maxima Een gratis en krachtig CAS (Computer Algebra System) Dag van de wiskunde 2e en 3e graad – 20 november 2010 Paul Decuypere, VVKSO
Inhoud 1
Inleiding ....................................................................................................................5
2
Gebruikersinterface ................................................................................................... 6 2.1
De gebruikersinterface ................................................................................... 6
2.2
Invoeren en wijzigen van uitdrukkingen ........................................................... 6
2.3
Gebruik maken van de regelnummers .............................................................. 9
2.3.1 Absolute verwijzingen ................................................................................................ 9 2.3.2 Relatieve verwijzingen ............................................................................................... 10
3
2.4
Rangschikking van letteruitdrukkingen ........................................................... 11
2.5
Verschillende vormen van “is gelijk aan” ......................................................... 12
2.6
Nog enkele voorbeelden ................................................................................ 13
2.7
Constanten................................................................................................... 13
2.8
Wiskundige functies ...................................................................................... 13
Commando’s in Maxima ............................................................................................ 14 3.1
Enkele voorbeelden....................................................................................... 14
3.2
Het gebruik van menu’s en/of knoppenbalken ................................................. 16
3.2.1 De knoppenbalken van wxMaxima ............................................................................ 17 3.2.2 Menu-items en knoppen ............................................................................................ 17 3.2.3 Knoppen/menu-items zonder dialoogkader............................................................... 18 3.2.4 Knoppen/menu-items met dialoogkader ................................................................... 19
4
3.3
Gebruik van het contextmenu ........................................................................ 20
3.4
Hulp vragen .................................................................................................. 21
Oplossen van vergelijkingen en stelsels vergelijkingen................................................. 23 4.1
De functie “solve” ......................................................................................... 23
4.2
Oplossingen omzetten naar decimale getallen................................................. 24
4.3
Alleen reële oplossingen ................................................................................ 27
4.4
Andere functies voor het oplossen van vergelijkingen en/of stelsels ................... 28
4.4.2 to_poly_solve ........................................................................................................... 29 4.4.3 find_root.................................................................................................................... 31 5
6
Een omgeving creëren voor berekeningen .................................................................. 32 5.1
Een probleem ............................................................................................... 32
5.2
Een berekening maken in een “omgeving” ...................................................... 32
Calculus ................................................................................................................... 35
6.1
Afgeleide...................................................................................................... 35
6.2
Integralen .................................................................................................... 36
6.2.1 De functie “Integrate” ................................................................................................ 36 6.2.2 De syntax van de functie “integrate”.......................................................................... 37 6.2.3 Oneigenlijke integralen ............................................................................................. 37 6.2.4 Het dialoogkader “Integrate” – numerieke integratie ................................................ 38 6.2.5 Integreren van functies met een parameter ............................................................... 39 6.2.6 Een oppervlaktefunctie.............................................................................................. 39 6.3
Limieten ...................................................................................................... 39
6.3.1 De functie “limit” ....................................................................................................... 39 6.3.2 Limiet van een functie met een parameter ................................................................40 7
8 4
9
Matrices .................................................................................................................. 42 7.1
Een matrix invoeren ...................................................................................... 42
7.2
Bewerkingen met matrices ............................................................................ 44
7.3
Functies i.v.m. matrices ................................................................................. 45
Bibliotheekbestanden............................................................................................... 47 8.1
Meegeleverde bibliotheekbestanden .............................................................. 47
8.2
Bibliotheekbestanden op het internet............................................................. 47
8.3
Zelf een bibliotheekbestand maken ................................................................48
8.4
Bib-bestanden automatisch inladen ...............................................................48
Grafieken................................................................................................................. 50 9.1
Grafieken in Maxima zelf ............................................................................... 50
9.2
Grafieken in GeoGebra .................................................................................. 52
Inleiding
1
Inleiding
Maxima is een Computer Algebra Systeem (CAS) dat de mogelijkheid biedt om numerieke en symbolische berekeningen te maken. De mogelijkheden van Maxima voor het wiskunde onderwijs zijn dus vergelijkbaar met Wiris, Derive of Mathcad. Het programma kent verschillende talen, maar jammer genoeg geen Nederlands. Een groot voordeel van Maxima is dat het een Open Source Programma is en daardoor gratis verkrijgbaar en door iedereen vrij te gebruiken. Maxima is het eigenlijke programma (tekst georiënteerd), maar er bestaat daarnaast een grafische schil die de mogelijkheden van Maxima in een verbeterde grafische interface weergeeft: wxMaxima. Beide programma’s zitten in één installatiepakket http://sourceforge.net/projects/maxima/files/
dat
je
kunt
downloaden
via
Maxima kan gedownload worden voor zowel Windows, Mac als Linux. Op dit ogenblik is de recentste versie van wxMaxima de versie 0.8.6, met als onderliggende versie van Maxima de versie 5.22.1 Op de Nederlandse site
http://www.opener.ou.nl/department01/computeralgebra-met-maxima/downloads.htm/ kan je een handleiding downloaden (je vindt er ook een koppeling naar hoger genoemde website om het programma te downloaden). De handleiding is wel opgesteld voor een oudere versie. Hoewel de gebruikersinterface van wxMaxima sindsdien sterk gewijzigd is, is deze handleiding nog goed bruikbaar. Maxima wordt nog heel regelmatig aangepast.
dag van de wiskunde - 20 november 2010
5
Maxima
2
Gebruikersinterface
2.1
De gebruikersinterface
Na het openen van wxMaxima krijg je een scherm met een menubalk en een knoppenbalk. Verder zie je een leeg werkblad, met bovenaan een doorlopende horizontale lijn. Dit is de horizontale invoegpositie. Deze bepaalt waar de volgende invoer zal terecht komen. Je kan ook nog extra balken (panes) openen in het venster. Dat doe je via de menuoptie Maxima > Panes . Als je bijvoorbeeld de balken “General Math”, “Insert Cell” en “History” opent, en je plaatst ze alle drie aan de rechterkant van het venster, dan krijg je het volgende uitzicht:
6
Aan de rechterkant zie je bovenaan “General Math”. Deze bevat een aantal knoppen, die een aantal menu-items vervangen. Daar onder staat “Insert” met knoppen voor het invoegen van tekstcellen of titelcellen. Daaronder zie je de “History”-lijst. Hier worden alle bewerkingen bijgehouden, die je in de loop van een Maxima-sessie uitvoert. De recentste bewerkingen staan bovenaan.
2.2
Invoeren en wijzigen van uitdrukkingen
De configuratie wijzigen Vóór we beginnen wijzigen we eerst drie instellingen.
Kies in de menubalk Edit > Configure
dag van de wiskunde – 20 november 2010
Gebruikersinterface Hier kan je een aantal instelling wijzigen.
Zet bijkomend een vinkje bij “Use centered dot character for multiplication”, bij “Enter evaluates cells” en bij “Save panes layout”.
De eerste instelling betekent dat als we een vermenigvuldiging invoeren d.m.v. een sterretje (*) dit op het scherm zal vervangen worden door een gecentreerd puntje ( ⋅ ). Dat maakt dat de wiskundige uitdrukkingen er op het scherm (en bij afdrukken) er mooier uitzien. De tweede instelling zorgt er voor dat je de <Enter>-toets kan gebruiken om een ingevoerde bewerking te laten berekenen, en <Shift Enter> om een nieuwe regel te beginnen bij de invoer. Standaard is dit immers omgekeerd, maar berekenen hebben we meer nodig dan een nieuwe invoerregel beginnen, en dan is het gemakkelijker om dat te doen met <Enter> i.p.v. <Shift Enter>. De instelling “Save panes layout” zorgt er voor dat de aanpassingen in de weergave van de knoppenbalken bij een volgende opstart van het programma behouden blijven. Een bewerking invoeren Om een nieuwe uitdrukking in te voeren begin je gewoon te typen. De invoer wordt in het werkblad geplaatst waar de horizontale invoegpositie zich bevindt.
Typ: 5 / 15 <Enter> Typ: 5.0 / 15 <Enter>
Je krijgt dan:
7
Maxima probeert altijd, indien mogelijk, de exacte waarde te geven van de ingevoerde uitdrukking. Daarom geeft Maxima na de eerste invoer als resultaat. Omdat we in de tweede invoerregel een getal gebruikt hebben met een decimale punt erin (5.0) geeft Maxima in de tweede uitvoerregel ook een decimale benadering van de exacte waarde. Zoals je ziet krijgt elke invoerregel een label van de vorm %i met een nummer er achter (de i van input). Elke uitvoerregel krijgt een label van de vorm %o met een nummer er achter (de o van output). Bemerk ook dat een invoerregel en de bijhorende uitvoerregel samengehouden worden door vierkant haakje vooraan de regel. Ze vormen daardoor één cel. Dat haakje vertoont een kort streepje op de scheiding tussen invoer en uitvoer. Bovenaan het haakje zie je een driehoekje. Je kan daar op klikken om de cel samen te vouwen of weer open te vouwen. Samengevouwen ziet het er zo uit:
dag van de wiskunde - 20 november 2010
Maxima Het driehoekje is nu gevuld, de uitvoerregel is verborgen en achteraan kan je lezen dat de invoer volledig zichtbaar is (er zijn geen invoerlijnen verborgen). Om de cel terug open te klappen klik je opnieuw op het driehoekje. Meerdere opdrachten tegelijk invoeren Je kan ook meerdere opdrachten in één keer invoeren, eventueel verspreid over meerdere regels. Om binnen een invoer over te gaan op een nieuwe regel gebruik je <Shift Enter>.
Typ het volgende: a : 3 $ b : 5 $ <Shift Enter> c : 7 ; <Shift Enter> a * ( 5*b + 2*c ) <Enter>
Tussen de 5 en de variabele b moet een vermenigvuldigingsteken * getypt worden. Impliciete vermenigvuldiging bestaat niet in Maxima! En bij het invoeren van het linkse haakje wordt meteen ook het rechtse haakje getypt. Je kan dit eventueel uitschakelen via de instellingen. Dit geeft:
8
De bedoeling zal wel duidelijk zijn: de variabelen a, b en c krijgen een waarde toegewezen (bemerk dat dit gebeurt d.m.v. het toekenningsymbool : en niet met = ), en dan wordt ⋅ uitgerekend. Tussen twee “opdrachten” moet altijd een scheidingsteken staan. Dat kan een $ (dollarteken) zijn of een ; (puntkomma). Als je na de laatste opdracht geen stopteken ($ of ;) typt, dan wordt er standaard een puntkomma achter gezet. Eindigt een opdracht op een $-teken, dan wordt voor deze opdracht geen uitvoerregel getoond. Eindigt de opdracht op een puntkomma, dan wordt wel een uitvoerregel getoond. Er werden vier opdrachten ingevoerd, twee eindigend op $ en twee op puntkomma. Vandaar dat we twee uitvoerregels krijgen. Bemerk dat de nummering wel de twee verborgen uitvoerregels meetelt. Invoer wijzigen Dit is zeer eenvoudig.
Klik in de vorige invoerregel, en wijzig a:3 in a:4, en druk dan terug op <Enter>.
Dit geeft:
dag van de wiskunde – 20 november 2010
Gebruikersinterface
De uitvoer wordt aangepast en de regels krijgen ook een nieuwe nummering! Bemerk dat in het werkblad de vorige invoer en uitvoer nu niet meer zichtbaar is, maar in de history-lijst kan je nog altijd nagaan welke bewerkingen je precies uitgevoerd hebt, en in welke volgorde dit gebeurd is.
Wil je op een bepaald moment de invoer- en uitvoerregels hernummeren, dan kan je dit doen via Maxima > Restart Maxima. Je moet de verschillende invoerregels dan wel opnieuw uitvoeren (er in klikken en dan <Enter> drukken). Je kunt dit wel in één keer doen voor alle regels, door de menukeuze Cell > Evaluate all cells (of de toets combinatie Ctrl-R).
2.3
Gebruik maken van de regelnummers
2.3.1
Absolute verwijzingen
In een uitdrukking kan je gebruik maken van de regelnummers. Bijvoorbeeld:
Het is duidelijk dat in invoer 3 de uitdrukkingen %o1 en %o2 verwijzen naar de eerste twee uitvoerregels, en in de vierde invoerregel wordt de uitvoer van de derde regel gebruikt. Absolute verwijzingen hebben echter een groot nadeel: als je een wijziging aanbrengt, en de andere regels laat herberekenen, dan kloppen de verwijzingen over het algemeen niet meer. Wijzigen we bijvoorbeeld de eerste invoerregel en laten we dan de andere regels opnieuw uitvoeren, dan krijgen we:
dag van de wiskunde - 20 november 2010
9
Maxima
De coëfficiënt van x is gewijzigd.
Door het herrekenen is dit nu niet meer %o1 en %o2 !
Deze resultaten komen nu niet meer overeen met de gewijzigde opgave!
2.3.2
Relatieve verwijzingen
In plaats van absolute verwijzingen kan je ook relatief verwijzen t.o.v. de huidige invoerregel. Dat gebeurt met %th(n) , waarbij n het aantal regels is dat je teruggaat. Dus %th(1) is de vorige uitvoerregel (de laatste dus), %th(2) de tweede laatste, %th(3) de derde laatste, enz…
%th(1) kan je vereenvoudigen tot % 10
Vervang de absolute verwijzingen door relatieve verwijzingen.
Bereken: de voorlaatste uitvoer – de laatste uitvoer
Ontbind de laatste uitvoer
Wijzig nu weer de eerste uitdrukking (bijvoorbeeld de coëfficiënt van x) en laat dan alle uitdrukkingen eronder opnieuw uitvoeren. Dat doe je door achtereenvolgens op <Enter> en op
te drukken en dit te herhalen tot je de laatste invoerregel hebt laten herrekenen. Je krijgt dan:
dag van de wiskunde – 20 november 2010
Gebruikersinterface
De coëfficiënt van x is gewijzigd !
Met de relatieve verwijzingen worden deze uitvoerregels nu wel aangepast aan de gewijzigde omstandigheden !
Opmerking Bij relatieve verwijzingen mag je niet vergeten dat met bijvoorbeeld de “laatste uitvoerregel” de uitvoer bedoeld wordt van de uitdrukking die bovenaan de History-lijst staat. En dat is niet noodzakelijk hetzelfde als de uitvoerregel, die op het werkblad juist boven de huidige invoerregel staat! Bijvoorbeeld:
We hebben het volgende gedaan: 1. De coëfficiënt van x gewijzigd op invoerregel %i5 invoer %i11 2. Onmiddellijk daarna invoerregel %i8 laten uitvoeren %i12 Gevolg: we krijgen op de uitvoerregel %o12 nu NIET de ontbinding van het verschil van die twee kwadraten, maar WEL de ontbinding van het eerste kwadraat (%o11 = de laatste uitvoer vóór %i12 ‼ )
2.4
Rangschikking van letteruitdrukkingen
Heel eigenaardig is dat Maxima de letters in een uitvoerregel altijd in omgekeerde alfabetische volgorde zet.
dag van de wiskunde - 20 november 2010
11
Maxima Bijvoorbeeld:
Je kan dit aanpassen d.m.v. de functie “ordergreat”.
Merk op: je kan dezelfde letters niet opnieuw ordenen! Dat kan enkel als je Maxima herstart (menuitem “Maxima / Restart Maxima” of als je een nieuwe Maxima-sessie begint.
2.5
12
Verschillende vormen van “is gelijk aan”
Toekenning
:
Wordt gebruikt om een waarde te geven aan een variabele.
Vergelijking
=
5x-10 = 25
Functiedefinitie
:=
Om een functie te definiëren gebruiken we steeds := f(x):=5x-10
Bijvoorbeeld:
Zodra een variabele een waarde gekregen heeft of een functie gedefinieerd is, blijven deze bestaan gedurende de hele Maximasessie, zolang je ze niet verwijdert. Een variabele of functie verwijderen kan je doen via Maxima > Delete Variable… of Delete Function… Wil je een cel verwijderen, selecteer dan het haakje vóór het blok en druk op . Om alle cellen in één keer te verwijderen kun je vooraf alle cellen selecteren door de toets combinatie Ctrl-A (of de menukeuze Edit > Select All).
dag van de wiskunde – 20 november 2010
Gebruikersinterface
2.6
Nog enkele voorbeelden
Bemerk dat “pi” in de uitvoer wel vervangen wordt door de Griekse letter π , maar dat de waarde niet gebruikt wordt. Voer je “%pi” in, dan wordt de waarde van π gebruikt.
De functie “log” is de natuurlijke logaritme, niet de Briggse logaritme. Dit is de enige logaritmische functie in Maxima. Alle andere moet je dus berekenen op basis van de natuurlijke logaritme.
2.7
2.8
Constanten %e
Het getal van Euler e = 2,718
%pi
%phi
De gulden snede = 1,618
%i
Imaginaire eenheid i
minf
Reëel min oneindig
inf
Reëel plus oneindig
infinity
Complex oneindig
13
Wiskundige functies sin(x) asin(x)
sinusfunctie Boogsinusfunctie
cos(x) acos(x)
cosinusfunctie Boogcosinusfunctie
tan(x) atan(x)
tangensfunctie Boogtangensfunctie
log(x)
de natuurlijke logaritme
log(x)/log(10) Briggse logaritme sqrt(x)
vierkantswortel
x^(1/n)
nde machtswortel
dag van de wiskunde - 20 november 2010
Maxima
3
Commando’s in Maxima
In Maxima is alles functie! D.w.z. alle commando’s komen onder de vorm van een functie. Door eventueel zelf functies bij te definiëren kan je maxima zelf uitbreiden (bibliotheken). Zelfs operatoren zijn functies (je kan dus zelf ook operatoren definiëren). Het aantal functies (commando’s) in Maxima is gigantisch groot. Sommige zijn ook uitermate gespecialiseerd voor één bepaalde wiskundige bewerking. We behandelen hier dan ook slechts enkele eenvoudige voorbeelden.
3.1
Enkele voorbeelden
Ontbinden in factoren
14
De functie “factor” ontbindt de uitdrukking in factoren met gehele coëfficiënten. De functie “gfactor” doet hetzelfde, maar nu met “Gaussiaanse gehele getallen” als coëfficiënten. Gaussiaanse gehele getallen zijn complexe getallen waarvan het reële en imaginaire deel geheel zijn. De “g” uit “gfactor” verwijst dus naar Gauss. In het voorbeeld hieronder kan je duidelijk zien dat steeds gestreefd wordt naar een ontbinding met gehele coëfficiënten. Als dit niet mogelijk is, dan wordt er niet verder ontbonden.
Uitwerken
Substitueren Opgave: Wat is het symmetriemiddelpunt van de derdegraadsfunctie
.
We onderzoeken daarvoor welke verschuiving van deze functie een oneven functie maakt (oneven functie = symmetriemiddelpunt in de oorsprong). We voeren eerst een horizontale verschuiving uit over a eenheden. dag van de wiskunde - 20 november 2010
Commando’s in Maxima
Het is duidelijk dat de functie “subst” een substitutie uitvoert van x door x-a in de veelterm. We moeten dan echter nog deze uitdrukking uitwerken (expand) en de termen groeperen volgens machten van x *. Dat kan in één keer door niet “subst” te gebruiken, maar “ratsubst”. Wijzig de vorige invoerregel tot:
Het is duidelijk dat we a moeten vervangen door
om de term met
te laten wegvallen.
Als we dan nog een verticale verschuiving uitvoeren over
, dan krijgen we een oneven functie.
Besluit het symmetriemiddelpunt van de functie is het punt
(
). 15
Euclidische deling - teller en noemer van een breuk Opgave: bepaal de schuine asymptoot van
en bereken het snijpunt van die S.A. met
de grafiek van f.
De functie “divide” voert de Euclidische deling uit van twee veeltermen en geeft het resultaat weer als een lijst, waarvan het eerste element het quotient is en het tweede de rest van de deling. Een lijst in Maxima wordt in- of uitgevoerd als een opsomming van de elementen tussen vierkante haakjes. Bemerk dat we hier ook de functies “num” en “denom” gebruikt hebben. Daarmee bepalen we de teller (numerator) en de noemer (denominator) van een breuk.
*
Dit kan via de uitdrukking collectterms(expand(%),x). Je kan het natuurlijk ook in twee stappen doen.
dag van de wiskunde - 20 november 2010
Maxima De elementen van een lijst kunnen opgevraagd worden d.m.v. een indexnotatie. De index wordt tussen vierkante haakjes achter de lijst geplaatst.
% = de vorige uitvoer, dat is in dit geval de lijst met quotient en rest. %[1] betekent: het eerste element van die lijst, m.a.w. het quotient van de deling. We hebben de vergelijking bewaard in de variabele SA.
De functie “solve” hebben we al eerder gebruikt. De functie lost een vergelijking of, zoals in dit geval, een stelsel van vergelijkingen op. Een stelsel van vergelijkingen wordt ingevoerd als een lijst van vergelijkingen. In dit geval wordt dus het volgende stelsel opgelost. {
16
{
]. In dit Elke oplossing wordt gegeven als een lijst van vergelijkingen van de vorm [ geval is er maar één oplossing, maar in principe is het mogelijk dat er meerdere oplossingen zijn. Vandaar dat rond de oplossing nog eens een stel vierkante haakjes staan (voor de lijst van alle oplossingen). Splitsen in partieelbreuken
3.2
Het gebruik van menu’s en/of knoppenbalken
Zoals we hierboven gezien hebben betekent het uitvoeren van een commando in Maxima dat je de functie met zijn argumenten invoert in een invoerregel en deze laat uitvoeren. De gebruikersinterface van wxMaxima biedt echter ook, via de verschillende menu’s en knoppenbalken, een aantal hulpmiddelen om dit voor gebruikers/beginners iets eenvoudiger te maken. Een aantal commando’s kunnen ingevoerd worden via menu-items of knoppen. Dit is echter beperkt tot alleen de voornaamste commando’s. Het aantal commando’s is immers zo groot dat het onmogelijk zou zijn om die allemaal te voorzien in de menu’s of knoppenbalken. Bijvoorbeeld de functie “divide” (voor de Euclidische deling) zal je nergens in de knoppenbalken of menu’s terugvinden. Je kan dus niet alles met de menu-items of knoppen doen! dag van de wiskunde - 20 november 2010
Commando’s in Maxima 3.2.1
De knoppenbalken van wxMaxima
Maxima (eigenlijk wxMaxima) bevat 4 knoppenbalken: de “toolbar” (die standaard zichtbaar is onder de menubalk), “General Math”, “Statistics” en “Insert Cell”. De eerste biedt vooral knoppen voor het opslaan, openen, kopiëren, plakken, enz… De laatste (Insert Cell) biedt knoppen voor het invoeren van speciale tekstblokken. Dat zijn blokken die niet uitgevoerd worden, maar alleen dienen om je berekeningen te documenteren. Er zijn dus slechts twee knoppenbalken, die knoppen bevatten om commando’s (functies) in te voeren: “General Math” en “Statistics”. We zullen alleen het gebruik van de eerste uitleggen. We zullen deze in hetgeen volgt de GM-balk noemen. De andere knoppenbalk werkt analoog. Als de knoppenbalk “General Math” niet zichtbaar is, dan kan je hem te voorschijn halen via het menu-item “Maxima / Panes General Math” (zie ook blz. 6). 3.2.2
Menu-items en knoppen
De knoppen op de GM-balk zijn eigenlijk gewoon alternatieven voor een aantal menu-items. Knop in GM
Functie
Overeenkomstig menu-item
Simplify
ratsimp
Simplify / Simplify Expression
Simplify (r)
radcan
Simplify / Simpify Radicals
Factor
factor
Simplify / Factor Expression
Expand
expand
Simplify / Expand Expression
Rectform
rectform
Simplify / Complex Simplification Convert to Rectform
Subst…
subst
Simplify / Substitute…
Canonical (tr)
trigrat
Simplify / Trigonometric Simplification Canonical Form
Simplify (tr)
trigsimp
Simplify / Trigonometric Simplification Simplify Trigonometric
Expand (tr)
trigexpand
Simplify / Trigonometric Simplification Expand Trigonometric
Reduce (tr)
trigreduce
Simplify / Trigonometric Simplification Reduce Trigonometric
Solve…
solve
Equations / Solve…
Solve ODE…
ode2
Equations / Solve ODE… (ODE=Ordinary Differential Equation)
Diff…
diff
Calculus / Differentiate…
Integrate…
integrate
Calculus / Integrate…
Limit…
limit
Calculus / Find Limit…
Series…
taylor
Calculus / Get Series…
Plot 2D…
plot2d of wxplot2d
Plot / Plot 2d…
Plot 3D
plot3d of wxplot3d
Plot / Plot 3d…
dag van de wiskunde - 20 november 2010
17
Maxima Sommigen van die knoppen/menu-items hebben achteraan drie puntjes. Dit betekent dat deze knoppen/menu-items een dialoogkader openen, waarin de verschillende argumenten kunnen ingevuld worden. We geven hieronder telkens één voorbeeld van het gebruik van een knop met en zonder dialoogkader. De andere werken analoog. 3.2.3
Knoppen/menu-items zonder dialoogkader
In paragraaf 3.1 op blz. 14 hebben we de functie “factor” en “gfactor” gebruikt in een voorbeeld. We herhalen nu deze voorbeelden met knoppen/menu-items. Het is zo dat knoppen zonder dialoogkader een bepaalde functie, hier bijvoorbeeld “factor”, invoeren op de horizontale invoegpositie, en dan onmiddellijk die invoerregel uitvoeren. Bij dergelijke knoppen moet het argument dus reeds vooraf ingevoerd zijn. Je hebt daarvoor verschillende mogelijkheden:
De uitdrukking op de knop
⋅
⋅ klikken.
intypen (niet op <Enter> drukken), en dan onmiddellijk
Je krijgt dan dit:
18
Een niet uitgevoerde invoerregel en een tweede regel met daarop het commando. De ingevoerde uitdrukking werd gekopieerd naar de tweede regel. De uitdrukking ⋅ ⋅ intypen en op <Enter> drukken, daarna klik je op de knop Je krijgt dan dit:
Bemerk dat nu % (dus de laatste uitgevoerde uitdrukking) als argument van “factor” gebruikt is! Je kan ook een eerder ingevoerde of uitgevoerde uitdrukking selecteren met de muis, en dan op de knop klikken. Je krijgt dan weer een nieuwe invoer- en uitvoerregel met de functie “factor”, waarbij de geselecteerde uitdrukking als argument gebruikt wordt.
Voor de functie “gfactor” bestaat geen knop, maar wel een menu-item: Simplify > Factor Complex. Je gaat daarbij op één van bovenstaande manier te werk, net zoals met een knop. dag van de wiskunde - 20 november 2010
Commando’s in Maxima Als je bijvoorbeeld de uitdrukking invoert en onmiddellijk het menu-item kiest, dan krijg je:
3.2.4
Knoppen/menu-items met dialoogkader
Een knop of menu-item opent een dialoogkader als de ermee geassocieerde functie meerdere argumenten vereist. Voorbeelden hiervan zijn: Subst… , Solve… , Diff… , enz… We hebben in paragraaf 3.1 een voorbeeld uitgewerkt met de functies “subst” en “ratsubst”. We herhalen dit nog eens door gebruik te maken van de knop .
Typ de uitdrukking
⋅
⋅
, maar druk niet op <Enter>
Klik dan op de knop
Je krijgt dan een dialoogkader:
19
Zoals je ziet wordt de uitdrukking reeds ingevoerd bij het voornaamste argument, namelijk de uitdrukking, waarin iets moet gesubstitueerd worden. De functie “subst” vereist echter nog twee argumenten: datgene wat vervangen moet worden (Old value), en datgene waardoor we dit moeten vervangen (New value).
Vul in dat laatste vakje x – a in Zet dan een vinkje bij “Rational”en klik op OK
Je krijgt dan:
Het vinkje bij “Rational” zorgt er voor dat je niet de functie “subst” krijgt, maar wel “ratsubst”, die het resultaat onmiddellijk omzet in de zogenaamde CRE-vorm (Canonical Rational Expressions dag van de wiskunde - 20 november 2010
Maxima form), d.w.z. dat de uitdrukking geschreven wordt als een veelterm in de variabele die de hoogste prioriteit heeft. Het hoofdargument Bij knoppen/menu-items met dialoogkader is er altijd een hoofdargument. Dit hoofdargument wordt altijd ingevuld met de uitdrukking, die op dat moment geselecteerd is. Is er geen enkele uitdrukking geselecteerd, dan wordt dit hoofdargument gelijk gesteld aan % (= laatste uitvoer). Andere voorbeelden zijn:
3.3
Solve… daar is het hoofdargument de vergelijking die moet opgelost worden Diff… daar is het hoofdargument de functie die moet afgeleid worden enz…
Gebruik van het contextmenu
Behalve de knoppenbalken en de menu-items kan je ook gebruik maken van een contextmenu. Een contextmenu open je door iets te selecteren, en dan op die selectie te klikken met de rechtermuisknop.
20
Het contextmenu geeft wel niet alle mogelijke functies, maar wel de meest gebruikte, en is dus heel handig in gebruik. Bijvoorbeeld:
Voer in: (x^3 – x^2 – 3*x + 3) / (x^2 – 3*x + 2) Selecteer dan de teller van de uitvoer Klik met de rechtermuisknop op de selectie, en kies “Solve…” uit het contextmenu. In het dialoogkader klik je op “OK”.
Je krijgt dan de nulpunten van de teller:
Doe hetzelfde voor de noemer:
We zien dat teller en noemer een gemeenschappelijk nulpunt hebben: x = 1.
dag van de wiskunde - 20 november 2010
Commando’s in Maxima
Selecteer heel de breuk (klikken op de breukstreep), klik met de rechtermuisknop op de selectie, kies weer “Solve…” en klik op “OK”.
We krijgen dan de nulpunten van de rationale functie:
Maxima laat dus terecht het nulpunt x = 1 weg!
3.4
Hulp vragen
Het is niet altijd even duidelijk wat sommige functies precies doen, of welke argumenten je bij bepaalde functies moet gebruiken. Daarvoor zijn heel wat hulpmogelijkheden voorzien.
Via het menu-item “Help / Maxima Help…” of via de knop
“Maxima manual”. Hulp vragen met ? of ??
(in de toolbar) open je de
We hebben bijvoorbeeld eerder de functie “ratsimp” ontmoet. Maar wat doet die functie precies? En hoe moet ze gebruikt worden?
Typ: ? ratsimp (let op: een spatie achter het vraagteken is noodzakelijk)
Je krijgt dan uitleg over deze functie en enkele voorbeelden. Onderaan zie je staan: There are also some inexact matches for `ratsimp'. Try `?? ratsimp' to see them.
Typ dus ?? ratsimp
Je krijgt dan een overzicht van alle functies en optievariabelen waarin “ratsimp” voorkomt (dat zijn er 3).
De functie “example”
Wil je geen uitvoerige beschrijving van een functie, maar alleen een aantal voorbeelden van het gebruik er van, dan kan je de functie “example” gebruiken.
Typ: example(solve)
Je krijgt dan een hele boel voorbeelden van het gebruik van de functie “solve”.
Functies aanvullen
Gebruik de sneltoetsen en om een lijst te zien van functies die beginnen met een woord dat al ingetypt werd (en sjablonen voor die functies).
Typ: int en druk dan op dag van de wiskunde - 20 november 2010
21
Maxima Je krijgt dan een lijst met een aantal functies die beginnen met “int”. De lijst is alfabetisch, maar wel beperkt in lengte. Het kan dus zijn dat er onderaan functies ontbreken. Het spreekt vanzelf dat hoe meer letters je zelf invoert, hoe korter en dus vollediger de lijst.
Kies daar bijvoorbeeld “integrate” uit.
Als je nu onmiddellijk op functietoets drukt, dan krijg je de helptekst i.v.m. de functie “integrate”, maar dat willen we nu niet direct doen. We kunnen wel vermoeden dat deze functie een integraal zal berekenen. Maar welke argumenten moeten/kunnen we gebruiken bij deze functie?
Druk op
Je krijgt dan terug een lijst met alle mogelijke sjablonen voor deze functie.
Kies bijvoorbeeld de laatste, die overduidelijk zal dienen om een bepaalde integraal te berekenen.
Je krijgt dan het volgende: 22 Het eerste argument is daarbij geselecteerd.
Typ nu bijvoorbeeld: x^3 – 5*x^2 en druk dan op de -toets
Door de tabtoets wordt het volgende argument geselecteerd, zodat je onmiddellijk verder kan gaan met het invullen van de argumenten.
Ga zo verder tot alle argumenten ingevuld zijn.
dag van de wiskunde - 20 november 2010
Oplossen van vergelijkingen en stelsels vergelijkingen
4
Oplossen van vergelijkingen en stelsels vergelijkingen
4.1
De functie “solve”
Er bestaan in Maxima heel wat functies (meer of minder gespecialiseerd) om vergelijkingen of stelsels van vergelijkingen op te lossen (zie paragraaf 4.4 op blz. 28), maar de meest voor de hand liggende en eenvoudigste in gebruik is de functie “solve”. De functie “solve” verwacht twee argumenten: de vergelijking(en) die moeten opgelost worden, en de onbekenden, die daaruit moeten opgelost worden. Je kan dit duidelijk zien als je op de knop (of het menu-item Equations > Solve…) klikt. Je krijgt dan een dialoogkader waarin je die twee argumenten moet invullen.
Het tweede argument is vooral nodig als de vergelijking meerdere onbekenden bevat. Bijvoorbeeld:
23
Deze twee berekeningen werden ingevoerd met de knop
.
Bemerk dat in de
invoerregels, die dit oplevert, zowel de vergelijking als de onbekende tussen vierkante haakjes staan, m.a.w. een lijst vormen met, in dit geval, slechts één vergelijking en één onbekende. Dat komt omdat deze functie ook bedoeld is om stelsels van vergelijkingen op te lossen. Daaruit moeten dan meestal ook meerdere onbekenden opgelost worden. Bijvoorbeeld:
dag van de wiskunde - 20 november 2010
Maxima Geeft:
In het dialoogkader moet je dus enkel de verschillende vergelijkingen en onbekenden invoeren gescheiden door een komma. Je mag de vierkante haakjes daar niet bij typen, die worden automatisch toegevoegd. Je kan natuurlijk de invoer ook zelf doen zonder gebruik te maken van de knop
. Je
kan daarbij eventueel sommige zaken weglaten die overbodig zijn.
24
Als je slechts één vergelijking hebt, dan is het niet nodig die tussen vierkante haakjes te zetten Idem voor slechts één onbekende: de vierkante haakjes zijn dan niet nodig Heb je in de vergelijking slechts één onbekende, dan is het zelfs niet nodig om het tweede argument in te voeren. De functie lost de vergelijking dan automatisch op naar die ene onbekende. Ook bij een stelsel is dit het geval: als je bijvoorbeeld een stelsel hebt met twee vergelijkingen in twee onbekenden, dan is het ook niet nodig om die onbekenden te vermelden in het tweede argument. De vierkante haakjes in het eerste argument zijn dan natuurlijk wel nodig. Je hebt immers twee vergelijkingen.
Bijvoorbeeld:
Bemerk dat je niet noodzakelijk een vergelijking moet opgeven. Als je een uitdrukking opgeeft zonder gelijkheidsteken erin, dan wordt verondersteld dat je de nulpunten van die uitdrukking wil berekenen.
4.2
Oplossingen omzetten naar decimale getallen
Sommige vergelijkingen of stelsels geven behoorlijk ingewikkelde oplossingen. De functie “solve” probeert immers, indien mogelijk, steeds een exacte oplossing te vinden en geen benadering. Bijvoorbeeld:
dag van de wiskunde - 20 november 2010
Oplossen van vergelijkingen en stelsels vergelijkingen Zo’n uitkomst is natuurlijk weinig bruikbaar. We willen ze daarom omzetten naar een decimale voorstelling. Dat kan met de functie “float”. Je kan die zelf intypen, of gebruik maken van het menu-item “Numeric / To Float”.
De laatste (reële oplossing) is nu bruikbaar: , maar de twee imaginaire oplossingen zijn nog vrij onleesbaar. Dat komt omdat die niet in de standaardvorm staan. De imaginaire eenheid i komt er meerdere keren in voor. Om dat te vermijden kan je best eerst de oplossingen omzetten naar die standaardvorm d.m.v. de functie “rectform” (menu-item Simplify > Complex Simplification > Convert to Rectform ) en dan pas naar decimale voorstelling. We lossen dezelfde vergelijking opnieuw op en passen dan eerst “rectform” toe op de oplossingen, en dan “float”. Dit geeft dan:
25
Op de laatste uitvoerregel vinden we nu drie “leesbare” oplossingen. Als je de commando’s zelf intypt, dan kan je deze ook combineren in één invoerregel:
Opmerking In het menu “Numeric” vind je ook een item “Set Precision…”. Daarmee stel je de optievariabele “fpprec” in. Je zou denken dat je daar het aantal cijfers na de komma dat getoond wordt mee kan instellen, maar dat is niet zo! Behalve gewone decimale voorstelling (met de functie “float”) bestaan er in Maxima ook bigfloats, dat zijn decimale getallen met in theorie een onbeperkt aantal cijfers (al dan niet decimalen). De optievariabele “fpprec” stelt het aantal cijfers in dat moet berekend worden met de functies die een bigfloat opleveren. Oneindig veel cijfers berekenen kan immers niet echt. De functie “bfloat” zet getallen om in bigfloats. Deze functie kan je verkrijgen met het menu-item “Numeric / To dag van de wiskunde - 20 november 2010
Maxima Bigfloat”). De variabele fpprec heeft dus niets met de gewone decimale voorstelling te maken. De gewone decimale voorstelling (floats) zijn altijd beperkt tot maximum 16 cijfers na de komma. Wil je het aantal decimalen die getoond worden beperken dan gebruik je daar de optievariabele fpprintprec (= floating point print precision). Deze werkt zowel voor gewone floats als voor bigfloats. Enkele voorbeelden:
Standaard is fpprintprec = 0 en fpprec = 16. In Als 2 ≤ fpprintprec ≤ 16, dan geeft float dat geval geeft float 16 cijfers na de komma, en fpprintprec cijfers na de komma, en bfloat geeft geeft bigfloat 16 beduidende cijfers + de hetzelfde aantal beduidende cijfers. exponent van de macht van 10 waarmee het vermenigvuldigd moet worden. 26
Als 16 ≤ fpprintprec ≤ fpprec dan geeft float 16 cijfers na de komma (maximum) en geeft bfloat fpprintprec beduidende cijfers.
Als fpprintprec = 0 dan geeft bfloat een aantal cijfers gelijk aan fpprec (cijfers vóór de komma inbegrepen).
dag van de wiskunde - 20 november 2010
Oplossen van vergelijkingen en stelsels vergelijkingen
4.3
Alleen reële oplossingen
Zoals uit de voorgaande voorbeelden blijkt, geeft de functie “solve” steeds complexe oplossingen.
In veel omstandigheden in het middelbaar onderwijs zou het waarschijnlijk beter zijn als we enkel de reële oplossingen kregen. Bij de functie “solve” kan dit jammer genoeg niet. Het kan wel als je een andere functie “algsys” gebruikt. “algsys” is een afkorting voor algebraic system of equations. Je kan deze functie en zijn argumenten invoeren via het menu-item Equations > Solve Algebraic System…. Je krijgt dan eerst de vraag hoeveel vergelijkingen je stelsel bevat.
Je kan daar natuurlijk ook 1 invullen. Daarna wordt gevraagd de vergelijking(en) en de op te lossen onbekende(n) in te geven. 27
Heb je meerdere vergelijkingen en/of onbekenden, dan voer je die hier ook in, gescheiden door een komma. Het resultaat is:
De functie “algsys” doet dus op het eerste zicht exact hetzelfde als “solve”, maar er is nu een mogelijkheid om enkel de reële oplossingen te krijgen. Daarvoor gebruik je de optievariabele “realonly”. Als die “waar” is, dan krijg je bij het gebruik van “algsys” enkel de reële oplossingen, de functie “solve” geeft nog altijd alle complexe oplossingen.
dag van de wiskunde - 20 november 2010
Maxima
4.4
Andere functies voor het oplossen van vergelijkingen en/of stelsels
Probleem De functies “solve” en “algsys” kunnen niet met alle vergelijkingen overweg.
Je krijgt de vergelijking onopgelost terug. opgelost, maar niet allemaal.
Sommige vijfdegraadsvergelijkingen worden wel
Ook irrationale vergelijkingen leveren een probleem op voor “solve”:
Maar ook voor “algsys”: 28
Ook goniometrische vergelijkingen vormen een probleem:
Als “solve” de goniometrische vergelijking kan oplossen, dan krijg je meestal slechts één van de oneindig veel oplossingen, “algsys” geeft zelfs helemaal niets!
dag van de wiskunde - 20 november 2010
Oplossen van vergelijkingen en stelsels vergelijkingen Andere mogelijkheden In het menu “Equations” vinden we echter ook nog een aantal andere mogelijkheden om vergelijkingen op te lossen. “find_root”
“to_poly_solve” een experimentele solver ingevoerd vanaf Maxima 5.15
Oplossen van
“linsolve” lost stelsels
veeltermvergelijkingen
van lineaire vgln op. “algsys”
29
We overlopen de verschillende mogelijkheden. 4.4.2
to_poly_solve
Uit het voorgaande blijkt dat “solve” en “algsys” niet al te sterk zijn. Maxima is echter nog steeds aan het evolueren. Barton Willis (University of Nebraska at Kearney) maakte een bibliotheekbestand “topoly_solver.mac”, waarin de functie “to_poly_solve” zit, die bedoeld is als een uitbreiding van de functies “solve” en “algsys”. In de documentatie (help) vind je niets terug over deze functie, maar de auteur heeft zelf gezorgd voor een documentatiebestand “topoly-user-doc.html”. Je vindt dit terug in de map “C:\Program Files\Maxima-5.22.1\share\maxima\5.22.1\share\contrib”, waarin ook de bibliotheek zelf terug te vinden is. Zonder in details te treden geven we enkele voorbeelden van het gebruik van deze functie, waaruit duidelijk blijkt dat deze functie veel krachtiger is dan “solve” of “algsys”. Opmerking: je kan “%solve” gebruiken als synoniem voor “to_poly_solve”. Deze functie maakt trouwens gebruik van “algsys”, maar breidt de toepasbaarheid sterk uit.
dag van de wiskunde - 20 november 2010
Maxima
Verklaring: de waarschuwingen worden veroorzaakt door het inladen van de externe bibliotheek, waarin de functie “to_poly_solve” zit. Dit verschijnt enkel de eerste keer dat je die functie toepast, tenzij je vooraf zelf het bib-bestand hebt ingeladen met het commando load(topoly_solver). ⋅
De oplossing moet je lezen als:
⋅
en
. Daarin zijn %z6 en %z8
zogenaamde “dummy variables” of “dummies”. In dit geval is de naam “z” gebruikt wat er op wijst dat het gehele getallen zijn (elementen van ℤ ). We krijgen m.a.w. alle oplossingen van de goniometrische vergelijking in de gebruikelijke notatie! Wij zouden schrijven:
⋅
en
⋅
, met
ℤ.
Het voordeel van twee
verschillende dummies te gebruiken is dat je ze ook twee verschillende waarden kan geven.
30 Dus weer alle oplossingen! De dummies lijken nogal arbitrair genummerd en . Dat komt omdat er tijdens de berekeningen hulpdummies gebruikt worden. Je kan deze eventueel fatsoeneren met de functie “nicedummies”.
Een irrationale vergelijking wordt ook “proper” opgelost (rekening houdend met de kwadrateringsvoorwaarde):
Bemerk dat je “%solve” kan gebruiken als alias voor “to_poly_solve”, en dat de vergelijking en de onbekende niet noodzakelijk tussen vierkante haakjes moeten staan. Het is echter niet toegelaten om x weg te laten, alhoewel er slechts één onbekende in de vergelijking zit. Zelfs vergelijkingen met absolute waarden worden opgelost:
dag van de wiskunde - 20 november 2010
Oplossen van vergelijkingen en stelsels vergelijkingen
Omdat de nieuwe functie werkt met “algsys” herkent ze ook de optievariabele “realonly”.
Maar lijdt dan ook onder het euvel dat we al eens vermeld hebben in paragraaf 4.3 op blz. Fout! Bladwijzer niet gedefinieerd.
4.4.3
find_root
De functie “find_root” lost een vergelijking numeriek op. bovengrens opgeven waartussen één oplossing ligt.
Je moet daarvoor een onder- en
We definiëren f(x) stuksgewijs:
31
De grafiek daarvan ziet er uit zoals hiernaast afgebeeld. We zien dat de functie één nulpunt heeft tussen 2 en 3. Maar zelfs de functie “to_poly_solve” bijt daarop zijn tanden stuk:
Met “find_root” lukt het wel (de laatste argumenten zijn de onder- en bovengrens van een interval waarin het nulpunt ligt)..
dag van de wiskunde - 20 november 2010
Maxima
5
Een omgeving creëren voor berekeningen
5.1
Een probleem
Opgave: bereken de punten van cirkel die 3 als tweede coördinaat hebben.
met
, en ook de punten
Dit geeft de punten met . Het probleem is dat we nu opnieuw moeten beginnen om de punten met te kunnen berekenen. We moeten c opnieuw definiëren, want de vergelijking c bevat enkel een y-onbekende, geen x-onbekende. Bovendien heeft x ondertussen een waarde gekregen, zodat je eigenlijk geen vergelijking met x kan oplossen, want x is nu geen onbekende meer, maar een constante. Bijvoorbeeld: 32
Je zou dan de variabele x terug “vrij” moeten maken. Dit kan wel met de functie “remvalue” of “kill”, maar dat is allemaal vrij omslachtig. Het is dus nooit een goed idee om variabelen zoals x en y een waarde te geven. We kunnen dit probleem vermijden door te werken met een berekeningsomgeving.
5.2
Een berekening maken in een “omgeving”
Het bovenstaande probleem kan vermeden worden door een zogenaamde “omgeving” te creëren waarin een berekening kan plaats vinden. Je kan in die omgeving variabelen een waarde geven alleen voor de tijd dat de berekening duurt.
We herstarten Maxima: “Maxima / Restart Maxima”
dag van de wiskunde - 20 november 2010
Een omgeving creëren voor berekeningen Op de tweede invoerregel laten we “solve(c)” uitvoeren, in een “omgeving” waarin zeggen dat eerst x de waarde 5 zal krijgen, en dan pas zal “solve(c)” uitgevoerd worden.
. Dat wil
De variabele x krijgt die waarde echter alleen gedurende het oplossen van de vergelijking. Nadien is x terug een vrije variabele! Lossen we de vergelijking op in een omgeving waarin nog altijd een vrije variabele.
, dan kan dit zonder problemen want x is
Je kan ook meerdere vergelijkingen aan de omgeving toevoegen. Bijvoorbeeld: ligt het punt P(8,6) op die cirkel?
Niet dus! Of je wil de kwadratische vergelijking zien om de punten met x = 2 te berekenen:
33
of beter:
Je kan dus ook bepaalde commando’s aan de omgeving toevoegen. Besluit:
Je creëert een berekeningsomgeving door achter een uitdrukking één of meerdere vergelijkingen en/of commando’s te typen, van elkaar gescheiden door komma’s. In feite voer je op dat moment de functie “ev” uit. Voor nog meer uitleg over wat allemaal mogelijk is met zo’n omgeving zoek je in help naar “ev”. Voorbeeld 2 Ligt het snijpunt van de rechten
en
op de cirkel c?
dag van de wiskunde - 20 november 2010
Maxima
Op de eerste regel wordt het stelsel van de vergelijkingen van de rechten opgelost en het resultaat wordt opgeslagen in S. Op de tweede regel wordt in de vergelijking van c de variabele x vervangen door
en y door . Het is dan duidelijk dat het snijpunt niet op de cirkel ligt.
Aan de omgeving kan je ook nog bepaalde functies toevoegen. Bijvoorbeeld, als je niet direct ziet dat de breuk niet gelijk is aan 81, dan kan je beide leden omzetten naar decimale notatie.
Voorbeeld 3 We hebben gezien dat je bij de functie “algsys” een optievariabele “realonly” hebt, die als standaardwaarde “false” heeft. Je kan de reële oplossingen opvragen, zonder de standaardwaarde van “realonly” te wijzigen, door weer met een omgeving te werken.
34 De waarde van “realonly” is daardoor niet gewijzigd:
dag van de wiskunde - 20 november 2010
Calculus
6
Calculus
6.1
Afgeleide
Afleiden gebeurt in Maxima met de functie “diff” (knop of menu-item “Calculus / Differentiate…”. De knop of menu-item geeft een dialoogkader, waarin je kan zien welke elementen moeten opgegeven worden. De uitdrukking, die moet afgeleid worden. Eén of meerdere variabelen waar naar moet afgeleid worden. Het aantal keren dat er moet
Bovenstaand voorbeeld geeft:
afgeleid worden (voor elke variabele een aantal).
Bemerk de volgorde van de argumenten: eerst de af te leiden uitdrukking, dan een variabele onmiddellijk gevolgd door het aantal keer dat naar die variabele moet afgeleid worden, dan een volgende variabele + het aantal keren afleiden naar die variabele, enz… Heb je meerdere variabelen waarnaar je moet afleiden, dan moet het aantal keer afleiden steeds vermeld worden. Heb je slechts één variabele waarnaar je moet afleiden, dan mag het aantal keer afleiden weggelaten worden. In dat geval wordt verondersteld dat je de eerste afgeleide bedoelt. Bijvoorbeeld: Het aantal keren afleiden wordt niet vermeld, dus krijg je de eerste afgeleide naar x.
Bemerk dat bij het afleiden van een quotiënt de productregel gebruikt wordt, met als gevolg: twee breuken. Wil je dit herleiden naar één breuk, dan laat je die uitdrukking ontbinden.
dag van de wiskunde - 20 november 2010
35
Maxima
Wat natuurlijk ook in één keer kan:
Opmerking Stel dat je de afgeleide niet onmiddellijk wil berekenen, maar een uitdrukking wil invoeren met een afgeleide er in, dan kan je de zogenaamde “noun”-vorm van “diff” gebruiken. Elke functie in Maxima kan als “verb” (werkwoord) of als “noun” (naamwoord) gebruikt worden. In het eerste geval wordt de functie uitgevoerd (het normale gebruik), in het tweede geval wordt de functie gewoon als naamwoord vermeld in de uitdrukking. Een functie wordt als naamwoord behandeld als je er een accent vóór zet. Bijvoorbeeld:
Merk op dat je met de functie “display” ook een linker- en een rechterlid bekomt, maar het linkerlid staat dan niet in wiskundige notatie:
36
6.2
Integralen
Het berekenen van integralen gebeurt met de functie “Integrate”. Zowel voor de onbepaalde als voor de bepaalde integraal. Het onderscheid zit in het aantal argumenten die je meegeeft aan deze functie. 6.2.1
De functie “Integrate”
Een bepaalde integraal (met integratiegrenzen, dus twee extra argumenten):
Deze laatste uitkomst zouden we natuurlijk liever vereenvoudigd zien. Klikken we op de knop dan krijgen we: dag van de wiskunde - 20 november 2010
Calculus
Dat is al beter, maar nog niet wat we bedoelen. Om logaritmen samen te nemen tot één logaritme volstaat “ratsimp” niet. Klik op de knop ernaast
en dan krijg je:
De functie “radcan” betekent eigenlijk “Simplify Radicals” (zie menu “Simplify / Simplify Radicals”). Deze functie probeert wortels, logaritmen en exponentiële functies te groeperen om zo tot een canonieke vorm te komen (vandaar de “can” in de naam van de functie). Opmerking: In het menu “Simplify” vinden we ook nog “Contract Logarithms”. Als we dit uitvoeren, dan wordt de factor 5 van de logaritme ook achter de logaritme gebracht. In dit geval is dit niet wenselijk, maar dat kan in andere gevallen anders zijn. “Expand Logarithms” doet het omgekeerde. 6.2.2
De syntax van de functie “integrate”
Zoals je in de voorbeelden ziet heeft de functie “integrate” ofwel twee argumenten: integrand + variabele, ofwel vier argumenten: integrand, variabele+twee integratiegrenzen. De functie “integrate” kan niet gebruikt worden met alleen een integrand! Ook niet als die functie slechts één variabele bevat. Bijvoorbeeld:
6.2.3
Oneigenlijke integralen
Ook oneigenlijke integralen worden door Maxima over het algemeen correct berekend. Enkele voorbeelden:
dag van de wiskunde - 20 november 2010
37
Maxima Je krijgt uiteraard maar een resultaat op voorwaarde dat de oneigenlijke integraal convergeert. Bijvoorbeeld:
6.2.4
Het dialoogkader “Integrate” – numerieke integratie
Met de knop
of met het menu-item “Calculus / Integrate…” krijg je een dialoogkader
om de nodige argumenten voor de functie “Integrate” in te vullen. Hierin zie je ook duidelijk welke argumenten moeten gegeven worden.
38 Je kan daarin ook eventueel kiezen om de integraal numeriek te laten berekenen. Dat is nodig in geval Maxima er niet in slaagt om de integraal te berekenen. Bijvoorbeeld:
Blijkbaar lukt het Maxima niet om deze elliptische integraal te berekenen. Selecteer dan de integrand, gebruik de knop “Integrate…”, en klik daar het vinkje “Numerical Integration” aan. Je hebt dan keuze tussen twee werkwijzen, die beiden niet helemaal hetzelfde resultaat geven (vergeet niet dat het om numerieke benaderingsmethoden gaat).
De eerste methode geeft een ietwat raar resultaat: een lijst met vier getallen er in. Het eerste daarvan is de benadering van de integraal, het tweede is een schatting van de absolute fout, het dag van de wiskunde - 20 november 2010
Calculus derde is het aantal keren dat de functie berekend is tijdens de benaderingsmethode, en het vierde tenslotte is een foutencode (0 betekent dat er geen fout opgetreden is). 6.2.5
Integreren van functies met een parameter
Zit er een parameter in de integrand, dan kan de waarde van die parameter dikwijls leiden tot verschillende resultaten. De functie “integrate” houdt daar rekening mee! Als er verschillende mogelijkheden zijn, dan zal Maxima een bijkomende vraag stellen. Bijvoorbeeld:
Op de vraag “Is k positive or negative?” antwoord je met een p of een n, gevolgd door <Enter> 6.2.6 Stel dat
Een oppervlaktefunctie , dan definiëren we een oppervlaktefunctie van f meestal als
∫
.
Een dergelijke constructie kan je in Maxima ook gemakkelijk maken. 39
De functie I is eigenlijk een functie van twee veranderlijken: a en x. Voor het argument a is de functie gedefinieerd als een zogenaamde “array-functie”. Wil je een waarde berekenen, dan moet je uiteraard beide argumenten opgeven.
6.3
Limieten
Limieten worden, weinig verrassend, berekend met de functie “limit”. 6.3.1
De functie “limit”
Normaal gezien heeft deze functie 3 of 4 argumenten: 1) de functie waarvan de limiet moet berekend worden, 2) de variabele die je wilt laten naderen naar een waarde, 3) de waarde waarin je de limiet wil berekenen, en 4) eventueel de “richting” van waaruit je de variabele naar de waarde wil laten naderen.
dag van de wiskunde - 20 november 2010
Maxima Een voorbeeld:
De linker- en de rechterlimiet dus. Het laatste argument (de “richting”) is dus “minus” of “plus”. Het tweede resultaat ∞ betekent uiteraard +∞ . Wil je de tweezijdige limiet berekenen, dan laat je gewoon het vierde argument weg.
Het resultaat “infinity” betekent dat het resultaat “oneindig” is, maar dat het teken onbepaald is. Wil je de limiet berekenen voor x naderend tot ±∞ , dan gebruik je daar “inf” voor. 40
6.3.2
Limiet van een functie met een parameter
Een parameter kan ook weer een grote invloed hebben op het resultaat.
In tegenstelling tot de functie “integrate” stelt de functie “limit” geen vragen over de parameter. Je krijgt gewoon de limiet terug als “naamwoord”, wat betekent dat Maxima niet in staat was een limietwaarde te bepalen. Dat is ook logisch, de limiet hangt immers af van het feit of , dan wel .
dag van de wiskunde - 20 november 2010
Calculus Toch is het mogelijk om deze limiet te berekenen. Voegt een veronderstelling over b toe aan de huidige “context”
Met de functie “assume” kan je voorwaarden aan de huidige context toevoegen. Een “context” is in Maxima omschreven als een lijst van voorwaarden. Je kan deze lijst opvragen met de functie “facts()”.
Willen we nu de limiet laten berekenen in het geval dat , dan moeten we eerst de voorwaarde verwijderen, anders zouden de verschillende voorwaarden een contradictie vormen.
Dit betekent: de voorwaarden zijn niet toegevoegd, de eerste omdat ze redundant is (als dan is ook ), en de tweede omdat ze inconsistent is (in tegenspraak met de reeds bestaande voorwaarde ). Vóór we nieuwe voorwaarden kunnen ingeven moeten we eerst de oude verwijderen. Dat kan met de functie “forget”.
We berekenen opnieuw de limiet.
dag van de wiskunde - 20 november 2010
41
Maxima
7
Matrices
7.1
Een matrix invoeren
Daarvoor gebruik je altijd het menu-item “Algebra / Enter matrix…”. Dat geeft het volgende dialoogkader: Hier kan je kiezen uit: general, diagonal, symmetric, antisymmetric. De keuze heeft invloed op het aantal getallen dat je moet invoeren. Bijvoorbeeld moet je bij een 3x3-diagonaalmatrix slechts 3 getallen invoeren i.p.v. 9 getallen.
Vergeet de naam niet in te vullen! Klik je op OK, dan krijg je een tweede dialoogkader om de elementen van de matrix in te vullen.
42
Dit geeft dan:
Bemerk dat op regel %i1 bij de definitie van A gebruik gemaakt werd van de functie “matrix”. Je moet de rijen van de matrix (= lijsten van getallen) opgeven als argumenten van de functie “matrix”. De elementen van een matrix Een rij van een matrix is dus een lijst van getallen. dag van de wiskunde - 20 november 2010
Matrices De matrix zelf is dan een lijst van zijn rijen. Als je een element van een matrix opvraagt, dan krijg je dus een rij van de matrix. Bijvoorbeeld:
Een element van een matrix vraag je uiteraard op met twee indices.
Een matrix rechtstreeks intypen Gezien het feit dat een matrix een lijst van lijsten is, zou je een matrix ook als volgt kunnen definiëren.
Dit lukt ook wel, want je kan deze bijvoorbeeld optellen bij de matrix A
43
Maar B wordt zelf niet als een matrix weergegeven, maar als een lijst:
Enkel als een matrix ingevoerd werd met de functie “matrix” of het resultaat is van een berekening, zal hij ook als een matrix weergegeven worden. Een matrix definiëren moet dus altijd zo (de ‘B= is natuurlijk niet echt noodzakelijk):
dag van de wiskunde - 20 november 2010
Maxima
7.2
Bewerkingen met matrices
Hier moet je opletten! De klassieke bewerkingen worden in Maxima in principe termsgewijs toegepast. Twee bewerkingen kunnen verwarrend overkomen: vermenigvuldiging en machtsverheffing (vooral tot de macht -1). * = termsgewijs vermenigvuldigen, . (een punt) = de matrixvermenigvuldiging.
44
In Maxima spreekt men over de commutatieve vermenigvuldiging (*) en de niet-commutatieve vermenigvulding ( ⋅ ). Opmerkingen
Om een * te bekomen in Maxima moet je in Edit > Configure het vinkje afzetten bij “Use centered dot character for multiplication”, want anders wordt elk *’tje vervangen door een “centered dot” (een punt als vermenigvuldigingsteken). Bemerk het gebruik van “print”. Het was anders niet mogelijk om de twee matrices in het eerste lid te krijgen.
Een machtsverheffing met een natuurlijke exponent is uiteraard gedefinieerd d.m.v. een vermenigvuldiging, vandaar dat er ook twee machtsverheffingen in Maxima zijn, namelijk: ⏟ ⏟ Bijvoorbeeld:
Voor de inverse matrix
moet je dus de bewerking ^^ gebruiken!
dag van de wiskunde - 20 november 2010
Matrices
Er bestaat ook een functie “invert”, die eveneens de inverse matrix oplevert.
7.3
Functies i.v.m. matrices
Er zijn heel wat functies i.v.m. matrices, teveel om op te noemen. De functie “invert” hebben we al vermeld. We geven hieronder enkele voorbeelden: 45 Determinant en adjunctmatrix
Eigenwaarden en eigenvectoren Het resultaat is een lijst, die bestaat uit twee lijsten. De eerste lijst geeft de eigenwaarden van de matrix, en de tweede geeft de multipliciteiten van die eigenwaarden.
dag van de wiskunde - 20 november 2010
Maxima De methode van Gauss-Jordan ???? Spijtig genoeg bestaat er geen functie om de rijgereduceerde matrix te laten berekenen. Het resultaat dus van de Gauss-Jordanreductie. Er bestaan wel twee functies, “triangularize” en “echelon”, die de matrix GJ-reduceren, maar dan enkel onder de diagonaal. Bijvoorbeeld:
46
Je kan natuurlijk zelf een functie “rref” proberen programmeren, en die in een bibliotheekbestand zetten. Meer daarover in hoofdstuk 8 op blz. 47.
dag van de wiskunde - 20 november 2010
Bibliotheekbestanden
8
Bibliotheekbestanden
Een belangrijke mogelijkheid van Maxima is dat elke gebruiker zelf uitbreidingen kan maken aan het systeem door eigen functies te definiëren (programmeren) en deze op te slaan als een bibliotheekbestand (extensie .mac), in Maxima een “Package” genoemd. Zo’n bibliotheekbestand kan dan ingeladen worden in Maxima, waarna al de extra functies die er in gedefinieerd zijn gebruikt kunnen worden.
8.1
Meegeleverde bibliotheekbestanden
Bij het installeren worden er een aantal bibliotheekbestanden op je harde schijf gezet in de map “C:\Program Files\Maxima-5.22.1\share\maxima\5.22.1\share”. Daarin vind je deelmappen, waarin de meeste van die bib-bestanden (extensie .mac) zich bevinden. Niet alle bib-bestanden zijn interessant voor het middelbaar onderwijs, sommige zijn bedoeld voor heel gespecialiseerde wiskunde, maar sommige zijn wel nuttig. Bijvoorbeeld deze voor kansverdelingsfuncties. Het voorziene tijdsbestek is echter te kort om hier vandaag op in te gaan.
8.2
Bibliotheekbestanden op het internet
We hebben gezien dat in Maxima een “rref” functie ontbreekt. rref staat voor row-reduced echelon form, m.a.w. het resultaat van de Gauss-Jordanreductie. Het zou toch wel nuttig zijn om over een dergelijke functie te kunnen beschikken. Er is ook geen ingebouwde bibliotheek die deze functie bevat. We zoeken daarom op het internet naar bib-bestanden voor Maxima. Zoek bijvoorbeeld in Google naar rref Maxima , en dan vind je zonder twijfel wel een geschikt bibbestand. Bijvoorbeeld in de website http://rosettacode.org/wiki/Reduced_row_echelon_form Hier vind je de code van het bibliotheekbestand (naar onder scrollen tot je de code van Maxima vindt).
Kopieer deze code Plak ze in een leeg venster van Maxima Kies “File / Save As…” Kies dan onderaan in het lijstje “Opslaan als:” de optie “Maxima batch file (*.mac)” en klik dan op de knop “Opslaan”.
De extensie van een bibliotheekbestand is dus *.mac (van macro). Je kunt dit bibliotheekbestand of macro in principe gelijk waar opslaan (en het dan nadien weer openen). Maar het is eenvoudiger als je het bestand plaatst in een map waar ook andere macro’s in zitten, en er voor zorgt dat deze macro nadien automatisch ingelezen wordt bij het opstarten van Maxima. Plaats daartoe het bibliotheekbestand in de volgende map: C:\Users\<username>\Maxima (Uiteraard <Username> vervangen door jouw gebruikersnaam zoals die in Windows gebruikt wordt). dag van de wiskunde - 20 november 2010
47
Maxima
Deze map is niet automatisch aangemaakt na installeren van Maxima. Het bibliotheekbestand inladen en gebruiken Om een bibliotheekbestand in een volgende sessie van Maxima opnieuw te kunnen gebruiken, moet dit natuurlijk opnieuw geopend worden. Daartoe zijn de volgende handelingen nodig.
Kies in het menu voor “File / Load Package…” Blader dan naar de map waar de macro bewaard werd, selecteer daar het bestand “maximarref.mac” en klik dan op “Openen”.
Er verschijnt dan een invoerregel (eindigend op $, dus zonder uitvoer) waaruit blijkt dat het bibbestand ingeladen is. Vanaf nu kunnen we gebruik maken van de functie “rref”.
48
8.3
Zelf een bibliotheekbestand maken
Het is ook mogelijk om zelf functies te definiëren en deze op te slaan als macro. Dit is te vergelijken met de mogelijkheid van utility’s in Derive. Verdere voorbeelden hierover vallen buiten deze kennismakingscursus. Maar alles verloopt eigenlijk zoals de macro rref die van het Internet geplukt is.
8.4
Bib-bestanden automatisch inladen
Waarschijnlijk is het wenselijk dat een bibliotheekbestand zoals hierboven met de functie “Rref”, steeds beschikbaar is als je Maxima opstart. Dus zonder dat de gebruiker iedere keer het bestand moet inladen. Dit is mogelijk door het inladen voor te bereiden in het initialisatiebestand “maxima-init.mac”. Als je het initialistatiebestand in diezelfde map C:\Users\<username>\Maxima zet, dan zal Maxima dat bij het opstarten terugvinden en opstarten.
Maak een maximabestand aan met de volgende opdracht:
dag van de wiskunde - 20 november 2010
Bibliotheekbestanden
Bewaar dit bestand als een wxm-bestand met de naam “maxima-init.wxm” (om het eventueel achteraf nog te kunnen wijzigen) en als een mac-bestand (bibliotheekbestand) met als naam “maxima-init.mac”. Telkens in de map C:\Users\<username>\Maxima Sluit Maxima af, en start Maxima terug op.
Door het feit dat de bestanden in de juiste map staan, zal Maxima bij het opstarten meteen het bibliotheekbestand opnemen dat in “maxima-init.mac” vermeld staat. Van zodra je daarna de functie Rref gebruikt, zal het bibliotheekbestand “maxima-rref” ingeladen worden. De eerste keer zal een waarschuwing verschijnen dat de nodige functies gedefinieerd zijn (alleen de eerste keer).
49
dag van de wiskunde - 20 november 2010
Maxima
9
Grafieken
Er zijn in Maxima zelf voorzieningen om grafieken te maken zowel 2- als 3-dimensionaal. Dit werkt, net zoals al de rest, via functies. Een basisgrafiek maken is niet zo moeilijk, maar van zodra je iets aan het uitzicht wil wijzigen moet je gebruik maken van een hele boel plotopties, wat het geheel niet echt gebruiksvriendelijk maakt. Het is daarom een goed idee om naast het Maxima-venster een Geogebra-venster te plaatsen om daarin de grafieken te tekenen. Het is trouwens heel gemakkelijk om uitdrukkingen vanuit Maxima te kopiëren en in te plakken in het invoerveld van Geogebra. We zullen daarom van de ingebouwde grafische mogelijkheden van Maxima enkel het dialoogkader bespreken, en daarnaast met een voorbeeld tonen hoe we Geogebra kunnen gebruiken om grafische voorstellingen te maken van resultaten uit Maxima.
9.1
50
Grafieken in Maxima zelf
Definieer een functie, bijvoorbeeld:
Klik dan op de knop 1
2
3
4 5
1. 2.
Hier kan je één of meerdere uitdrukkingen invoeren om te laten tekenen. De uitdrukkingen mogen wel allemaal afhankelijk zijn van dezelfde variabele. Hier kan je eventueel kiezen voor “Parametric plot” of voor “Discrete plot”. In het eerste geval krijg je dan een nieuw dialoogkader, waarin je de parametervergelijkingen van een kromme kan invoeren.
dag van de wiskunde - 20 november 2010
Grafieken
3.
4.
5.
In het tweede geval krijg je ook een dialoogkader, waarin je de x- en de y-coördinaten van punten kan invoeren. In het eerste vakje, waar “x” staat, moet je de variabele invoeren, waarvan de uitdrukkingen in (1) afhankelijk zijn. Als dat x is, dan hoef je verder niets te doen. Verder kan je hier ook de minimum- en maximumwaarden voor de x- en de y-as invullen. Als je bij y geen minimum- of maximumwaarde invult, dan worden die berekend zodat de volledige grafiek past binnen het kader. Wil je een logaritmische schaal dan zet je achteraan een vinkje. Het “Format”: “inline” betekent in het werkblad. Verder kan je kiezen voor “gnuplot”, “openmath” of “Default”. De eerste twee zijn open-source-programma’s voor het tekenen van grafieken, die mee geïnstalleerd zijn bij de installatie van Maxima. “Default” betekent standaard “gnuplot”, maar je kan dat wijzigen via optievariabelen. Kies je voor één van beiden, dan wordt de grafiek in een apart venster getekend, en niet in het Maxima-werkblad. Bemerk dat voor de inline-grafieken eigenlijk ook gnuplot gebruikt worden. Hier kan je een aantal gnuplot-opties kiezen. “set grid” is wel duidelijk, maar de andere misschien minder. “set zeroaxis” betekent dat een x-as en een y-as getekend worden, maar in combinatie met “set grid” verdwijnen deze assen toch. “set size ratio 1” betekent dat de hoogte van de grafische voorstelling gelijk genomen wordt aan de breedte. De grafiek wordt dus binnen een vierkant getekend.
Bovenstaand voorbeeld geeft het volgende resultaat:
51
Wil je nog iets meer uitleg over de functie “wxplot2d”, dan kan je terecht op: http://wxmaxima.sourceforge.net/wiki/index.php/Tutorials (klik daar op “Plotting”).
dag van de wiskunde - 20 november 2010
Maxima
9.2
Grafieken in GeoGebra
Je kan resultaten uit Maxima ook kopiëren naar het invoerveld van Geogebra en daar laten tekenen. Daarbij moet je natuurlijk letten op het verschil in syntax tussen Maxima en Geogebra. Bijvoorbeeld wordt een functie in Maxima gedefinieerd met ≔ terwijl dat in Geogebra alleen met een gelijkheidsteken gebeurt. Wil je dus bijvoorbeeld de grafiek tekenen van de volgende functie:
Dan mag je zeker niet de hele uitdrukking kopiëren, want anders geeft de ≔ in Geogebra een foutmelding. Het volstaat echter om enkel het tweede lid te kopiëren en te plakken in Geogebra om een grafiek van de functie te bekomen. Wil je toch ook de naam van de functie mee kopiëren, dan kan je dat wel doen, maar dan moet je in Geogebra het dubbelpunt eerst verwijderen vóór de uitdrukking laat uitvoeren (door op <Enter> te drukken). Om handig te werken kan je de vensters van Maxima en Geogebra naast elkaar plaatsen, zodat je gemakkelijk van het ene venster naar het andere kan switchen. 52
dag van de wiskunde - 20 november 2010