Dag van de wiskunde 2e en 3e graad 20 november 2010

Maat: px
Weergave met pagina beginnen:

Download "Dag van de wiskunde 2e en 3e graad 20 november 2010"

Transcriptie

1 Maxima Een gratis en krachtig CAS (Computer Algebra System) Dag van de wiskunde 2e en 3e graad 20 november 2010 Paul Decuypere, VVKSO

2

3 Inhoud 1 Inleiding Gebruikersinterface De gebruikersinterface Invoeren en wijzigen van uitdrukkingen Gebruik maken van de regelnummers Absolute verwijzingen Relatieve verwijzingen Rangschikking van letteruitdrukkingen Verschillende vormen van is gelijk aan Nog enkele voorbeelden Constanten Wiskundige functies Commando s in Maxima Enkele voorbeelden Het gebruik van menu s en/of knoppenbalken De knoppenbalken van wxmaxima Menu-items en knoppen Knoppen/menu-items zonder dialoogkader Knoppen/menu-items met dialoogkader Gebruik van het contextmenu Hulp vragen Oplossen van vergelijkingen en stelsels vergelijkingen De functie solve Oplossingen omzetten naar decimale getallen Alleen reële oplossingen Andere functies voor het oplossen van vergelijkingen en/of stelsels to_poly_solve find_root Een omgeving creëren voor berekeningen Een probleem Een berekening maken in een omgeving Calculus... 35

4 6.1 Afgeleide Integralen De functie Integrate De syntax van de functie integrate Oneigenlijke integralen Het dialoogkader Integrate numerieke integratie Integreren van functies met een parameter Een oppervlaktefunctie Limieten De functie limit Limiet van een functie met een parameter Matrices Een matrix invoeren Bewerkingen met matrices Functies i.v.m. matrices Bibliotheekbestanden Meegeleverde bibliotheekbestanden Bibliotheekbestanden op het internet Zelf een bibliotheekbestand maken Bib-bestanden automatisch inladen Grafieken Grafieken in Maxima zelf Grafieken in GeoGebra... 52

5 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 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 Op de Nederlandse site 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. 5 Maxima wordt nog heel regelmatig aangepast.

6 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

7 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:

8 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

9 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 Absolute verwijzingen In een uitdrukking kan je gebruik maken van de regelnummers. Bijvoorbeeld: 9 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:

10 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! 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 <Pijl Beneden> te drukken en dit te herhalen tot je de laatste invoerregel hebt laten herrekenen. Je krijgt dan: dag van de wiskunde 20 november 2010

11 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 %i 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.

12 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 Verschillende vormen van is gelijk aan Toekenning : Wordt gebruikt om een waarde te geven aan een variabele. 12 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 <Delete>. 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

13 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 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 Wiskundige functies sin(x) asin(x) cos(x) acos(x) tan(x) atan(x) log(x) log(x)/log(10) sqrt(x) x^(1/n) sinusfunctie Boogsinusfunctie cosinusfunctie Boogcosinusfunctie tangensfunctie Boogtangensfunctie de natuurlijke logaritme Briggse logaritme vierkantswortel n de machtswortel

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

15 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 ( ). Euclidische deling - teller en noemer van een breuk 15 Opgave: bepaal de schuine asymptoot van de grafiek van f. en bereken het snijpunt van die S.A. met 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.

16 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 Elke oplossing wordt gegeven als een lijst van vergelijkingen van de vorm [ ]. In dit 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!

17 Commando s in Maxima 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) 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 Plot 3D plot2d of wxplot2d plot3d of wxplot3d Plot / Plot 2d Plot / Plot 3d 17

18 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 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 intypen (niet op <Enter> drukken), en dan onmiddellijk op de knop Je krijgt dan dit: klikken. 18 Een niet uitgevoerde invoerregel en een tweede regel met daarop het commando. ingevoerde uitdrukking werd gekopieerd naar de tweede regel. De uitdrukking intypen en op <Enter> drukken, daarna klik je op de knop De 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.

19 Commando s in Maxima Als je bijvoorbeeld de uitdrukking invoert en onmiddellijk het menu-item kiest, dan krijg je: 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

20 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: Solve daar is het hoofdargument de vergelijking die moet opgelost worden Diff daar is het hoofdargument de functie die moet afgeleid worden enz 3.3 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.

21 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 (in de toolbar) open je de Maxima manual. Hulp vragen met? of?? 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. 21 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 <Ctrl K> en <Ctrl Shift K> 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 <Ctrl K>

22 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 <F1> 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 <Ctrl Shift K> 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 <Tab>-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.

23 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. moeten dan meestal ook meerdere onbekenden opgelost worden. Bijvoorbeeld: Daaruit

24 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 kan daarbij eventueel sommige zaken weglaten die overbodig zijn.. Je 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. 24 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:

25 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

26 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 dat geval geeft float 16 cijfers na de komma, en geeft bigfloat 16 beduidende cijfers + de exponent van de macht van 10 waarmee het vermenigvuldigd moet worden. Als 2 fpprintprec 16, dan geeft float fpprintprec cijfers na de komma, en bfloat geeft hetzelfde aantal beduidende cijfers. 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).

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

28 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!

29 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 veeltermvergelijkingen linsolve lost stelsels van lineaire vgln op. algsys We overlopen de verschillende mogelijkheden 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 \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.

30 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 Z ). We krijgen m.a.w. alle oplossingen van de goniometrische vergelijking in de gebruikelijke notatie! Wij zouden schrijven: en, met Z. 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:

31 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 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)..

32 Maxima 5 Een omgeving creëren voor berekeningen 5.1 Een probleem Opgave: bereken de punten van cirkel met, en ook de punten die 3 als tweede coördinaat hebben. 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. 32 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: 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

33 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: of beter: 33 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?

34 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:

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

36 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: 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 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:

37 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 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. 37 De functie integrate kan niet gebruikt worden met alleen een integrand! Ook niet als die functie slechts één variabele bevat. Bijvoorbeeld: Oneigenlijke integralen Ook oneigenlijke integralen worden door Maxima over het algemeen correct berekend. Enkele voorbeelden:

38 Maxima Je krijgt uiteraard maar een resultaat op voorwaarde dat de oneigenlijke integraal convergeert. Bijvoorbeeld: 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

39 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) 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> Een oppervlaktefunctie Stel dat, 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 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.

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

41 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 ). 41 Vóór we nieuwe voorwaarden kunnen ingeven moeten we eerst de oude verwijderen. Dat kan met de functie forget. We berekenen opnieuw de limiet.

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

43 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):

44 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!

45 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: Determinant en adjunctmatrix 45 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.

46 Maxima De methode van Gauss-Jordan???? Spijtig genoeg bestaat er geen functie om de rijgereduceerde matrix te laten berekenen. resultaat dus van de Gauss-Jordanreductie. Het 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.

47 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 \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. 47 Zoek bijvoorbeeld in Google naar rref Maxima, en dan vind je zonder twijfel wel een geschikt bibbestand. Bijvoorbeeld in de website 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).

48 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 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:

49 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

50 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 Grafieken in Maxima zelf Definieer een functie, bijvoorbeeld: 50 Klik dan op de knop Hier kan je één of meerdere uitdrukkingen invoeren om te laten tekenen. De uitdrukkingen mogen wel allemaal afhankelijk zijn van dezelfde variabele. 2. 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.