Handleiding Maple 10
|
|
|
- Annemie Veenstra
- 10 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Handleiding Maple 10
2
3 Handleiding Maple 10 Metha Kamminga van Hulsen
4 Meer informatie over deze en andere uitgaven kunt u verkrijgen bij: Sdu Klantenservice Postbus EA Den Haag tel.: fax: c 2006 Sdu Uitgevers bv, Den Haag 1 e druk, 1 e oplage januari 2006 Academic Service is een imprint van Sdu Uitgevers bv. Zetwerk: Elvenkind B.V., Dordrecht Omslagontwerp: Studio kader, Stolwijk Druk- en bindwerk: DeltaHage, Den Haag ISBN NUR 123/991 Alle rechten voorbehouden. Alle auteursrechten en databankrechten ten aanzien van deze uitgave worden uitdrukkelijk voorbehouden. Deze rechten berusten bij Sdu Uitgevers bv. Behoudens de in of krachtens de Auteurswet 1912 gestelde uitzonderingen, mag niets uit deze uitgave worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand of openbaar gemaakt in enige vorm of op enige wijze, hetzij elektronisch, mechanisch, door fotokopien, opnamen of enige andere manier, zonder voorafgaande schriftelijke toestemming van de uitgever. Voorzover het maken van reprografische verveelvoudigingen uit deze uitgave is toegestaan op grond van artikel 16 h Auteurswet 1912, dient men de daarvoor wettelijk verschuldigde vergoedingen te voldoen aan de Stichting Reprorecht (postbus 3060, 2130 KB Hoofddorp, Voor het overnemen van gedeelte(n) uit deze uitgave in bloemlezingen, readers en andere compilatiewerken (artikel 16 Auteurswet 1912) dient men zich te wenden tot de Stichting PRO (Stichting Publicatie- en Reproductierechten Organisatie, Postbus 3060, 2130 KB Hoofddorp, Voor het overnemen van een gedeelte van deze uitgave ten behoeve van commercile doeleinden dient men zich te wenden tot de uitgever. Hoewel aan de totstandkoming van deze uitgave de uiterste zorg is besteed, kan voor de afwezigheid van eventuele (druk)fouten en onvolledigheden niet worden ingestaan en aanvaarden de auteur(s), redacteur(en) en uitgever deswege geen aansprakelijkheid voor de gevolgen van eventueel voorkomende fouten en onvolledigheden. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, electronic, mechanical, photocopying, recording or otherwise, without the publisher s prior consent. While every effort has been made to ensure the reliability of the information presented in this publication, Sdu Uitgevers neither guarantees the accuracy of the data contained herein nor accepts responsibility for errors or omissions or their consequences.
5 Woord vooraf Deze Handleiding Maple 10 is een herziene versie van de handleiding die in 2002 verscheen. De versies van Maple volgen elkaar in hoog tempo op en er wordt hard gewerkt om met de tijd mee te gaan en de gebruiksvriendelijkheid te verhogen. De handleiding die nu voor je ligt, is te gebruiken bij Maple 8, 9, 9.5 en 10. Bij het boek hoort een cd-rom met een demo-versie van het computeralgebrasysteem Maple 10 en verder nog de invoerregels van alle voorbeelden van het gehele boek, de appendix in de vorm van een werkblad, enkele toetsbanken voor het toetsprogramma MapleTA, enkele Maplets met broncode en een lijst met Maple-commando s per hoofdstuk. Niets staat meer in de weg om snel aan de slag te gaan. Op de cd-rom is het ook mogelijk over de inputregels van de voorbeelden voor versie 9 te beschikken. De handleiding is commando-georiënteerd ten behoeve van de reproduceerbaarheid van de werkbladen (worksheets). Er worden echter ook aanwijzingen gegeven voor menu-gestuurde opdrachten die wat gebruiksvriendelijker zijn voor de incidentele gebruiker van het pakket. Op de website kamminga is steeds de laatste informatie te vinden over nieuwe versies en meer geavanceerde aanvullingen op de handleiding. Op hogescholen en universiteiten wordt steeds meer gebruikgemaakt van digitale leeromgevingen en internet. Dat alles brengt met zich mee dat er steeds meer op een digitale manier gecommuniceerd gaat worden. Maple kan daarin een belangrijke bijdrage leveren op het gebied van de schriftelijke communicatie met formules en berekeningen, maar ook op het gebied van Maplets waarmee visualisaties van wiskundige begrippen en trainingen tot de mogelijkheden behoren. In de handleiding is een hoofdstuk opgenomen met tips voor het gebruik van Maple als tekstverwerker, ook in combinatie met internet en tips over het maken van Maplets. Er zijn uitgebreide exportmogelijkheden voor werkbladen. Ook de exportmogelijkheden van de grafieken, animaties, spreadsheets en matrices zijn talrijk. Bovendien is Maple compatibel met vele andere applicaties. Er is in deze handleiding ook bijzondere aandacht besteed aan het zo overzichtelijk mogelijk presenteren van de in- en uitvoer van berekeningen en grafieken, zodat deze opgenomen kunnen worden in verslagen en lesmateriaal. Alle grafieken in dit boek, kunnen ook zelf gemaakt worden. In hoofdstuk 4 wordt een overzicht gegeven van de verschillende wiskundige objecten die in de handleiding voorkomen. Dit is gedaan om het objectgeoriënteerde programma beter te begrijpen en bovendien heeft het te maken met de menu s die aangeboden worden bij het gebruik van de rechtermuisknop. Het programma herkent namelijk het object dat aangeklikt wordt en biedt een bijpassend menu aan voor elementaire berekeningen en bewerkingen. Niet alle mogelijkheden kunnen in deze handleiding de revue passeren, maar op de website worden er nog enkele aangestipt. Vanaf versie 8 kan men zelf Maplets maken. Dat zijn gebruiksvriendelijke dialoogboxen ten behoeve van visualisaties in wisselwerking met de gebruiker. Met de komst van versie 10 is het maken van Maplets een stuk eenvoudiger geworden met behulp van de Maplet Builder. Er kan hierin ook gewerkt worden met programmeerbare formules (MathML). De gebruiker kan met behulp van de inhoudsopgave en de uitgebreide index gemakkelijk iets
6 vi Handleiding Maple 10 van zijn gading vinden. Alle voorbeelden staan op zichzelf en zijn afzonderlijk na te doen en te bewerken. Met de vele verwijzingen hoeft niet de volgorde van het boek aangehouden te worden om toch snel het niveau te bereiken van een handige gebruiker. Tevens is deze handleiding uitermate geschikt voor zelfstudie en kan parallel aan elke wiskundemethode aangewend worden op HBO en universitair niveau. Veel succes bij het gebruik van deze handleiding. Metha Kamminga-van Hulsen Lihas, Evia, Griekenland januari 2006
7 Inhoudsopgave Woord vooraf Inhoudsopgave 1 Snel aan de slag Inleiding Instellingen Maple Classic Worksheet File Association Mogelijke instellingen Instellingen voor Excel Openen en opslaan van het werkblad Berekeningen met aanwijzingen Afsluittekens en procentteken Toekenning Vermenigvuldigen Decimale getallen Namen voor de getallen i, e en π Gebruik van paletten Contextgevoelige menu s met de rechtermuisknop Oplossen van een vergelijking met de rechtermuisknop Grafieken maken met de rechtermuisknop Standaardfuncties Absolutewaardefuncties, wortels en oneigenlijke machten De exponentiële functie en de logaritmische functie Goniometrische en cyclometrische functies Faculteitfunctie en binomiaalfunctie Standaardfuncties met een Maplet Functienotatie Maple als tekstverwerker Het werkblad Paragrafen maken Formules in de tekst Hyperlinks en bookmarks Spreadsheets Helpfunctie Veelvoorkomende beginnersfouten 21 2 Grafieken Inleiding Plotopties Smartplot De Plot Builder 24 v vii
8 viii Handleiding Maple Functies van één variabele De eenheidsstapfunctie (Heaviside) Functies in stukken Functies met absolute waarden Vectorfuncties (parameterkrommen) Vlakke krommen Ruimtekrommen Functies met poolcoördinaten Impliciete functies Functies van twee variabelen Contourplot Doorsnijdingen met een vlak Verschillende soorten grafieken in één figuur Asymptoten Animaties Het doorlopen van de grafiek Functies met parameters in een animatie Gebruik van display Animaties met Maplets Grafiek met punten, pijlen en tekst 52 3 Basisvaardigheden Inleiding Formulemanipulatie Substitutie Haakjes wegwerken (expand) Ontbinden in factoren (factoriseren) Wortelvormen Breuken Kwadraat afsplitsen Vergelijkingen Exact oplossen (solve) Numeriek oplossen (fsolve) Variabele vrijmaken uit een vergelijking Het toekennen van de oplossing Stelsels vergelijkingen Ongelijkheden Limieten Limieten met parameters Differentiëren Integreren Onbepaald integreren (primitiveren) De bepaalde integraal Integratie met parameters Maplets met animaties en tutors Differentiëren met Maplets 81
9 0 Inhoudsopgave ix Integreren met Maplets 81 4 Overzicht van wiskundige objecten Formules uitdrukkingen en functies Vergelijkingen en ongelijkheden Intervallen (ranges) Operanden Randomgetallen Rijen (sequenties) Het dollarteken voor een rij De som van een rij Lijsten (lists) Verzamelingen (sets) Vectoren Geavanceerde berekeningen met vectoren Tekenen van vectoren Matrices Arrays Strings Omzettingen 96 5 Differentiëren Inleiding De raaklijn aan de grafiek (functie van één variabele) De partiële afgeleide (functies van twee variabelen) De richtingsafgeleide Gradiënt Maximum, minimum en zadelpunt Functies in stukken Eenheidspuls (Dirac-puls) Differentiëren van een functie in stukken Differentiëren van een vectorfunctie Differentiëren van impliciete functies Differentiëren van functies met poolcoördinaten Machtreeksontwikkeling Praktische tips Inleiding Het gebruik van indices en subscript Het gebruik van quotes Quotes Backquotes Dubbele quotes Afspraken met alias, assume en unprotect Alias Assume Unprotect 119
10 x Handleiding Maple Instellingen met interface De imaginaire eenheid Rekenen met alleen de reële getallen Eenheden Maplets MapleTA Het commandoevalb Maple-commando s binnen MapleTA MathML Formulemanipulatie Inleiding Vereenvoudigen en herleiden Polynomen herleiden Breuken herleiden Wortelvormen herleiden Omzettingen en combinaties Herleiden met gebruik van vergelijkingen De Gröbner-basis Optimaliseren Optimaliseren algemeen Optimalisatie-methodes Lineair programmeren De grafiek van het toelatingsgebied bij lineair programmeren Lineaire algebra Inleiding Bewerkingen met vectoren Lineaire bewerkingen Het inwendig product (dotproduct) Lengte van een vector Hoek tussen twee vectoren Eenheidsvector Vectorfunctie Vectorveld Het uitwendig product (crossproduct) Bewerkingen met matrices Combineren van matrices Getransponeerde matrix, determinant en inverse matrix Matrixoptelling, -vermenigvuldiging en eenheidsmatrix Matrices en vectoren Het blokproduct Raakvlak aan een functievlak Eigenwaarden en eigenvectoren Stelsels vergelijkingen Vectorvergelijkingen algemeen Lineaire vergelijkingen 162
11 0 Inhoudsopgave xi Eliminatiemethode van Gauss Kleinste kwadratenmethode Integreren Inleiding Oneigenlijke integralen Integreren van functies in stukken (piecewise) Oneindige discontinuïteit van de integrand Oneigenlijke integraal met parameter De normale verdeling Enkele toepassingen Booglengte Meervoudige integratie Inhoudsbepaling met de dubbelintegraal Oppervlaktebepaling met de dubbelintegraal Dubbelintegraal met poolcoördinaten Laplace-transformatie Voorbeelden van Laplace-getransformeerde De inverse Laplace-transformatie Fourier De Fourier-reeks De Fourier-transformatie Complexe getallen Inleiding Basiskennis van de complexe getallen Complex geconjugeerde en basisbewerkingen Het commandoevalc Reële deel en imaginaire deel Modulus en argument Het complexe vlak De formule van Euler Vergelijkingen oplossen in C Binomiaalvergelijkingen Grafieken van complexe functies Polair diagram Bode diagram Poolbanen (rootlocus) Differentiaalvergelijkingen Inleiding Differentiaalvergelijkingen van de eerste orde Veelvoorkomende eerste-orde DV s Het aanbieden van de DV en de gedaante van de oplossing Differentiaalvergelijkingen van de tweede orde Lineaire DV met constante coëfficiënten Niet-lineaire systemen 217
12 xii Handleiding Maple Algemene tips voor differentiaalvergelijkingen Functienotatie Het invoeren van een DV Integratieconstanten en parameters Randvoorwaarden Lijnelementenveld Stelsels differentiaalvergelijkingen Numerieke oplossingen Oplosmethoden Curvefitting Inleiding Regressiekrommen (Trendlijnen) Splines Lagrange-polynomen Aanbieden van de data 232 Literatuur 235 Index 237
13 1 Snel aan de slag 1.1 Inleiding Een computeralgebrasysteem is een krachtige rekenmachine die naast het gewone rekenen met getallen ook symbolisch en algebraïsch kan rekenen. Bovendien hebben computeralgebrasystemen uitgebreide grafische mogelijkheden. Onder symbolisch rekenen verstaan we het rekenen met andere objecten dan getallen, bijvoorbeeld met veeltermen, functies, rijen en vectoren. Algebraïsch rekenen wil zeggen, niet afgerond rekenen. Dit in tegenstelling tot wat er in numerieke programma s gebeurt. De berekeningen waaraan we hier denken, zijn bijvoorbeeld: differentiëren, integreren, het oplossen van stelsels vergelijkingen, enzovoort. Computeralgebrasystemen zijn in tegenstelling tot numerieke programma s interactieve programma s; de gebruiker geeft opdracht, het computeralgebrasysteem voert de berekeningen uit en aan de hand van de uitkomst van de berekening besluit de gebruiker tot een nieuwe opdracht. Samenvattend kunnen we dus zeggen dat een computeralgebrasysteem een interactief programma is ten behoeve van symbolische en algebraïsche wiskundige berekeningen. Maple is zo n systeem waarbij de grafische mogelijkheden bijzonder groot zijn. Bovendien zijn de numerieke mogelijkheden in de laatste versies van Maple enorm uitgebreid en doen nauwelijks onder voor specifiek numerieke programmatuur. Rond 1980 begon men aan de Universiteit van Waterloo in Canada aan de ontwikkeling van Maple en dit programma is momenteel één van de grootste computeralgebrasystemen. Het is zelfs mogelijk documenten te maken met berekeningen, tekst, formules en grafieken. Zo n document wordt werkblad (worksheet) genoemd. In paragraaf 1.6 wordt aandacht besteed aan de tekstverwerking binnen het programma en paragraaf 6.8 wordt de mogelijkheid tot het maken van Maplets aangegeven. Het programma bevat ook nog de mogelijkheid om te programmeren, maar de bespreking van dit onderdeel valt buiten het bestek van dit boek, afgezien van een enkel voorbeeld. 1.2 Instellingen Maple Classic Worksheet Controleer welke versie van Maple je gebruikt. Dit boek is geschreven met Maple 10 en ook geheel gecontroleerd voor de versies 8, 9 en 9.5. De versies 6 en 7 werken soms iets verschillend, maar de commando s zijn over het algemeen hetzelfde. De aangeboden menu s zullen in hogere versies iets uitgebreider zijn. Voor versies 6, 7 en 8 wordt verwezen naar de Handleiding Maple 8 van 2002 en voor versies ouder dan 6 naar de Handleiding Maple van File Association Er zijn twee manieren om met Maple te werken. In dit boek wordt verondersteld dat er gewerkt wordt met Maple Classic Worksheet. Deze interface, waarvan de bestanden de extensie.mws hebben, werkt iets eenvoudiger en sneller dan de standaardinterface waarvan de bestanden de extensie.mw hebben en is verder ongevoelig voor gebruik in verschillende
14 2 Handleiding Maple 10 versies die eventueel door elkaar gebruikt kunnen worden, wat een groot voordeel is. Controleer of de bestanden automatisch in de juiste interface geopend zullen worden (met dubbelklikken op het bestand in de verkenner) op de volgende manier: Met Start, Programs, Maple10, Tools, Worksheet File Assosiation Selector kunnen de instellingen zó gezet worden, dat met MW File Association gekozen wordt voor de standaard Maple 10 interface en met MWS File Association voor Classic Worksheet Maple 10. Deze instellingen zijn ook te bereiken via de verkenner bij Maple10: bin.win met ToggleAssociation.exe. Op internet worden regelmatig aanvullingen gegeven op deze handleiding met informatie over nieuwe versies van Maple. Zie de website bij dit boek: kamminga. Werkbladen (worksheets) die gemaakt zijn in de zogenoemde Maple Classic Worksheetinterface, kunnen zonder problemen in hogere en lagere versies geopend worden. Neem dan wel steeds de volgende maatregelen. 1. Met het dubbelklikken op een bestaand werkblad in de file manager opent Maple automatisch in de juiste interface. Als dat niet zo is, check dan de File Association Selector zoals hierboven beschreven. 2. Om Maple te openen met Programs, Maple Classic Worksheet kies dan steeds voor Maple Classic Worksheet. 3. Bij het opslaan van het werkblad is het aan te bevelen om de output eruit te halen met Edit, Remove Output. Het werkblad kan dan zonder problemen in een andere versie geopend worden. 4. Open het werkblad (eventueel in een andere versie) en maak het actief door middel van Edit, Execute Worksheet. Er is natuurlijk dan wel kans dat er dingen niet mogelijk zijn in een oudere versie die in een nieuwe versie wel mogelijk zijn. Andersom gaat het meestal wel goed Mogelijke instellingen Na het starten van het programma verschijnt een Windows-scherm met een menubalk, een knoppenbalk en een contextbalk. Zie figuur 1.1. contextbalk knoppenbalk menubalk Figuur 1.1 Het werkblad vertoont bovenaan de prompt (>). Als je in plaats van dit teken een vraagteken ziet, klik dan in de contextbalk op de meest linkse knop met de x. Het vraagteken verandert dan in de prompt (>) en er kan iets ingevoerd worden in Maple notation. Dit teken geeft aan dat Maple wacht op een opdracht in de vorm van machinetaal, zoals je formules intikt in een computer: met sterren en dakjes en / voor deling en dergelijke. Tik bijvoorbeeld in x^2+5; (dus afsluiten met een puntkomma) en druk op Enter. Je ziet dan in
15 1 Snel aan de slag 3 de uitvoer een blauwe formule zoals de formule ook in boeken verschijnt (dit noemen we de tweedimensionale presentatie, immers het kwadraat staat iets hoger genoteerd). Het voordeel van de invoer in Maple notation (of ook wel Maple syntax genoemd) is, dat je later precies kunt reconstrueren wat je ingetikt hebt. Ook komt er bij verkeerd intikken een knipperende cursor te staan precies op de plaats waar je mogelijk een fout betreffende de syntax hebt getikt. Voor verdere instellingen gaan we naar de menubalk bij File en kiezen bij Preferences eerst voor tabblad General. Vink de checkbox Balloon Help aan. Hiermee komen er aanwijzingen te staan als de muis over een van de knoppen gaat (zie links in figuur 1.1). Vervolgens is het verstandig om meteen ook AutoSave te activeren. Het werkblad wordt dan veiligheidshalve met de extensie MAS.mws opgeslagen na een instelbaar aantal minuten, zodat niet direct het werkblad waaraan je werkt wordt overschreven. Als er dan iets mocht gebeuren, is dit het reservebestand. Het werkblad moet om te beginnen dan wel eerst opgeslagen zijn onder een naam. Voordat je de instellingen afsluit, beslis dan voor Apply Globally, dan zullen deze instellingen gelden voor ieder werkblad waarin je gaat werken. Vervolgens kun je bij het tabblad I/O Display (Input/Output) de instellingen controleren of de input inderdaad op Maple Notation staat en de output op Standard Math Notation. Het wil dus zeggen dat de input goed te controleren is op juistheid wat betreft het intikken en de output goed te controleren is doordat de formule gepresenteerd wordt zoals gebruikelijk is (twee dimensionaal). Voor de rest laat je alle andere instellingen onveranderd Instellingen voor Excel Met het oog op uitwisselbaarheid van de spreadsheets in Maple met die van Excel, is het handig om nu ook de instellingen bij Excel klaar te zetten. Open Excel en kies bij menu Extra (Tools) voor Invoegtoepassingen (Ad-Ins) en zoek de Maple Excel Ad-In. Als deze er niet bij staat, moet er nog iets geladen worden. Klik dan op Bladeren (Browse) en navigeer naar de map waarin Maple geïnstalleerd is. Daarin bevindt zich een map Excel waarin je dan het bestand WMIMPLEX.xla selecteert waarna je vervolgens op OK klikt. De checkbox van de Maple Excel Add-In kan nu aangevinkt worden en na OK worden er bij Excel knopjes aangemaakt waarmee er het een en ander van Maple naar Excel gekopieerd kan worden en andersom. Ook is de Maple-functionaliteit binnen Excel nu mogelijk. Je kunt binnen Excel op een bepaalde manier dan gebruikmaken van allerlei Maple-commando s: met maple(" ") waar binnen de dubbele quotes de Maple-opdracht komt te staan. Probeer in een cel in Excel eens het volgende in te tikken: =maple("evalf(pi)") In deze cel komt dan keurig het getal te staan. Een en ander is ook na te lezen door in Maple in te tikken:?excel. Zie verder bij spreadsheets paragraaf Openen en opslaan van het werkblad Start Maple op in Classic Worksheet. Als je Maple wilt verlaten, sluit je op de gebruikelijke manier af in Windows. Er wordt dan gevraagd of je het werkblad wilt bewaren. Als je toch al in Maple Classic Worksheet bezig was, dan wordt het werkblad automatisch ook als Classic Worksheet bewaard, maar het kan ook op andere manieren bewaard worden. De voor ons meest interessante manieren zijn: als html-bestand (waarbij automatisch frames aangemaakt kunnen worden als je met paragrafen werkt) en als rtf-bestand (Richt Text Format). Deze laatste manier is geschikt om in Word te openen en daarin verder te werken. Verder is het ook mogelijk om het werkblad als Maple Worksheet (met extensie.mw) te bewaren waardoor het te openen is in
16 4 Handleiding Maple 10 de standaardinterface van Maple. Gebruik echter deze twee interfaces niet door elkaar. Ze zijn zeer slecht uitwisselbaar! Op de website behorende bij dit boek, wordt de werking van het standaardinterface toegelicht. Zie verder voor Maple als tekstverwerker paragraaf 1.6. Om weer een nieuw werkblad te openen kun je met de muis klikken op het meest linkse vakje van de knoppenbalk. Het beste is dan te beginnen met het intikken van restart afgesloten met een puntkomma, zodat alle eventuele toekenningen (zie paragraaf 1.3.2) ongedaan gemaakt worden. Je kunt op deze manier meerdere werkbladen tegelijk gebruiken. Houd er echter wel rekening mee dat toekenningen in het ene openstaande werkblad ook tegelijk gelden in een andere werkblad dat openstaat. Als je alleen één openstaand werkblad wilt afsluiten, gaat dat op de gebruikelijke manier met Windows. (Er wordt dan gevraagd of het werkblad bewaard moet worden.) Als het werkblad afgesloten is (maar Maple nog niet), blijven echter wel alle toekenningen bestaan! Wees daarop bedacht, vooral als je met meer dan één werkblad bezig bent. Begin daarom dus een nieuwe sessie altijd met restart. Als je Maple echt wilt verlaten, sluit je af op de gebruikelijke manier in Windows. Mocht een berekening erg lang duren en je wilt de berekening stoppen, klik dan op de rode stopknop in de knoppenbalk. Je hebt kans dat de berekening dan afgebroken wordt. Het lukt echter niet altijd om Maple te stoppen! Dus sla je werkblad regelmatig op. Zie voor meer informatie over het opslaan van het werkblad in html-formaat de website behorende bij dit boek. 1.3 Berekeningen met aanwijzingen Afsluittekens en procentteken Je kunt op vrijwel dezelfde manier met gehele getallen gaan rekenen als op een gewone rekenmachine. Let op: vrijwel! Er bestaan wat verschillen in de invoer. Het belangrijkste verschil is dat een invoerregel altijd afgesloten moet worden met een afsluitteken. Dat kan een puntkomma zijn of een dubbele punt. Bij afsluiting met een puntkomma (semicolon) komt het resultaat van de berekening op het scherm te staan; bij afsluiting met een dubbele punt komt er niets op het scherm te staan, terwijl de berekening wél is uitgevoerd. Je kunt in beide gevallen verder werken met het resultaat van de berekening. Na het afsluitteken (puntkomma) moet je laten weten dat je klaar bent met het typen van de opdracht. Dit doe je door op Return of Enter te drukken. Het is niet erg als je per ongeluk het afsluitteken vergeten bent. Er komt dan een waarschuwing en je kunt de regel dan alsnog corrigeren. Er wordt pas gerekend als er een afsluitteken verschijnt en het wel of niet intikken van spaties is totaal onbelangrijk. Als het commando langer is dan een regel en je wilt op de volgende regel verder gaan, druk dan op Shift-Return. Voorbeeld 1.1 Afsluitteken en procentteken In de Maple-sessie die volgt, zie je precies wat er op het scherm verschijnt. Lees ook de toelichting en probeer dingen uit met behulp van zelfbedachte voorbeelden. Het >-teken aan het begin van de invoerregel is de prompt van Maple, dat hoef je dus niet te typen. > restart; 108/4+3*7; > %+a; > 6^2-6; a 30
17 1 Snel aan de slag 5 > 5!: %-1*2*3*4*5; 0 Toelichting: Merk op dat een regel afgesloten door een dubbele punt weliswaar geen resultaat afdrukt, maar wel oplevert. Je weet waarschijnlijk wel dat het teken ˆ voor machtsverheffen staat, / voor delen en het teken! voor faculteit (5-faculteit betekent , zie ook bij de standaardfuncties paragraaf 1.5). Het procentteken (%) zoals te zien is in een van de bovenstaande regels, levert het resultaat van de laatste invoerregel, ongeacht of deze nu is afgesloten door middel van een dubbele punt of door een puntkomma (semicolon). Dit handigheidje werkt tot maximaal drie opdrachten terug. Dus %% levert het resultaat van twee opdrachten terug en %%% dat van drie opdrachten terug. Het is echter niet aan te raden hiervan veel gebruik te maken zoals in de rest van het boek te zien is. Maak liever gebruik van namen, zodat het werkblad beter leesbaar is en er geen onbegrijpelijke berekeningen kunnen ontstaan. Echter soms kan het wel handig zijn om een mooie eenvoudige uitvoer te garanderen als je met vertraagde evaluatie werkt. Zie voorbeeld 6.2 met de quotes of voorbeeld 3.31 met gebruikmaking van value Toekenning Bij het gebruik van namen is het werkblad beter leesbaar. Je kent dan aan een naam een bepaald getal of bepaalde berekening toe. Voorbeeld 1.2 Toekenning Om bijvoorbeeld af te spreken dat voortaan a altijd gelijk is aan 5! (5 faculteit betekent , zie ook paragraaf 1.5) is de volgende toekenning handig om deze later weer te kunnen gebruiken. Spreek dit af door gebruik te maken van := (dubbele punt en isgelijkteken). Dit is het teken voor een toekenning. > restart; a:=5!: a-1*2*3*4*5; 0 Toelichting: Tik niet in dergelijke gevallen een isgelijkteken, want dan is er gewoon een gelijkheid ingevoerd en geen toekenning. Zie ook bij vergelijkingen paragraaf 3.3. Na het invoeren van de toekenning is afgesloten met een dubbele punt. Op het scherm verschijnt dus de toekenning niet, maar aan het resultaat te zien van de volgende opdracht is de toekenning wel goed begrepen door het programma. TIP: om een toekenning weer ongedaan te maken is een handige truc: > a:= a ; Vanaf dit moment heeft a zijn eerder toegekende waarde weer verloren. Zie ook paragraaf 6.3 meer informatie over het gebruik van quotes. Voorbeeld 1.3 Meer opdrachten op één regel Je mag meer opdrachten achter elkaar op één regel invoeren. De opdrachten worden dan achtereenvolgens stuk voor stuk afgewerkt alsof ze onder elkaar zijn ingevoerd. Als echter het afsluitteken vergeten is, wordt er wel gewaarschuwd met bijvoorbeeld: warning, premature end of input of warning, incomplete statement or missing semicolon. Het afsluitteken kan dan alsnog toegevoegd worden.
18 6 Handleiding Maple 10 > 5! ;9+5^3; 8*7; Vermenigvuldigen Voorbeeld 1.4 Een sterretje voor vermenigvuldigingen Bij de volgende opdracht wordt gevraagd om x in te voeren. > restart; 8*4-3*x; 32 3x Toelichting: Er moet beslist een sterretje getypt worden tussen de drie en de x! Dit heeft te maken met de manier waarop Maple variabelen wil ontvangen. Een variabele mag wel x3 heten maar niet 3x, dus begin nooit met een cijfer in de invoer. Als je echter bedoelt: 3 maal x, moet je typen:3*x. Een fout in de invoer wordt aangegeven door de cursor die gaat knipperen op de plaats waar eventueel het sterretje ontbreekt. Zie ook het verschil tussen de vermenigvuldiging a b en een variabele die bijvoorbeeld ab heet. > a*b+ab; ab+ab In de uitvoer staat er een spatie als er sprake is van vermenigvuldiging. TIP: het is belangrijk te weten dat er onderscheid gemaakt wordt tussen hoofdletters en kleine letters. (Er zijn op die manier dus tweemaal zoveel variabelen mogelijk en ook nodig. Denk bijvoorbeeld maar aan de snelheid v en het volume V.) Decimale getallen Als er geen speciale opdracht wordt gegeven, wordt er exact gerekend zoals het volgende voorbeeld laat zien. Er zijn echter wel degelijk mogelijkheden om het programma numeriek te laten rekenen en wel op globaal genomen twee zeer verschillende manieren. Ten eerste met het commando evalf en ten tweede met behulp van floating point in de invoer. Voorbeeld 1.5 Evalueren met floating point (evalf) > restart; b:=116/3; evalf(b); > evalf[25](b); > Digits:=4; evalf(b); > Digits:=10; b := Digits := Digits := 10
19 1 Snel aan de slag 7 Toelichting: Het valt op dat Maple de uitdrukking niet verder uitwerkt, wat een gewone rekenmachine wel doet. Als je een exact getal wilt benaderen, moet je daarom vragen. Dit doe je met het commando evalf (eval = evalueer en de f staat voor floating point). Met eventueel een index bij het commandoevalf wordt aangegeven hoeveel significante cijfers je in totaal wilt zien (dus níet het aantal decimalen). Als je niets opgeeft, worden er standaard tien significante cijfers gegeven. Je kunt vooraf instellen hoeveel significante cijfers je wilt zien door middel van het commando Digits (met een hoofdletter!). Vanaf dat moment worden de getallen na evalf met het aantal ingestelde significante cijfers gegeven, tenzij anders vermeld met de index van evalf. Er is echter nóg een mogelijkheid om met decimale getallen (meestal afgeronde benaderingen) te werken. Maple gaat namelijk automatisch over op floating point (zonder het commandoevalf) als je bij de invoer ten minste één van de getallen met een decimale punt invoert. Voorbeeld 1.6 Invoer met floating point > 116.0/3; > sqrt(5)=sqrt(5.0); = Toelichting: Er is dus nu geen opdrachtevalf nodig om de deling te laten benaderen. Er is immers bij de invoer al een decimale punt ingevoerd, zodat het programma onmiddellijk overgaat op numerieke benadering. Het commando sqrt betekent square root, ofwel tweedemachtswortel (zie verder bij de standaardfuncties paragraaf 1.5). Let ook op dat hier geen toekenning is gedaan maar er is gewoon een gelijkheid ingetikt. De ene keer exact en de andere keer benaderd, omdat er met floating point gewerkt is. TIP: het is mogelijk om decimale getallen om te zetten met convert naar breuken en andersom. Probeer maar eens 0.56 om te zetten naar een gewone breuk. In dat geval kun je convert(0.56,fraction); invoeren en dan wordt het decimale getal dat je eerst hebt ingevoerd met behulp van een decimale punt (dus geen komma!) omgezet naar een echte breuk. Probeer ook bijvoorbeeld convert(116/3,float,5);. De breuk wordt daarmee omgezet naar een decimaal getal met 5 significante cijfers. Deze omzetting is natuurlijk hetzelfde als metevalf[5](116/3);. Voorbeeld 1.7 Aantal decimalen in de uitvoer Ten slotte is er nog een manier om wél met het volledige aantal significante cijfers te rekenen, maar op het scherm niet meer dan een bepaald aantal decimalen te zien. De overzichtelijkheid wordt daarmee bevorderd! Begin de sessie na restart in dat geval met interface(displayprecision=4): of een ander getal (tussen 0 en 100). > restart; interface(displayprecision=3): sqrt(5)=sqrt(5.0); 5 = Het is een bijzonder handige tip in situaties waarbij er gerekend wordt met hardware float die niet te beïnvloeden is door evalf en Digits. Voorbeelden daarvan vind je volop in de voorbeelden van dit boek.
20 8 Handleiding Maple Namen voor de getallen i, e en π Let erop dat je bij het namen geven aan variabelen, functies of andere objecten, geen naam gebruikt die binnen Maple al ergens voor staat. Bijvoorbeeld de letter I is bij Maple (invoer en uitvoer) de imaginaire eenheid. Deze letter komt vaak voor op het scherm omdat Maple eigenlijk altijd rekent met complexe getallen. Je zult deze letter veelvuldig tegenkomen en meteen herkenen zodra het om een complex getal gaat. Zie voorbeeld 3.17 en 7.2. We schrijven in de tekst van een document voor de imaginaire eenheid een i en hiervoor geldt i 2 = 1 (soms wel voorgesteld als i = 1). Op het scherm in de uitvoer zie je dan een hoofdletter I. Het is ook mogelijk een andere letter te kiezen voor de imaginaire eenheid. Zie daarvoor voorbeeld 10.4 en ook paragraaf Het grondtal van de natuurlijke logaritme en de natuurlijke exponent is het getal van Euler. We schrijven in de tekst van een document de letter e (afgerond 2.72). Op het scherm in de uitvoer komt er een rechte en vette e te staan. Als je bijvoorbeeld intikt exp(x), wordt dat opgevat als e x. Het getal π (afgerond 3.14) is bekend onder de naam Pi (met hoofdletter P). Op het scherm verschijnt een Griekse letter en deze wordt dan echt opgevat als het afgesproken getal. Als je echter pi ingevoerd had met een kleine letter, was er wel een Griekse letter π in de uitvoer verschenen, maar deze wordt dan niet opgevat als getal (afgerond 3.14) maar als variabele. Zo zijn er nog een paar letters die al ergens voor gereserveerd zijn, bijvoorbeeld de hoofdletters D en O. Let daar dus op. Mocht je deze per ongeluk toch gebruiken, dan wordt er wel voor gewaarschuwd. Wil je misschien iets meer weten over de letter D bij Maple, dan typ je?d (hoofdletter) en kom je in de helpfunctie Gebruik van paletten Voor Griekse letters is het handig gebruik te maken van de zogenoemde paletten die je kunt activeren door in de menubalk te klikken op View en vervolgens te kiezen voor Palettes (figuur 1.2). Neem die met de symbolen en je kunt beschikken over de Griekse letters. Niet alleen voor Griekse letters, maar ook om snel formules, vectoren en matrices te maken, kun je gebruikmaken van vier soorten paletten. Het snelst kun je in deze situatie met de Tab-toets naar de volgende plaats gaan om de formule in te vullen. 1.4 Contextgevoelige menu s met de rechtermuisknop Snel even een paar berekeningen doen, een formule manipuleren, een vergelijking oplossen of een grafiek maken, gaat heel vlot met de rechtermuisknop. Het is niet aan te raden om hiervan veel gebruik te maken in een uitgebreid werkblad dat gereproduceerd moet kunnen worden, maar om te beginnen is het wel aardig om snel wat dingen te kunnen doen, vooral als je nog niet goed op de hoogte bent van de commando s en hun specifieke werking. De popupmenu s die tevoorschijn komen bij het aanklikken van de uitvoer met de rechtermuisknop, zijn contextgevoelig. Dat wil zeggen dat je een ander, maar bijpassend pop upmenu krijgt bij een vergelijking, een uitdrukking of een grafiek. Je selecteert bijvoorbeeld een vergelijking. Met de rechtermuisknop wordt er dan een menu geopend en er kan een aantal eenvoudige dingen met deze vergelijking gedaan worden. Bijvoorbeeld alles naar de linkerkant van het gelijkteken brengen (Move to the Left) of de vergelijking oplossen (Solve). Zie figuur 1.3. Selecteer je daarentegen een uitdrukking, dan krijg je een heel ander bijpassend menu.
21 1 Snel aan de slag 9 Figuur 1.2 Het programma herkent het soort wiskundig object en geeft een bijpassend pop-upmenu. In hoofdstuk 4 wordt een overzicht gegeven van de meest voorkomende objecten in de wiskunde. Een en ander wordt hieronder met voorbeelden toegelicht. Het is echter niet aan te raden om veel van deze mogelijkheid gebruik te maken. Het wordt in feite een beetje een kladblok, maar als je even wat snelle berekeningen moet doen, is het wel gemakkelijk. TIP: werk zo weinig mogelijk met de rechtermuisknop. Acties met de rechtermuisknop worden namelijk niet reproduceerbaar bewaard bij het opslaan van het werkblad! De resultaten daarvan wel als ook de output bij het opslaan bewaard wordt Oplossen van een vergelijking met de rechtermuisknop Begin eens met het intikken van een vergelijking en geef deze bijvoorbeeld de naam verg. > verg:=x^2-58*x=6; Selecteer vervolgens de gehele uitvoer (die standaard in het blauw op het scherm verschijnt) en klik met de rechtermuisknop. Er opent zich dan een pop-upmenu dat betrekking heeft op een vergelijking. Als je dan voor bijvoorbeeld Solve kiest, wordt de vergelijking exact opgelost. Zie figuur 1.3. Meteen wordt er ook automatisch de naam R gegeven aan deze oplossing, maar die naam kan later wel veranderd worden. Houd er wel rekening mee dat Maple rekent in de complexe getallen en dat er als oplossing eventueel een complex getal kan komen te herkennen aan de I (paragraaf 1.3.5). Er kan zelfs met de vergelijking gemanipuleerd worden als je op Manipulate Equation klikt. Je komt daarmee in een Maplet waarin je achtereenvolgens bijvoorbeeld links en rechts iets erbij op kunt tellen of links en rechts tot een bepaalde macht kunt verheffen of breuken wegwerken, enzovoort. (Zie voor Maplets paragraaf 6.8.) De stappen die achtereenvolgens genomen worden bij het manipuleren, kunnen onthouden worden met de knop Return Steps in het Maplet en automatisch meegenomen worden in het werkblad. Over allerlei commando s die mogelijkheden bieden om formules te manipuleren, is het nodige te vinden in de hoofdstukken 3 en 7.
22 10 Handleiding Maple 10 Figuur Grafieken maken met de rechtermuisknop Tik eerst bijvoorbeeld een functie in: f:=x^2-5*x; en selecteer de uitvoer in zijn geheel. Met de rechtermuisknop komt er dan een pop-upmenu dat juist bij een dergelijke uitdrukking past. Kies voor Plots, 2-D Plot en er ontstaat een zogenoemdesmartplot. Zie figuur 1.4. Klik op de functie in de uitvoer en met de rechtermuisknop opent zich een bijpassend pop-upmenu. Figuur 1.4 Klik vervolgens op de grafiek in de uitvoer. Met de rechtermuisknop komt er dan een popupmenu tevoorschijn dat specifiek bij een grafiek past om bijvoorbeeld het bereik langs de assen in te stellen. Zie figuur 1.5. Standaard wordt er altijd horizontaal het interval van -10 tot 10 genomen, maar dat is niet altijd wenselijk. Als je deze instellingen verandert met behulp van het pop-upmenu, worden deze verder niet bewaard bij het opslaan van het werkblad, alleen het resultaat wordt bewaard als het werkblad inclusief de uitvoer opgeslagen wordt. Een extra grafiek in de figuur plaatsen gaat heel gemakkelijk met het intikken van nog een uitdrukking, deze in de uitvoer te selecteren en vervolgens in de figuur te slepen. Zie figuur 1.6. Door met de muis over een van de grafieken te bewegen tot deze van kleur verschiet, kunnen vervolgens de eigenschappen van deze grafiek aangepast worden met weer een nieuw popupmenu dat met de rechtermuisknop tevoorschijn komt. In hoofdstuk 2 wordt er veel duidelijk over de verschillende manieren waarop je grafieken kunt maken, onder andere ook met de Plot Builder (paragraaf 2.4).
23 1 Snel aan de slag 11 Klik op de grafiek met de rechtermuisknop en een bijpassend pop-upmenu opent zich. Figuur 1.5 Sleep met de muis de geselecteerde uitdrukking naar de grafiek. Figuur Standaardfuncties Een standaardfunctie bij Maple werkt altijd op dezelfde wijze, namelijk met haakjes. Bijvoorbeeld sin(x), de sinus van x. Er kunnen op een gemakkelijke manier functiewaarden worden uitgerekend. Bijvoorbeeld sin(π). Het tekenen van grafieken van standaardfuncties komt in hoofdstuk 2 aan de orde. Er volgt hier een aantal vaak gebruikte en bekende voorbeelden van functies. Bij iedere functie staat een korte uitleg van de betekenis ervan. Let er wel op dat Maple alle functies beschouwt als complexe functies. Dus kijk niet vreemd op bij opdrachten als 3 en ln( 6). Er kunnen dan ook complexe resultaten op het scherm verschijnen die je kunt herkennen aan de I, zoals uitgelegd in paragraaf Als je dat van tevoren weet, kun je de uitvoer van Maple beter interpreteren en op waarde schatten. Voor de rest van de standaardfuncties wordt verwezen naar de helpfunctie Absolutewaardefuncties, wortels en oneigenlijke machten Voor het doen van de volgende voorbeelden kan eventueel ook gebruikgemaakt worden van de zogenoemde paletten (Expression Palette onder View in de menubalk). Voorbeeld 1.8 De absolutewaardefunctie berekent van ieder getal de afstand tot de oorsprong. Ook van imaginaire getallen zoals het getal i = 1 (bij Maple bekend onder de naami) op de imaginaire as in het complexe vlak, kun je de afstand tot de oorsprong vragen. Van complexe getallen in het algemeen kan de afstand tot de oorsprong in het complexe vlak met behulp van het commando abs berekend worden (zie paragraaf ). In de hierna volgende Maple-sessie wordt een aantal commando s op één regel gegeven. Onder elkaar komen de resultaten van de afzonderlijke opdrachten te staan.
24 12 Handleiding Maple 10 > abs(-4); abs(3*i); abs(-4+3*i); Voorbeeld 1.9 De wortelfunctie (sqrt) hebben we al leren kennen in voorbeeld 1.6 en simplify(%) betekent: vereenvoudig het voorgaande resultaat. > sqrt(4); 4^(1/2); simplify(%); sqrt(-3); I De wortel uit een negatief getal kan wel, omdat per definitie in de complexe getallen gerekend wordt (zie hoofdstuk 10). Voorbeeld 1.10 Voor oneigenlijke machten kun je het commando surd gebruiken, maar natuurlijk ook gewoon met het ˆ-teken werken. Er is wel enig verschil in deze twee manieren, maar dat valt pas op als je met complexe getallen werkt. Meer informatie hierover is te vinden op de website bij dit boek bij Aanvullingen op de handleiding. > restart; surd(x,3); > convert(%,power); > surd(x,2); surd(x, 3) x (1/3) x Zie voor het omzet-commando convert paragraaf De exponentiële functie en de logaritmische functie Voorbeeld 1.11 De exponentiële functie e x wordt in boeken vaak geschreven als exp(x) (met het natuurlijke grondtal e 2.718). Als je bij Maple dit getal e (getal van Euler) los wilt invoeren, moet exp(1) worden getypt. Zie ook bij het Expression Palette paragraaf en verder nog paragraaf De exponentiële functie e x wordt ingevoerd door exp(x) in te tikken. Kijk goed naar de volgende commando s en probeer zelf nog een paar voorbeelden uit. > restart; exp(5): %=evalf(%); > a^x*exp(x+y): %=expand(%); > 1/exp(1): %=evalf(%); e 5 = a x e (x+y) = a x e x e y 1 e = Toelichting: Je kunt van alles uitrekenen door gebruik te maken van de commando s zoals simplify (vereenvoudig), expand (werk haakjes weg) en evalf (benader met floating point).
25 1 Snel aan de slag 13 Er is hier, ten behoeve van een mooie uitvoer, gebruikgemaakt van de dubbele punt als afsluitteken (het resultaat van een opdracht wordt in zo n geval niet zichtbaar). Tevens wordt gebruikgemaakt van het %-teken dat verwijst naar het resultaat van de laatst uitgevoerde opdracht. Zie voor deze trucs ook paragraaf Van de exponentiële functie wordt ook veel gebruikgemaakt bij complexe getallen, zie paragraaf Voorbeeld 1.12 De logaritmische functie is bij Maple bekend onder de functienaam ln, hiermee wordt de natuurlijke logaritme bedoeld. Het grondtal is het getal van Euler: de e > ln(5):%=evalf(%); > log[3](27); > log[10](95); > log(21); ln(5) = ln(95) ln(10) ln(21) Toelichting: Als je per ongeluklog typt in plaats vanln, wordt dit opgevat als de natuurlijke logaritme en beslist niet als de logaritme met grondtal 10. Wil je toch een ander grondtal dan het getal e, dan kan dat met het intikken van vierkante haakjes: dus log 3 (27) (het grondtal is hier 3) wordt ingevoerd als log[3](27) en vervolgens direct vereenvoudigd tot 3 in de uitvoer. Dus als je écht de logaritme met grondtal 10 wilt, bijvoorbeeld log 10 (x), dan moet er ingevoerd worden log[10](x). Echter de vorm wordt door het programma onmiddellijk herleid tot de natuurlijke logaritme. (In sommige boeken komt nog voor dat het grondtal van de logaritme links boven de log staat zoals 10 log(x).) TIP: er wordt soms geschreven ln 2 x terwijl er dan bedoeld wordt: (ln(x)) 2. Ga op onderzoek uit en controleer dat wanneer je ln(x)^2 typt, dit hetzelfde is als (ln(x))^2. Probeer zelf het verschil metln(x^2) te ontdekken Goniometrische en cyclometrische functies Bij goniometrische functies is het belangrijk te weten dat de hoek in radialen opgegeven moet worden. Wil je toch de sinus van bijvoorbeeld 45 uitrekenen, dan moeten de graden eerst omgezet worden naar radialen. Dus sin(45 ) = sin( π 4 ). Als je bijvoorbeeld typt: sin(20), wordt dit opgevat als de sinus van 20 radialen. Let op dat sinx niet opgevat wordt als de sinus van x. Het typen vansin*x is helemaal uit den boze. Voorbeeld 1.13 Sinus- en cosinusfunctie De sinus van 45 en de cosinus van 1.2 radialen worden dus als volgt berekend: > sin(pi/4); cos(1.2);
26 14 Handleiding Maple 10 Voorbeeld 1.14 Graden en radialen Een truc om toch gemakkelijk met graden te kunnen werken is de volgende. Als je weet dat π radialen gelijk is aan 180, stel je α graden dus op α π 180. Om de cosinus van 20 te berekenen kan voorlopig als volgt gewerkt worden. > restart; graden:=evalf(pi/180); > cos(20*graden); graden := In paragraaf 6.7 is meer informatie over eenheden te vinden om dit wat officiëler aan te pakken. Voorbeeld 1.15 De cyclometrische functies, zoals arcsin, arccos en arctan, worden op volkomen natuurlijke wijze ingevoerd. Houd er steeds rekening mee dat in de wiskunde met radialen gewerkt wordt. De uitkomst van bijvoorbeeld arcsin(0.6) is een hoek in radialen! Het omzetten van radialen naar graden kan met behulp van convert(..,degrees). > restart; arcsin(0.6): %=evalf(convert(%,degrees)); = degrees TIP: als je buiten het domein [ 1,1] van bijvoorbeeld de arcsinusfunctie komt, wordt er een complexe functiewaarde teruggegeven. Meestal werken we met de reële functie arcsinus die dus een beperkt domein heeft Faculteitfunctie en binomiaalfunctie Dan hebben we nog tot onze beschikking de faculteitfunctie: n! als n een geheel positief getal is. Deze functie is bekend onder de functienaam factorial. Als alternatief van deze functie kun je gebruikmaken van het uitroepteken in de invoer. Ten slotte is er de binomiaalfunctie: ( n k) waarbij n en k positieve gehele getallen zijn en n k. Deze functie komt vaak voor bij de kansrekening. Voorbeeld 1.16 De commando s factorial en binomial De betekenis van 7! is dezelfde als factorial(7) waarmee bedoeld wordt Verder schrijven we bijvoorbeeld 7 boven 2 als ( 7 2). We typen dan binomial(7,2) terwijl 7! de betekenis is:. In de volgende regels wordt een en ander gecontroleerd. 2!(7 2)! > restart; 7!=factorial(7); > binomial(7,2)=7!/(2!*5!); 5040 = = Standaardfuncties met een Maplet Het is ook mogelijk om standaardfuncties te bestuderen met een Maplet (een soort applet). Je kunt dan zien hoe de functie ingevoerd moet worden en de grafiek ervan bekijken. Ook is het mogelijk om grafiektransformaties (manipulaties zoals verschuiven of uitrekken) te doen met standaardfuncties. Bekijk bijvoorbeeld hoe de grafiek van de arcsinus eruitziet en ook hoe de grafiek van 2arcsin(x 1)+4 eruitziet. Deze krijg je dan in één figuur samen met de grafiek van de standaardfunctie arcsin(x) te zien in verschillende kleuren. Bij Plot Options
27 1 Snel aan de slag 15 kun je nog een aantal instellingen veranderen voor de grafieken. Als er met Close afgesloten wordt, dan staat de grafiek in het werkblad. Om het Maplet te activeren is het volgende commando nodig: > Student[Precalculus][StandardFunctionsTutor](); Zie figuur 1.7. Figuur Functienotatie Tot nu toe zijn er uitdrukkingen ingevoerd met behulp van een variabele toekenning, bijvoorbeeld f:=... Soms werd daarmee een functie van x bedoeld. In de tekst werd in dat geval gesproken over f(x), bijvoorbeeld als de grafiek van zo n functie getekend moest worden. Steeds was deze functie dan bij Maple bekend als uitdrukking onder de naam f. Het is echter ook mogelijk om de functie f in te voeren als een echte functie en niet als een uitdrukking. Je hebt gezien hoe de standaardfuncties bij Maple werken. Nu is de bedoeling dat we zelf functies maken die op dezelfde manier werken als de standaardfuncties. We willen een functie f definiëren, waarmee we snel de functiewaarden kunnen uitrekenen, bijvoorbeeld f(x) of f(10). Dit is alleen mogelijk als we de functie met behulp van de pijltjesnotatie invoeren. We definiëren de functie voor dit doel nu eens niet door middel van een variabele toekenning, maar met behulp van een functievoorschrift in pijltjesnotatie. Het pijltje maak je met behulp van het minteken en het groterdanteken ->. Voorbeeld 1.17 Het invoeren van een functie met de pijltjesnotatie heeft als voordeel dat snel functiewaarden opgevraagd kunnen worden. > restart; f:=x->x^2+1; f(x); f(10); f := x x x Als de uitdrukking f(x) dan op een bepaald ogenblik nodig is, kan deze opgevraagd worden metf(x). TIP: definieer liever niet een functie met behulp vanf(x):=... In de tekst kun je wel spreken over f(x), terwijl de functie bij Maple bekend is als uitdrukking onder de naam f.
28 16 Handleiding Maple 10 Voorbeeld 1.18 Pijltjesnotatie bij een functie met parameters Als er een parameter in het spel is, is het van belang om te weten welke de variabele is en welke letter als parameter opgevat moet worden. Met f(x) = a x + 3 bijvoorbeeld wordt een functie van x bedoeld waarbij a een parameter is. Voer de functie dan eens in als échte functie: f:=x->a*x+3; en vraag vervolgens naar f(5);. > restart; f:=x->a*x+3; > f(5); f := x ax+3 5a+3 Let wel op als je bijvoorbeeld de functie aanroept om er iets mee te gaan doen, een grafiek tekenen met behulp van het commandoplot bijvoorbeeld en je hebt de pijltjesnotatie gebruikt om de functie te definiëren, dat je dan de functie aanroept met f(x) en niet met alleen f. Dus om te plotten, typ jeplot(f(x),x=-5..5);. De functie moet in het geval van plotten dan natuurlijk geen parameters bevatten (zie voorbeeld 5.2). Er zijn dus twee methoden om een functie bij Maple te definiëren. Als uitdrukking met een variabeletoekenningf:=... en met behulp van het functievoorschrift (pijltjesnotatie)f:=x->... Beide methoden hebben voordelen. In de rest van het boek komt het door elkaar voor. Het hangt van de situatie af wat het handigst is. Wil je bijvoorbeeld van een functie die ingevoerd is als uitdrukking met een variabele toekenning een pijltjesnotatie maken, dan kan dat in één keer veranderd worden met het commando unapply (zie voorbeeld 1.19). Een functie van twee of meer variabelen gaat op dezelfde wijze:f(x,y)->... en de functiewaarde in punt (3, 5) krijg je dan meteen met f(3,5). Toepassingen hiervan zijn in voorbeeld 5.4 en 8.16 te zien. Voorbeeld 1.19 Een uitdrukking veranderen in een echte functie Om van een functie die ingevoerd is als uitdrukking een echte functie (met pijltjesnotatie) te maken, definieer je hem opnieuw met unapply en daarna is het mogelijk om deze functie als echte functie te laten werken om bijvoorbeeld functiewaarden op te vragen: > restart; g:=x^2-5*x; > g:=unapply(g,x); > g(3); g := x 2 5x g := x x 2 5x TIP: zie ook in voorbeeld 3.33 hoe je handig gebruik kunt maken van de invoer in pijltjesnotatie bij differentiëren Maple als tekstverwerker Neem nu de appendix op de cd-rom behorende bij het boek erbij. Het handelt over de herkomst van het getal van Euler, het grondtal van de natuurlijke logaritme en van de natuurlijke exponentiële functie. Aan de hand van dit werkblad (worksheet) dat geheel in Maple (Classic Worksheet) gemaakt is, wordt een aantal tips voor het maken van zo n werkblad gegeven. Je ziet dat Maple als tekstverwerker gebruikt kan worden. Indeling in
29 1 Snel aan de slag 17 paragrafen (secties) gaat automatisch en de formules in de tekst zijn gemakkelijk te maken. Berekeningen, tekst en grafieken wisselen elkaar af, alles zonder Maple te verlaten. Als de knoppen in de knoppenbalk en de contextbalk je niet zo bekend voorkomen, kun je ervoor zorgen dat bij de instellingen Balloon Help is aangevinkt (zie paragraaf 1.2 bij de instellingen). Als dat gedaan is en je gaat met de muis langs de knoppen van de knoppenbalk en de contextbalk, krijg je te zien wat het effect zal zijn bij het aanklikken van een van deze knoppen Het werkblad Neem een nieuw werkblad. Links bovenaan staat dan een [> -teken en Maple wacht in dat geval op invoer voor het doen van een berekening. Je wilt echter eerst een tekst maken. Klik voor het maken van tekst op de letter T in de knoppenbalk en maak eerst een titel. Er is een rolmenu om Title te selecteren en meteen wordt dan automatisch het juiste lettertype ingesteld, zie figuur 1.8. Klik hier voor het maken van een tekst. Figuur 1.8 Na Enter, kom je automatisch in een speciaal lettertype om je naam te typen (author) en na nogmaals Enter, kun je tekst intikken. Maar je wilt bijvoorbeeld eerst paragrafen (sections) maken Paragrafen maken Het maken van een nieuwe paragraaf (sectie) gaat met het menu Insert, Section (zie figuur 1.9). Dus niet met Insert, Paragraph, want dat betekent een nieuwe alinea. Je krijgt bij het maken van een sectie een vierkantje met een minteken erin en daarachter kun je de titel van deze paragraaf intikken met als titel Inleiding. Automatisch is de titel van een paragraaf op Heading 1 ingesteld, maar er mag natuurlijk ook voor een andere stijl gekozen worden. (Voor titels van subparagrafen (subsections) wordt automatisch Heading 2 ingesteld.) Na Enter kun je normale tekst gaan intikken. Je zit dan in de tekst-mode die je wel van Word kent met vette, cursieve en onderstreepte letters, links uitlijnen, centreren en rechts uitlijnen. Alles volgens een gewone tekstverwerker. Na het maken van een aantal paragrafen met het hokje met het minteken erin, kun je voor de overzichtelijkheid op deze mintekens klikken. De mintekens veranderen in plustekens en de inhoud van de paragrafen (sections) kan, behalve de titel van de paragraaf, onzichtbaar gemaakt worden. Dit kan voor het hele document in één keer met View Collapse All Sections. Je hebt dan een overzicht van je document en je kunt eventueel nummering aanbrengen of secties (of subsecties) tussenvoegen. Verder is er
30 18 Handleiding Maple 10 Figuur 1.9 in het Insert-menu nog te zien dat je spreadsheets (zie paragraaf 1.7) en zelfs hyperlinks (zie paragraaf 1.6.4) kunt tussenvoegen. Als je in figuur 1.2 kijkt op blz. 9, zie je dat bij het menu View mogelijkheden zijn om in één keer alle secties dicht te klappen en weer open te klappen met Collapse respectievelijk Expand All Sections. Ook is het mogelijk om de verticale lijnen in de kantlijn (on)zichtbaar te maken (Show Section Ranges en Show Group Ranges). In de appendix op de cd-rom zijn de lijnen in de kantlijn onzichtbaar gemaakt Formules in de tekst Wil je nu een formule in de tekst schrijven, dan kan dat heel gemakkelijk en automatisch in de goede lay-out door in de knoppenbalk op de Σ-knop te klikken (links naast de T van tekst, zie figuur 1.10). Sigma-knop om de formuleeditor te activeren die je in de Contextbalk kunt editen. Figuur 1.10 Je komt dan onmiddellijk in de formule-editor terecht met een andere, bijpassende contextbalk. In feite wordt de formule getikt ín de contextbalk en als de formule klaar is, kun je weer over naar de tekst-mode door op de T in de knoppenbalk te klikken. Als later de formule verbeterd moet worden, selecteer je de formule met de muis en je kunt in de contextbalk de verbetering typen, zie figuur Het centreren van de formule kan alleen zolang je in de tekst-mode bent, dus vóórdat je op de Σ-knop klikt óf nadat je weer op de T-knop hebt geklikt. Ook kleine formules in de regel doe
31 1 Snel aan de slag 19 je met de formule-editor. Je krijgt dan automatisch de juiste spatiëring en de juiste lay-out die past bij wiskundige formules. Op de website bij dit boek staat een bestand dat gaat over de formuleconventies: hoe formules in documenten gepresenteerd moeten worden. Als er na een stukje tekst weer een berekening moet plaatsvinden, kan dat eenvoudig met het aanklikken van het [> -teken in de knoppenbalk. Je kunt dan weer berekeningen en grafieken maken zoals je inmiddels gewend bent. Resultaten van berekeningen kunnen weer gebruikt worden om in de tekst op te nemen zonder deze na te typen. Selecteer een formule, liefst in de uitvoer van een berekening en sleep deze met de muis naar de plaats in de tekst waar je deze formule wilt neerzetten. Bij het loslaten van de muisknop is de formule verplaatst (niet gekopieerd). Als je wilt kopiëren, werk dan met Copy en Paste uit het Edit-menu of het ingedrukt houden van de Ctrl-toets tijdens het slepen. Matrices en vectoren kun je netjes in de tekst plaatsten door in een kladwerkblad een matrix te maken en de uitvoer daarvan met Copy en Paste op de gewenste plaats in de tekst te zetten. Een matrix of een vector maak je met behulp van de palettes (zie figuur1.2) die je met View kunt openen. Steeds kun je met de Tab-toets naar het volgende element van de matrix gaan om deze verder te vullen Hyperlinks en bookmarks In het werkblad kun je zelfs gebruikmaken van hyperlinks en bookmarks. Met een hyperlink kun je, werkend in je werkblad, naar andere plaatsen van het werkblad verwijzen door middel van aangebrachte bookmarks. Je kunt zelfs naar andere werkbladen, naar helppagina s of internetsites verwijzen. Het aanbrengen van een hyperlink in het werkblad gaat als volgt en een en ander is uit te proberen in het werkblad van de appendix op de cd-rom. Klik in het Insert-menu Hyperlink aan. Vervolgens krijg je een dialoogscherm waarin een en ander is in te vullen. Het dialoogscherm krijg je ook als je met de rechtermuisknop op de link in het werkblad klikt van de appendix en dan kiest voor Properties. Er kan gekozen worden voor de verwijzing naar een helppagina in Maple (in de appendix wordt verwezen naar een helppagina die uitleg geeft over limieten). De hyperlink is dan ook limieten genoemd. Je kunt ook verwijzen naar een ander document dat je zelf hebt aangemaakt (met Browse). Je kunt zelfs verwijzen naar een plaats in het document waarin je aan het werk bent: namelijk een plaats die je met een bookmark gemerkt hebt. Ten slotte kan ook verwezen worden naar een internetsite. Helemaal onder aan het werkblad in de appendix zie je deze hyperlink. Als je deze hyperlink nog wilt wijzigen in je werkblad, kun je met de rechtermuisknop erop klikken en via Properties eventueel verbeteren. Met het intikken van?hyperlink kom je meer hierover en over het aanbrengen van bookmarks te weten. Meteen wordt in deze helppagina uitgelegd hoe je een zogenoemd bookmark aanbrengt via het View-menu. 1.7 Spreadsheets Je kunt beschikken over spreadsheets binnen Maple. Het invoegen van een spreadsheet gaat via het Insert-menu. Zodra je dat gedaan hebt, verandert de contextbalk, zie figuur De contextbalk wordt aangepast en er worden een paar knoppen ten behoeve van de spreadsheet aangeboden. Cel B1 is gevuld met f(~a1). Het betekent dat de functie (met pijltjes-notatie) die vooraf in het werkblad gedefinieerd is, gebruikt kan worden. Met de meest linkse knop vul je een aantal cellen naar beneden op dezelfde manier. A1 betekent een referentie naar Cel A1. De tilde die er voor staat is beslist noodzakelijk en een eigenschap
32 20 Handleiding Maple 10 Hiermee vul je de geselecteerde cellen Figuur 1.11 van Maple (in tegenstelling tot Excel) omdat het ook mogelijk is dat een object reeds de naam A1 zou kunnen hebben in het werkblad. Met een tilde verwijs je altijd naar een cel. Als je op de meest linkse knop van de contextbalk klikt, verschijnt het pop-upmenu Fill en kun je naar beneden vullen op dezelfde manier als waarop ook cel B1 is gevuld. Met de knop ernaast wordt het gehele spreadsheet doorgerekend. De werking is vergelijkbaar met Excel. Het voordeel is hier echter dat je de beschikking hebt over een gigantisch rekenpakket binnen het spreadsheetprogramma van Maple. Het is zelfs mogelijk om de spreadsheets van Maple en Excel onderling uit te wisselen. Zie ook bij de instellingen paragraaf Er kan zowel symbolisch als numeriek gewerkt worden in een spreadsheet. De instellingen daarvoor zijn gemakkelijk te doen door met de rechtermuisknop op de spreadsheet te klikken en te kiezen voor Properties. Geef dan de spreadsheet ook een specifieke naam. In voorbeeld 5.10 staat een toepassing van het gebruik van spreadsheets. Begin een werkblad met een spreadsheet erin altijd met restart, want in een spreadsheet worden toekenningen meegenomen. Zie verder de website bij dit boek over de werking van spreadsheets binnen Maple. 1.8 Helpfunctie Er bestaat een zeer uitvoerige helpfunctie bij Maple. Deze is werkelijk zo uitgebreid dat je eigenlijk geen handboek nodig hebt. Maar zoals altijd, alle begin is moeilijk en het is goed om even op weg geholpen te worden. Zoals je al gezien hebt aan het eind van paragraaf en aan het eind van pararaaf 1.6.4, kom je eenvoudig in de helpfunctie met behulp van de vraagtekenmethode. Als je bijvoorbeeld iets meer wilt weten over het commando simplify, typ je?simplify. Hetzelfde effect heeft het met de muis selecteren van een commando en vervolgens op Ctrl-F1 drukken (of bij Help in de menubalk kijken). Je moet dan natuurlijk wel enige kennis hebben van mogelijke commando s. Bekijk eens welk rolmenu er ontstaat bij het aanklikken van Help in de menubalk. Om weer uit de helpfunctie te komen, klik je met de muis op Window en kies je voor het document waarin je aan het werk was. De betreffende help-file blijft dan wel toegankelijk. Een andere mogelijkheid om het helpvenster af te sluiten is Ctrl-F4 of op de bekende wijze met het kruisje rechtsboven.
33 1 Snel aan de slag 21 Om nu te zien welke commando s er in Maple bestaan, kun je om te beginnen typen:?lib (je hoeft niet per se met een puntkomma af te sluiten, maar het mag wel). Je krijgt nu alle standaardcommando s in link-vorm te zien op alfabet die actief zijn in Maple. Als je vanuit je werkblad?packages typt, krijg je hiermee te zien welke pakketten er zoal zijn. We hebben tot nu toe nog geen commando s uit pakketten leren kennen, maar in het tweede hoofdstuk komt er een belangrijk pakket aan de orde: het plotpakket. Dit pakket bevat extra commando s om wat geavanceerder met grafieken om te gaan. Elk pakket kan worden geactiveerd met het commando with, zoals het plotpakket met with(plots). Als je dat afsluit met een puntkomma, kun je daarmee alle commando s zien die in zo n pakket zitten en die niet in de standaardlijst van commando s voorkomen. Over ieder commando is hulp te vragen met de bekende vraagtekenmethode of het selecteren van een commando en vervolgens in de Help van de menubalk gaan naar Help on commando of met Ctrl+F1. Ook is er een belangrijk pakket dat geactiveerd wordt met with(student). Dit pakket bevat subpakketten met veel visualisaties. Bij het doorwerken van dit boek wordt melding gemaakt wanneer commando s in bepaalde pakketten voorkomen. Zie in de index van dit boek bij with voor mogelijke pakketten. Als je hulp vraagt over een commando of een functie, ga dan met de cursor naar beneden in de helpfunctie om naar de voorbeelden te kijken. Je kunt zelfs een voorbeeld met behulp van Copy en Paste naar je sessie verhuizen en verder uitproberen. 1.9 Veelvoorkomende beginnersfouten 1. Het typen van hoofdletters en kleine letters door elkaar (per ongeluk op Caps Lock gedrukt). 2. Het typen van bijvoorbeeldsin*x ofsinx als ersin(x) bedoeld wordt. 3. Het typen van bijvoorbeeld xy als er x*y bedoeld wordt. 4. Het typen van een komma, als er een decimale punt bedoeld wordt. 5. Het typen van een o als er een 0 bedoeld wordt. 6. Het typen van pi als er Pi bedoeld wordt (dus π 3.14). 7. Als het rekenen of plotten niet lukt, controleer dan of alle toekenningen goed overgekomen zijn. Kijk bijvoorbeeld of de functie f wel de juiste is door te typenf;. 8. Het vergeten van de dubbele punt bij toekenningen (f:=...). 9. Met een volgend werkblad werken zonder te beginnen met restart, zodat oude toekenningen blijven bestaan. 10. Iets tussenvoegen zodat de volgorde verstoord wordt. Dit gebeurt vaak als het %-teken veel gebruikt wordt. Terugverwijzingen kloppen dan vaak niet meer. Maak zo min mogelijk gebruik van het %-teken! 11. Het door elkaar gebruiken van de pijltjesnotatie en de toekenning met behulp van een uitdrukking. Dus liever niet f(x):= Een commando uit een pakket gebruiken zonder het betreffende pakket te activeren. Het commando wordt in dergelijke gevallen weer gewoon teruggegeven. (Zie in de index van het boek bij with voor mogelijke pakketten.) 13. Veel commando s zijn met kleine letters maar soms ook met hoofdletter. Fout intikken van het commando geeft het commando weer terug. Maak gebruik van bestaande werkbladen en werk met Copy en Paste. De commandolijst op de cd-rom kan erbij gehouden worden, zodat je weet wat er bij een
34 22 Handleiding Maple 10 commando verlangd wordt en in welke volgorde. Zie verder in de helpfunctie. Meer informatie daarover is te vinden paragraaf 1.8.
35 2 Grafieken 2.1 Inleiding Allereerst moet vermeld worden dat het maken van grafieken meer geheugenruimte kost dan tekst en formules. Het is dus verstandig om tijdig het werkblad op te slaan. Dit kan automatisch met File, Preferences en dan op het tabblad General bij Auto Save (zie ook blz. 3). Ten tweede moet vermeld worden dat sommige plotcommando s die wat geavanceerder zijn, in een zogenoemd plotpakket zitten. Eerst moet een dergelijk plotpakket geactiveerde worden met with(plots) en als je dit afsluit met puntkomma, kun je zien welke plotcommando s er in dit pakket opgenomen zijn. Houd er rekening mee dat narestart deze commando s niet meer toegankelijk zijn en zo nodig weer opnieuw het plotpakket geactiveerd moet worden. Bij de voorbeelden wordt er wel melding gemaakt of het plotpakket al of niet geactiveerd dient te worden. In principe wordt er gewerkt in de interface Classic Worksheet van Maple 10. Voor sommige geavanceerde opties zoals grid en transparency kunnen de grafieken uiteindelijk beter gemaakt worden in de standaardinterface van Maple 10. Ook is in deze standaardinterface gemakkelijk de Plot Builder te bereiken via Tools, Assistants, Plot Builder. Zie verder paragraaf 2.4. Het maken van grafieken wordt in dit hoofdstuk uiteengezet aan de hand van voorbeelden. Nog meer voorbeelden die betrekking hebben op specifieke situaties, zijn verspreid over het boek in de verschillende hoofdstukken. De bedoeling van dit hoofdstuk is om de betekenis van de commando s te leren kennen, zodat deze eventueel ook in de menu s herkend en begrepen kunnen worden. Aan extra opties, om de grafiek aan te passen, is in de voorbeelden ruimschoots aandacht besteed, zodat het gemakkelijk is een en ander na te zoeken in de helpfunctie met?plot[options]. Het is handig om te weten dat grafieken gemakkelijk naar andere applicaties geëxporteerd en daar eventueel verder bewerkt kunnen worden. Ook is het handig om te weten dat als de grafieken gebruikt worden voor internet, dat ze dan het beste als gif-bestanden kunnen worden geëxporteerd. Neem dan als het mogelijk is bij gewone grafieken voor thickness de waarde 2. De plaatjes worden dan op het scherm prima weergegeven. Ook animaties (zie paragraaf 2.12) worden dan automatisch als animatie-gifjes opgeslagen. Alle grafieken die in dit boek voorkomen, kun je zelf maken! Voor het tekenen van grafieken is het nodig dat er eerst een functie wordt ingevoerd voordat de grafiek ervan getekend wordt. Op die manier kan de functie eerst gecontroleerd worden. Het invoeren van zo n functie kan globaal op twee manieren, zoals we die in paragraaf al hebben leren kennen. 1. Als variabele toekenning met een uitdrukking:f:=... Bijplot wordt de functie dan aangeroepen met f waarna het domein nog opgegeven moet worden. Dus plot(f,x=a..b). 2. Als echte functie met de pijltjesnotatie:f:=x->... Bijplot wordt de functie dan aangeroepen met f(x) en er moet een domein opgegeven worden: plot(f(x),x=a..b). Zie voorbeeld 5.2. Echter er kan in dit geval ook volstaan worden
36 24 Handleiding Maple 10 metplot(f) waarna een grafiek gepresenteerd wordt met het standaarddomein [ 10, 10] of plot(f,a..b) zonder x=... Nu is het niet onmogelijk om bij de eerste manier als naam voor de functie f(x) te gebruiken, maar dit suggereert dat je de tweede manier, de pijltjesnotatie, hebt gebruikt. Geef dus liever níet de naam f(x). Zie paragraaf Met de muis op een grafiek klikken, geeft in de contextbar informatie over de grafiek, zoals de coördinaten van een punt van de grafiek en mogelijkheden om iets aan de instellingen te veranderen. Je kunt bijvoorbeeld ook met een van die knoppen zichtbaar maken welke punten er berekend zijn door voor pointplot te kiezen. Wat er in feite gebeurt als er een grafiek door het programma wordt getekend, is dat er standaard 50 punten worden berekend en vervolgens worden deze punten onderling verbonden op een zo vloeiend mogelijke manier. Het kan zijn dat er meer informatie nodig is om een grafiek te maken, maar dan moet er een extra optie bij het plotcommando worden meegegeven. Dat kan met numpoints. In sommige situaties is dat wellicht nodig (zie voorbeelden 2.11 en 2.16). 2.2 Plotopties Als je met scripts werkt en niet met de menu s, is het goed om wat mogelijkheden te kennen van het aanpassen van grafieken door extra opties te geven bij het plotcommando. Als je kennisgemaakt hebt met deze mogelijkheden, zijn de menu s ook beter te begrijpen. Met?plot,options en?plot3d,options kunnen in de helpfunctie bij Maple veel handige dingen gevonden worden om grafieken aan te passen. In dit hoofdstuk kan door middel van een aantal voorbeelden veel duidelijk worden over de structuur van het maken van grafieken. 2.3 Smartplot Een snelle manier om een grafiek van een functie te tekenen is met smartplot, dat wil zeggen: met behulp van de rechtermuisknop. Daarbij wordt de uitvoer van een formule geselecteerd waarbij er geen pijltjesnotatie gebruikt moet worden (paragraaf 1.5.6). Vervolgens kan deze geselecteerde formule aangeklikt worden met de rechtermuisknop. Er opent zich dan een menu waar je bijvoorbeeld kunt kiezen voor 2-D Plot en de rechtermuisknop kan vervolgens dienst doen om de figuur verder te bewerken. Al deze manieren hebben zo hun eigen voordelen, terwijl de laatste manier met smartplot een duidelijk nadeel heeft. Acties met de rechtermuisknop worden namelijk niet bewaard bij het opslaan van het werkblad! Het resultaat wel, maar alleen als de uitvoer van het werkblad daarbij ook bewaard wordt. Er is namelijk een mogelijkheid om het werkblad te ontdoen van uitvoerregels (formules en grafieken) en het op die manier te bewaren wat veel minder geheugen kost. Zie ook paragraaf voor meer informatie over smartplot. 2.4 De Plot Builder Er is nog een extra mogelijkheid om grafieken te maken met behulp van een Maplet: de Plot Builder. Deze kan bereikt worden door met de rechtermuisknop een uitdrukking (van een of twee variabelen) in de uitvoer aan te klikken en vervolgens te kiezen voor Plot Builder.
37 2 Grafieken 25 Er kunnen daarin nog grafieken van functies toegevoegd worden. Alle instellingen met de Plot Builder gekozen, worden na het drukken op de knop Plot in het Maplet vertaald naar een invoerregel in het werkblad, zodat de reproduceerbaarheid van het werkblad gegarandeerd is. Een nadeel is echter dat als de instellingen niet allemaal naar wens zijn, je weer alles overnieuw moet doen met de Plot Builder of in de invoerregel moet editen voor de verbetering. Voor het editen is dan wel enige kennis van de code vereist. Niet alle opties die de Plot Builder aanbiedt, zijn in het Classic Worksheet te verwezenlijken. Bijvoorbeeld de opties voor de Grid (Advanced Axes Settings) in de grafiek kan alleen in de standaardinterface verwezenlijkt worden. De Plot Builder is ook te bereiken via het commandointeractive uit het plotpakket (mag ook met een hoofdletter). Probeer eens: > with(plots): Interactive(); Na het invoeren van de functie kan op Options geklikt worden voor het doen van alle mogelijke instellingen waarna verder met de knoppen in de knoppenbalk of met het menu (klikken op de grafiek met de rechtermuisknop) nog meer instellingen mogelijk zijn. Het nadeel hiervan is dat in de uitvoer alleen de grafiek verkregen wordt zonder invoerregel. (Tenzij je op Command klikt in de Plot Builder in plaats van op Plot en het resultaat kopieert naar een invoerregel.) Eventueel veranderen van het resultaat als je niet geheel tevreden bent, heeft tot gevolg dat alles weer helemaal overnieuw moet. Het is nog niet ideaal, maar de verwachting is dat de faciliteiten van de Plot Builder steeds beter worden in nieuwe versies van Maple. Meer hierover is te vinden op de website bij dit boek. 2.5 Functies van één variabele Voor het tekenen van de grafiek van een functie is enig inzicht in het gedrag van een functie nodig om het juiste domein te kiezen. Maple maakt automatisch een beeldvullend plaatje. Het horizontale interval moet altijd opgegeven worden, het verticale interval mag weggelaten worden. Voorbeeld 2.1 Een enkele grafiek > restart; f:=sin(x)*exp(-x/4); plot(f,x=0..10); f := sin(x)e ( x 4 ) x Figuur 2.1 In figuur 2.1 is de grafiek van de functie f(x) = sin(x)e x 4 weergegeven, die als uitdrukking f is ingevoerd. In ieder geval moet het interval van de onafhankelijke variabele worden opgegeven.
38 26 Handleiding Maple 10 Voorbeeld 2.2 Meer grafieken in één figuur Het is ook mogelijk om een verzameling of lijst grafieken in één figuur te tekenen. Zie voor verzamelingen en lijsten paragraaf 4.8 en 4.7. De grafieken van de volgende drie functies in één figuur 2.2. f(x) = sin(x)e x 4, g(x) = e x 4 en h(x) = e x 4. > restart; f:=sin(x)*exp(-x/4): g:=exp(-x/4); h:=-exp(-x/4); g := e ( x 4 ) h := e ( x 4 ) > plot({f,g,h},x=0..10); #Beter is het om met een lijst te werken, zie volgende commando. > plot([f,g,h],x=0..10,color=[yellow,green,red],thickness=[1,2,3]); Zie figuur x Figuur 2.2 Toelichting: Meer grafieken in één figuur kan met het opgeven van een verzameling functies (tussen accolades): automatisch worden er verschillende kleuren aan de grafieken gegeven. Daarop is geen invloed uit te oefenen. Als echter de functies in het plotcommando met behulp van een lijst (vierkante haken) worden gegeven, kan er invloed uitgeoefend worden op de kleuren, de lijndikte, etcetera. De volgorde ligt dan namelijk vast! (Metsmartplot zijn er mogelijkheden om de eigenschappen van de grafiek eventueel stuk voor stuk aan te passen met behulp van een menu, maar dat is veel meer werk. Zie daarvoor paragraaf ) Ten slotte is hier nog een voorbeeld van een tekst in de commandoregel. Met behulp van een #-teken wordt alles wat daarachter getypt wordt niet gezien als opdracht De eenheidsstapfunctie (Heaviside) Het is mogelijk om grafieken van functies te tekenen die bestaan uit verschillende stukken. Voordat we dat gaan doen, moet eerst de stapfunctie geïntroduceerd worden (meestal als functie van t). De functie van de eenheidsstap is bij Maple gedefinieerd met behulp van Heaviside. De functie Heaviside(t) betekent dat de functiewaarde gelijk is aan 1 rechts van t = 0 en gelijk is aan 0 links van t = 0. In het punt t = 0 is deze niet gedefinieerd. In feite is de waarde van deze functie gewoon 0 of 1.
39 2 Grafieken 27 De Heaviside-eenheidsstap (Unit Step) kunnen we als volgt noteren: 0 voor t < 0 Heaviside(t) = ongede f inieerd voor t = 0 1 voor t > 0 TIP: zie bij de helpfunctie (?Heaviside) voor meer informatie om bijvoorbeeld te definiëren dat op t = 0 de functie Heaviside(0) = 1 of anders. Voorbeeld 2.3 Verschillende grafieken met de stapfunctie gemaakt De functie sin(t) Heaviside(t 2) is bijvoorbeeld te schrijven als: 0 t < 2 sin(t) Heaviside(t 2) = ongede finieerd t = 2 sin(t) t > 2 Er wordt nu een verzameling (let op de accolades) van drie grafieken in één figuur gepresenteerd. > restart; plot({heaviside(t),1.5*heaviside(t-1),sin(t)*heaviside(t-2)}, t=-1..6,discont=true); Zie figuur Heaviside(t 1) Heaviside(t) sin(t) Heaviside(t 2) t Figuur 2.3 Toelichting: In figuur 2.3 zie je dat de grafiek aangevuld is met tekst. De manier waarop dat is gedaan is met textplot. Dit wordt uitgelegd in paragraaf 2.13 en op de cd-rom staat de volledige invoer voor deze figuur met tekst en stippellijnen voor de discontinuïteit. Verder kun je de discontinuïteit in beeld brengen met de extra optie in het commando discont=true. Dat wil zeggen dat er ook echt een sprong gemaakt wordt. Zie voor deze optie ook voorbeeld 2.22 en voorbeeld 3.26.
40 28 Handleiding Maple Functies in stukken Er kan in veel gevallen goed gerekend worden met functies in stukken, de zogenoemde piecewise-functies. Voorbeeld 2.4 Piecewise-functie (functie in stukken) Gegeven is een functie in stukken: de functie f(x). Deze wordt ingevoerd met behulp van het commando PIECEWISE waarbij je steeds pakketjes tussen [ ] opgeeft voor de verschillende functievoorschriften op de bijbehorende intervallen van links naar rechts op de horizontale as. > restart: f:=piecewise([0,x<0],[x^2,x<=1],[1,1<x]); 0 x < 0 f(x) = x 2 x < x > plot(f,x=-1..3); Zie figuur piecewise-functie x Figuur 2.4 > convert(f,heaviside); x 2 Heaviside(x) x 2 Heaviside( 1+x)+Heaviside( 1+x) Toelichting: Er wordt bij PIECEWISE van links naar rechts gelezen, zodat je voor het middelste stuk niet hoeft op te geven 0 x 1. Dus x 1 is voldoende. Je ziet dat je met convert dit soort functies om kunt zetten naar andere manieren van schrijven. De manier van splitsen in stukken met PIECEWISE is echter gemakkelijker te bekijken in de uitvoer dan de schrijfwijze met de stapfunctie (Heaviside) en er kan in de meeste gevallen uitstekend mee gerekend worden. Meer voorbeelden van functies in stukken zie je in de voorbeelden 9.14 en 11.7 en bij de splines in paragraaf Functies met absolute waarden Het commando bij Maple om functies met absolute waarden (of ook wel modulusfuncties genoemd) te maken isabs. Zie ook bij de standaardfuncties paragraaf 1.5.
41 2 Grafieken 29 Voorbeeld 2.5 Grafiek van een functie met absolute waarden De grafiek van f(x) = x 2 3x 5 (zie figuur 2.5) en de omzetting in een piecewise functie. > restart; f:=abs(x^2-3*x-5); plot(f,x=-4..6); f := x 2 3x 5 Zie figuur 2.5. absolutewaardefunctie: f(x) Figuur 2.5 > convert(f,piecewise); x x 2 3x 5 x f(x) = x 2 + 3x+5 x < x 2 3 3x x Toelichting: Er zouden decimale getallen in de uitvoer gekomen zijn als er decimale getallen waren ingevoerd bij de functie! (Zie voor meer informatie over decimale getallen paragraaf ) Door middel van het omzetcommando convert is dit soort functies om te zetten naar een functie in stukken (of eventueel naar een functie met Heaviside). Zie voorbeeld Vectorfuncties (parameterkrommen) Grafieken van vectorfuncties (relaties in parametervorm) worden wel parameterkrommen genoemd. Hierbij moet echter wel bedacht worden wat dit soort relaties feitelijk betekent. Vaak wordt gebruikgemaakt van de parameter t, waarbij je kunt denken dat t de tijd voorstelt. Zie paragraaf voor meer informatie over vectorfuncties Vlakke krommen Krommen in de R 2 kunnen getekend worden met behulp van het gewone commandoplot. Op ieder tijdstip t is er in het x,y-vlak een punt aan te wijzen door af te spreken dat x en y beide functies zijn van t. Er is dus één parameter (één vrijheidsgraad) en dat impliceert de beschrijving van een kromme. Dat kan ook in de ruimte. Zie daarvoor paragraaf
42 30 Handleiding Maple 10 Voorbeeld 2.6 Parameterkromme in het platte vlak Gegeven is de vectorfunctie: x = t 3 3t en y = t 2 1. > restart; x:=t^3-3*t; y:=t^2-1; > plot([x,y,t=-3..3]); x := t 3 3t y := t 2 1 Eventueel kun je twee of meer parameterkrommen in één figuur tekenen (figuur 2.6). Kort gezegd komt het erop neer dat je in dat geval een verzameling of een lijst vectorfuncties opgeeft. > plot([[x,y,t=-3..3],[t,t,t=-3..8]],thickness=[1,2]); Zie figuur 2.6. parameterkromme met parameter t die loopt van t= 3 tot t=3 t= 3 8 t= t=sqrt(3) of t=-sqrt(3) t= t=0 2 Figuur 2.6 Toelichting: Hier is de lijn y = x er dus nog bij gevoegd (in parametervoorstelling is dat: x = t en y = t). Voor een verzameling (met accolades) parameterkrommen in één figuur, maak je gebruik van het commando dat er in het algemeen ongeveer als volgt uitziet: > plot({[x1,y1,t=a..b],[x2,y2,t=c..d]});. Echter als lijst heeft het voordelen om bijvoorbeeld lijndiktes of kleuren in volgorde te kunnen definiëren. Je kunt zelf voor een paar waarden van t nagaan waar het punt zich zal bevinden in het platte vlak. Met behulp vantextplot (paragraaf 2.13) kun je de grafiek met deze gegevens verduidelijken. In voorbeeld 5.9 wordt dezelfde parameterkromme uitgebreid behandeld. Het is belangrijk om in te zien dat de volgorde van de functies x en y (tussen de vierkante haken) goed wordt opgegeven, want het punt ( 18, 8) is niet hetzelfde punt als (8, 18). Er wordt bij Maple automatisch voor handhaving van de volgorde gezorgd bij gebruik van vierkante haken. Gebruik dus vooral geen accolades om een vectorfunctie te beschrijven, want deze zijn gereserveerd voor verzamelingen waar de volgorde van de elementen niet belangrijk is. Zie ook hoofdstuk 4 bij de beschrijving van de verschillende soorten wiskundige objecten.
43 2 Grafieken 31 Voorbeeld 2.7 Voorbeelden van vectorfuncties om te oefenen { { x(t) = ln(t) x(t) = t [0,10] 1 t t [ 10,10] y(t) = y(t) = e 2t 1 t { { x(t) = 1 t 2 x(t) = sin(t) t [ 3,3] t [0,2π] y(t) = 2 t y(t) = cos(2t) { { x(t) = 1 t y(t) = 2 t t [ 10,10] x(t) = t sin(t) y(t) = 1 cos(t) t [0,4π] { { x(t) = y(t) = sin(πt) 2 cos(πt) x(t) = t + 1 y(t) = t 1 1 t [0,4] t [ 10,10] Voorbeeld 2.8 Animatie van een vlakke kromme Een mooi voorbeeld van de manier waarop je kunt zien hoe de grafiek opgebouwd wordt als t het interval doorloopt, is met het commandoanimatecurve uit het plotpakket. Tik het volgende in als x en y eerst wel toegekend zijn als uitdrukkingen in t. > with(plots): animatecurve([x,y,t=-3..3]); Klik vervolgens op de grafiek zodat de bijbehorende contextbalk geactiveerd wordt en klik vervolgens op play. Zie paragraaf 2.12 voor meer informatie over dit commando en andere animaties Ruimtekrommen Een ruimtekromme is eigenlijk een voortzetting van de parameterkromme in de R 2 naar drie dimensies. Werden er bij de vlakke kromme steeds twee coördinaten opgegeven die het eindpunt van een vector in het platte vlak aangaven, bij een ruimtekromme hoef je alleen nog maar een derde coördinaat toe te voegen om het eindpunt van een vector in de ruimte te beschrijven die afhangt van de parameter t. Het blijft voor de beschrijving van een kromme dus bij één parameter (vrijheidsgraad). De vector kan dan voorgesteld worden door [x(t), y(t), z(t)]. Eigenlijk verschilt het niet zoveel van de manier van doen in het platte vlak, maar toch zijn er wel aparte commando s voor die te vinden zijn in het plotpakket. Het zijn de commando s spacecurve en tubeplot. Bij tubeplot is wat duidelijker te zien hoe de kromme loopt in de ruimte. De dikte van de buis kun je instellen metradius. Vergeet niet eerst het plotpakket te activeren. Het commando spacecurve accepteert tegenwoordig ook vectoren, dus je kunt de vector eerst toekennen en vervolgens aanroepen bij het gebruik van spacecurve. (Zie ook voorbeeld 8.6.) Het commandotubeplot accepteert alleen een lijst met coördinaten en geen vectoren, zoals in het voorbeeld. TIP: kies bij ruimtegrafieken altijd voor axis=boxed, dat is het duidelijkst. Met het klikken in de grafiek en het slepen met de muis kan de oriëntatie veranderd worden. In de linkerbovenhoek van het scherm zijn steeds de waarden van de oriëntatieparameters ϑ en ϕ te zien. Voorbeeld 2.9 Ruimtekromme Gegeven is de vectorfunctie [x(t),y(t),z(t)] = [t 3 3t,t 2 1,t]. Ga in de grafiek (figuur 2.7) na hoe het verloop van de kromme is als t het interval [ 3,3] doorloopt.
44 32 Handleiding Maple 10 > restart; interface(warnlevel=0): with(plots): x,y,z:=t^3-3*t,t^2-1,t; x, y, z := t 3 3t, t 2 1, t > spacecurve([x,y,z],t=-3..3,thickness=4,axes=boxed, labels=[x,y,z],color=black,orientation=[75,80]); tubeplot([x,y,z],t=-3..3,labels=[x,y,z],radius=0.2,axes=boxed, orientation=[75,80],labelfont=[times,bolditalic,12], title="ruimtekromme"); Zie figuur 2.7. Ruimtekromme Z Y X Figuur 2.7 Toelichting: Er is gebruikgemaakt van meervoudige toekenning (van x, y en z) om ruimte te sparen. In de uitvoer komen deze toekenningen dan ook op één regel. Let verder op de extra opties bijvoorbeeld labels=... om de symbolen langs de assen te maken. Ook kun je zien dat er nog een font voor de labels ingesteld kan worden. Verder zijn er opties voor de lijndikte, de instelling van de assen, de kleur en de oriëntatie. Naar keuze kun jetubeplot ofspacecurve gebruiken, beide uit het plotpakket. In de linkerbovenhoek is t = 3 en in de rechteronderhoek is t = 3. Voor meer informatie van geavanceerder gebruik van ruimtekrommen zie de website behorende bij dit boek. TIP: meestal ontstaan er waarschuwingen op het scherm als er een pakket wordt geactiveerd. Omdat we daar niet op hoeven te letten is er met interface(warnlevel=0) voor gezorgd dat er géén waarschuwingen op het scherm komen. Voor het beschrijven van een vlak in de ruimte zijn twee parameters (vrijheidsgraden) nodig bij het formuleren van de ruimtevector. Zie daarvan een mooie toepassing in hoofdstuk 8 voorbeeld Functies met poolcoördinaten Om grafieken van functies met poolcoördinaten goed te kunnen tekenen, is een aantal aanwijzingen noodzakelijk. Het gaat om functies waarbij de straal een functie is van de hoek ϕ die gemeten wordt vanaf de positieve x-as, linksom. Houd er rekening mee dat
45 2 Grafieken 33 de straal altijd positief moet zijn. Het commando polarplot([r,phi,phi=a..b]) uit het plotpakket lijkt wat structuur betreft op het plotcommando van de parameterkromme (paragraaf 2.6). Let verder op de vierkante haken vanwege het belang van de volgorde. Meer toepassingen over integratie met poolcoördinaten vind je in paragraaf Voorbeeld 2.10 Twee functies in poolcoördinaten Gegeven zijn twee functies in poolcoördinaten R 1 (ϕ) en R 2 (ϕ). De straal R (positief!) als functie van de hoek ϕ. > restart; interface(warnlevel=0):with(plots): R1 := cos(2*phi); R2:=2*exp(-phi/4); R1 := cos(2φ) R2 := 2e ( φ 4 ) > polarplot([[r1,phi,phi=-pi/4..pi/4], [R1,phi,phi=3*Pi/4..5*Pi/4], [R2,phi,phi=0..2*Pi]],color=[red,blue,green],thickness=[1,1,2], scaling=constrained); Zie figuur 2.8. meer polarplot-grafieken in één figuur 1 R2 0.5 R1 (deel 2) R1 (deel 1) Figuur 2.8 Toelichting: In figuur 2.8 staan de grafieken van beide functies getekend. Kijk goed uit dat er bepaalde waarden van de hoek ϕ niet kunnen bij de functie R 1, omdat de waarde van de straal R 1 beslist positief moet zijn. In dit geval is de straal R 1 positief op de intervallen ϕ [ π 4, π 3π 4 ] [ 4, 5π 4 ]. In bovenstaande sessie worden eigenlijk drie grafieken in één figuur getekend. Omdat de functie R 1 (ϕ) niet overal positief is, moeten we deze splitsen in twee delen waar deze wél positief is. Als je dat niet zou doen en gewoon de functie R 1 (ϕ) zou gaan plotten voor het interval [0,2π], zou je figuur 2.9 krijgen waarbij het bovenste en onderste lusje in feite niet mee doen. Wat er gebeurt in het programma als de straal negatief wordt voor bepaalde waarden van ϕ, is dat dan de (negatieve) straal gespiegeld ten opzichte van de oorsprong wordt weergegeven, terwijl er voor die waarden van ϕ helemaal geen straal zou moeten zijn! Voorbeeld 2.11 Aantal punten waarmee een grafiek wordt opgebouwd Gegeven is de functie in poolcoördinaten r = 2 2cos(2ϕ). In de volgende sessie zie je dat hier niet alle waarden van ϕ mogelijk zijn vanwege het
46 34 Handleiding Maple Figuur 2.9 wortelteken, maar de straal wordt in ieder geval niet negatief, dus je kunt gewoon het interval [0,2π] nemen voor ϕ. Maak zelf de grafiek met: > restart; interface(warnlevel=0): with(plots): r:=2*sqrt(2*cos(2*phi)); r := 2 2 cos(2φ) > polarplot([r,phi,phi=0..2*pi], numpoints=1000,scaling=constrained); De grafiek wordt hier niet afgedrukt. Toelichting: Er worden hier met de optie numpoints meer punten berekend dan normaal, omdat anders de grafiek bij de oorsprong niet mooi wordt. Het opgegeven interval van de onafhankelijke variabele wordt altijd opgedeeld in een aantal intervallen en er worden standaard 50 punten berekend waarmee de grafiek in de meeste gevallen vastgelegd wordt, waarna de punten verbonden worden. Echter er worden in sommige gevallen, als daar aanleiding toe is, ook vaak meer punten gegenereerd om de grafiek op te bouwen. In dit geval zullen er punten verloren gaan, omdat er bij bepaalde waarden van ϕ geen functiewaarden horen. Als je beslist 50 punten wilt laten berekenen, geef je de optie adaptive=false. Met de optie numpoints is het aantal te genereren punten nog extra te beïnvloeden. Door op de grafiek te klikken en een van de knoppen te gebruiken waarmee de punten zichtbaar worden, kun je zien hoeveel en welke punten er uiteindelijk gegenereerd worden. Ook met de optie style=point bij het plotcommando kan er aangegeven worden dat de punten niet verbonden moeten worden. Zie ook voorbeelden 2.16 en Voorbeeld 2.12 Spiraal met poolcoördinaten In de mechanica komt het vaak voor dat de hoek ϕ die doorlopen wordt een functie is van de tijd t. De straal wordt daarmee ook automatisch een functie van de tijd. r(t) = e ϕ(t) 4 en ϕ(t) = 0.5+2t De invoer van een dergelijke functie lijkt op deze manier nog veel meer op die van een parameterkromme zoals besproken in paragraaf 2.6. > restart; interface(warnlevel=0): with(plots): r:=exp(-phi/4); phi:=0.5+2*t; r := e ( φ 4 )
47 2 Grafieken 35 φ := 0.5+2t > polarplot([r,phi,t=0..10],scaling=constrained); Zie figuur polaire figuur van r(phi) waarbij de hoek een functie is van de tijd en t loopt van 0 tot t = Figuur 2.10 Toelichting: Zie op de cd-rom voor het script van de volledige figuur met de tekst erbij en voorbeeld 2.37 waar uitgelegd is hoe de grafiek van tekst kan worden voorzien. De spiraal loopt van buiten naar binnen. Naarmate de waarde van t groter wordt, wordt de straal r juist kleiner. Op tijdstip t = 0 begint de waarde van de hoek φ bij 0.5 radialen. Voorbeeld 2.13 Cirkel met poolcoördinaten Het tekenen van een cirkel met middelpunt O is vrij gemakkelijk met behulp van polarplot. Probeer dit zelf uit met het intikken van de volgende opdracht. > restart; with(plots): polarplot([3,phi,phi=0..2*pi]); Voorbeeld 2.14 Meer functies met poolcoördinaten om te oefenen Let op welke waarden van ϕ geoorloofd zijn. De straal r is steeds positief! r(ϕ) = 1 cos(ϕ) r(ϕ) = e ϕ 2 r(ϕ) = 2sin(ϕ) 1+cos(2ϕ) 1 r(ϕ) = 1 2cos(ϕ) r(ϕ) = 1 r(ϕ) = cos(2ϕ) 1 cos(ϕ) r(ϕ) = 2sin(ϕ) r(ϕ) = ϕ r(ϕ) = 2cos(ϕ) 2.8 Impliciete functies Een bekend voorbeeld is de vergelijking van de cirkel x 2 + y 2 = 4. Deze vergelijking kan opgevat worden alsof y (impliciet) een functie is van x. De vergelijking kan dan ook als volgt genoteerd worden: x 2 + y(x) 2 = 4 waarmee nog duidelijker is dat y impliciet als functie van x wordt opgevat in deze vergelijking. Vaak is het lastig om uit zo n vergelijking de functie y expliciet uit te drukken in x en soms is dat zelfs onmogelijk. Als je uit de bovenstaande vergelijking de y uitdrukt in x, komt er y = ± 4 x 2. Er is in dit geval trouwens geen sprake
48 36 Handleiding Maple 10 van een echte functie, want dan zou moeten gelden dat er bij iedere x-waarde maar één y-waarde hoort. Vandaar dat zo n relatie tussen y en x liever in de vorm van een vergelijking geschreven wordt. Een dergelijke relatie tussen twee variabelen kan in een grafiek zichtbaar gemaakt worden. Hiervoor is het commando implicitplot uit het plotpakket nodig. Als je meer grafieken in één figuur wilt tekenen, geef je een verzameling of een lijst vergelijkingen op. Bijvoorbeeld implicitplot({verg1,verg2},x=-4..4,y=-4..4); waarbij het beslist noodzakelijk is een interval voor de horizontale as én een interval voor de verticale as op te geven. Het programma zoekt daarbinnen combinaties (x, y) die voldoen aan de vergelijking. Het is ook mogelijk om een impliciete functie met smartplot te plotten. Voer een vergelijking met twee variabelen in, klik in de uitvoer met de rechtermuisknop op deze vergelijking en er opent zich een menu waarbij gekozen kan worden voor 2-D Implicitplot. Nadat de figuur getekend is, kan met de rechtermuisknop van alles bijgesteld worden. Waarschijnlijk moeten met Axes en vervolgens Ranges de waarden van de intervallen langs de assen aangepast worden om een geschikte grafiek te krijgen. Standaard is namelijk steeds het interval [ 10, 10] ingesteld voor beide variabelen en dat is lang niet in alle gevallen het meest geschikte interval. Genoemde muisklikacties worden niet bewaard bij het opslaan van het werkblad! Het resultaat wel, als je de output mee opslaat. Het heeft dus voordelen om eenvoudig het commando in te tikken en dan eventueel in het commando zelf dingen te veranderen om een goede grafiek te krijgen. Zie voor meer informatie over smartplot paragraaf Voorbeeld 2.15 De grafiek van de impliciete functie y 2 (x+1) = x 2 y > restart; interface(warnlevel=0): with(plots): C:=y^2*(x+1)=x^2-y; > implicitplot(c,x=-2..10,y=-4..4); Zie figuur C := y 2 (x+1) = x 2 y 4 Grafiek van de impliciete functie y² (x + 1) = x² - y y x 2 4 Figuur 2.11 Toelichting: Bij het commandoimplicitplot is het belangrijk dat je een geschikt interval voor x én voor y neemt. Er worden namelijk in dit gebied punten (x,y) gezocht die aan de vergelijking y 2 (x + 1) = x 2 y voldoen en daarna worden deze punten met elkaar verbonden. Het commando werkt ook vlekkeloos als de vergelijking opgegeven was als y(x) 2 (x+1) = x 2 y(x) waarmee in feite nóg duidelijker is aangegeven dat y als impliciete
49 2 Grafieken 37 functie van x optreedt. Deze informatie zal van pas komen bij het grafisch weergeven van de oplossing van een differentiaalvergelijking (zie voorbeeld 11.3). Als de intervallen niet goed gekozen worden, kan het zijn dat er veel punten worden geprobeerd te berekenen buiten de eigenlijke grafiek en daardoor kan het programma mogelijk te weinig informatie krijgen om de grafiek goed te tekenen. Je hebt dan kans dat de grafiek er niet meer vloeiend uitziet of zelfs hoekig geplot wordt. Dit is in het volgende voorbeeld te zien. Voorbeeld 2.16 Meer punten genereren bij een impliciete functie Een voorbeeld van een ellips die geplot wordt met een veel te groot interval voor de variabelen. > restart; interface(warnlevel=0):with(plots): C:=1/4*x^2+y^2=2; C := x2 4 + y2 = 2 > implicitplot(c,x= ,y= ,scaling=constrained); Zie figuur Ellips geplot in een te groot interval zodat deze hoekig wordt y x 1 Figuur 2.12 Toelichting: Hier was dus duidelijk het interval voor x en y te groot geweest en gaan er in feite punten verloren, zodat er te weinig informatie overblijft om de grafiek vloeiend te tekenen. Mogelijke oplossingen zijn: de intervallen voor de variabelen bij te stellen of meer punten te laten berekenen door de optie numpoints=500 aan het plotcommando mee te geven. Zie ook voorbeeld 2.11 waar gebruikgemaakt wordt van deze optie om meer punten te laten berekenen. Voorbeeld 2.17 Voorbeelden van impliciete functies om te oefenen Besteed bijzondere aandacht aan het opgeven van de intervallen op horizontale en verticale as en stel eventueel het aantal te berekenen punten in met de optienumpoints, zoals ook in voorbeeld 2.11 gedaan is.
50 38 Handleiding Maple 10 x y2 = 10 xy(y 1)(x 1) = 20 y 2 + xy = 10x e xy = x 2 + 2xy x 2 2x 2 y+3y 2 = 4 x 3 + y 3 = 6xy 2.9 Functies van twee variabelen Functies van twee variabelen worden vaak verward met impliciete functies die in de vorm van een vergelijking gegeven zijn. Let dus goed op in welke vorm de functie gegeven is. Voor het tekenen van de grafiek van een functie van twee variabelen zijn er drie assen nodig! Voor een gewone functie van één variabele was er altijd één as nodig voor de variabele en één as voor de functiewaarden. Echter bij functies van twee variabelen hebben we om te beginnen al twee assen nodig voor de variabelen en verder nog een functie-as. Voor de functie-as wordt meestal de Z-as genomen. De variabelen zijn vaak x en y, dus deze variabelen worden dan uitgezet langs de X- en Y-as. Het commando voor het tekenen van driedimensionale grafieken die een oppervlak voorstellen, is bij Maple het commando plot3d. Dit commando behoort tot de standaardcommando s en er hoeft niet een speciaal pakket geactiveerd te worden. Ook handig om te weten is dat een 3d-grafiek duidelijker wordt als je voor axes=boxed kiest. Met het klikken in de grafiek en slepen met de muis kan de oriëntatie veranderd worden. In de linkerbovenhoek van het scherm zijn steeds de waarden van de oriëntatieparameters ϑ en ϕ te zien. Voorbeeld 2.18 Ruimtefiguur van de functie f(x,y) = x 2 y tesamen met het 0-niveau > restart; f:=x^2*y; f := x 2 y > plot3d({f,0},x= ,y= ,axes=boxed, title="ruimtefiguur met nul-niveau",orientation=[30,75]); Zie figuur Ruimtefiguur f = x²y met nul-niveau y x Figuur 2.13 Toelichting: Merk op dat er een verzameling van twee grafieken getekend is in figuur 2.13, namelijk de grafiek van f(x,y) = x 2 y en de grafiek z = 0. Verder zijn hier een paar voorbeelden van opties gebruikt die met het plotcommando
51 2 Grafieken 39 meegegeven kunnen worden. Deze manier van aanpassen van de presentatie kan ook met de muis via het menu aangebracht worden, behalve die van de titel. Nog een voorbeeld van een functie met twee variabelen vind je in voorbeeld 2.24 waar de optieview wordt besproken. TIP: oppervlakken in de ruimte kunnen ook geformuleerd worden door middel van een vectorvoorstelling (of parametervoorstelling) met twee vrijheidsgraden. In bovenstaand voorbeeld zou dat de parametervoorstelling [x, y, f(x, y)] kunnen zijn. Om te plotten hoef je dan alleen maar het volgende te doen: > plot3d([x,y,f],x= ,y= ); Dit plot-comando accepteert behalve lijsten ook vectoren. Een toepassing daarvan is voorbeeld 8.16 waar er sprake is van een raakvlak aan het functievlak in de ruimte Contourplot Zoals gezegd worden functies van twee variabelen vaak verward met impliciete functies die in de vorm van een vergelijking gegeven zijn. Echter er is wel een verband tussen deze twee verschillende wiskundige objecten. Voorbeeld 2.19 Het verband tussen contourplot en implicitplot We vergelijken in dit voorbeeld de functie van twee variabelen f(x,y) = x 2 2x 2 y+3y 2 met de impliciete functie x 2 2x 2 y+3y 2 = 10. > restart; interface(warnlevel=0): with(plots):f:=x^2-2*x^2*y+3*y^2; f := x 2 2x 2 y+3y 2 > contourplot3d(f,x=-4..4,y=-4..4,filled=true,coloring=[blue,white], axes=boxed,contours=25,orientation=[21,60],labels=[x,y,z]); Zie figuur Contourplot functie van twee variabelen met hoogtelijnen y x Figuur 2.14 > C:=seq(f=10*k,k=1..3); C := x 2 2x 2 y+3y 2 = 10, x 2 2x 2 y+3y 2 = 20, x 2 2x 2 y+3y 2 = 30 > implicitplot({c},x=-4..4,y=-4..4); Zie figuur 2.15.
52 40 Handleiding Maple 10 De contourlijnen ( hoogtelijnen ) geprojecteerd op het x,y-vlak 4 3 y x Figuur 2.15 Toelichting: De functie van twee variabelen wordt met contourplot3d in een driedimensionale grafiek gevisualiseerd. Goed te zien zijn de contouren die punten met gelijke functiewaarden verbinden (hoogtelijnen). Dit had ook wel met plot3d gekund met daarna enkele acties met de knoppen van de contextbalk of met een paar opties, bijvoorbeeld met > plot3d(f,x=-4..4,y=-4..4,axes=boxed,style=patchcontour,contours=25, orientation=[21,60],labels=[x,y,z]); Echter op de manier met contourplot is de presentatie nog iets beter naar je hand te zetten. Je kunt met een paar opties zoalsfilled=true encoloring nog meer sturen (zonder deze opties zie je alleen de contouren). Het is ook mogelijk het aantal contourlijnen op te geven en de presentatie nog meer naar je hand zetten. Wat er verder nog gebeurt, is het definiëren van een aantal impliciete functies zoals x 2 2x 2 y+3y 2 = 10, x 2 2x 2 y+3y 2 = 20 en x 2 2x 2 y+3y 2 = 30. Dit is gedaan met behulp van het commando seq waarmee je de rij C kunt maken (zie paragraaf 4.6). Een impliciete functie in de vorm van een vergelijking met twee variabelen x en y is een kromme in het x,y-vlak (zie paragraaf 2.8). Vervolgens wordt de verzameling van al deze impliciete functies {C} in één figuur bij elkaar gebracht met behulp van implicitplot. Vergelijk nu eens de vormen van de krommen in de beide figuren: figuur 2.14 en Doorsnijdingen met een vlak Op een gemakkelijke manier is het tegenwoordig mogelijk om de grafiek van een functie van twee variabelen (een 3d-grafiek) te doorsnijden met verschillende (platte) vlakken. Het kan met het commando Crossection uit het MultivariateCalculus-subpakket van het Student-pakket. Dit dient dan eerst geactiveerd te worden met with(student[ MultivariateCalculus]):. Je kunt echter ook in één keer eerst de tutor in de vorm van een Maplet bestuderen > Student:-MultivariateCalculus:-CrossSectionTutor(); zie figuur Onder in de tutor staat het commando voor de grafiek om deze door middel van selecteren met Ctrl-c en Ctrl-v op te kunnen nemen in het werkblad. De paraboloïde f = x 2 + y 2 wordt doorsneden met 3 platte vlakken die opgegeven worden in de vorm van een lineaire vergelijking, dus bijvoorbeeld met x + y = 0. Alleen doorsnijdingen met platte vlakken zijn mogelijk.
53 2 Grafieken 41 Figuur Verschillende soorten grafieken in één figuur We hebben al gezien in de vorige paragrafen hoe je een verzameling grafieken in één figuur maakt. Zo n verzameling kon meegegeven worden aan een plotcommando. Je was dan echter wel gebonden aan grafieken die met hetzelfde plotcommando gemaakt werden. Het is ook mogelijk om een verzameling totaal verschillende grafieken toch in één figuur te krijgen waarbij de assenstelsels samenvallen. Dit gaat met display({..,..,..}) uit het plotpakket. Het vereist dan wel enige voorbereiding. De grafieken die later samengevoegd worden in één assenstelsel moeten allemaal stuk voor stuk apart worden gedefinieerd en opgeslagen, elk onder een eigen naam. Voorbeeld 2.20 Impliciete functie en functie in poolcoördinaten De grafieken van de impliciete functie C : x 3 3xy 2 = 1 en de functie in poolcoördinaten r(ϕ) = 6 5cos(ϕ) samen in één figuur. > restart;interface(warnlevel=0): with(plots): C:=x^3-3*x*y^2=1; r:=6-5*cos(phi); C := x 3 3xy 2 = 1 r := 6 5cos(φ) > p1:=implicitplot(c,x=-5..5,y=-5..5,thickness=3,color=black, legend="impliciete functie"): p2:=polarplot([r,phi,phi=0..2*pi],linestyle=4,color=black, legend="functie in poolcoördinaten"): display({p1,p2},scaling=constrained, title="twee verschillende soorten grafieken"); Zie figuur Toelichting: Let op! De grafieken worden hier ingevoerd met een naam (hier p 1 en p 2 ) en afgesloten met een dubbele punt! De grafieken worden dus stuk voor stuk apart opgeslagen als een verzameling punten. Met display kan deze verzameling voorbereide plots in één figuur bij elkaar gebracht worden. Het heeft enorm veel voordelen om deze manier vaker te hanteren. Eigenschappen van grafieken met kleur en stijl kunnen dan geheel voorbereid worden! Ook de legenda kan al voorbereid worden.
54 42 Handleiding Maple 10 Twee verschillende soorten grafieken y x impliciete functie functie in poolcoördinaten Figuur 2.17 Met dit commando display kunnen natuurlijk ook grafieken van dezelfde soort bij elkaar gevoegd worden en ook wel meer dan twee. Hier zien we meteen dat lijndikte en lijnstijl voor beide grafieken verschillend gemaakt kunnen worden, ter onderscheid. Zie in de index van dit boek bij display voor nog meer voorbeelden. Door met de rechtermuisknop op de grafiek te klikken heb je nog de mogelijkheid om dingen aan te passen, echter deze muisacties worden dan natuurlijk niet in het script van de figuur opgeslagen. TIP: sluit liever niet af met een puntkomma bij het vooraf definiëren van de afzonderlijke figuren, want dan krijg je de code van al deze punten te zien, wat je niet wilt! Voorbeeld 2.21 Vlakken en lijnen in de ruimte In voorbeeld 9.9 is een grafiek nodig van twee vlakken met een snijlijn om een dubbelintegraal te illustreren. Hoe de grafiek daarvan (figuur 2.18) gemaakt wordt, kunnen we hier alvast laten zien. > restart; interface(warnlevel=0): with(plots): f:=5*x-2*y; y1:=solve(f=0,y); p1:=plot3d(f,x=0..1,y=0..1): p2:=plot3d(0,x=0..1,y=0..1,color=gray,style=patchnogrid): p3:=spacecurve([x,y1,0],x=0..1,thickness=5,color=black, view=[0..1,0..1,-5..5],orientation=[-107,45]): display({p1,p2,p3},axes=boxed,labels=[x,y,z], title="twee snijdende vlakken"); Zie figuur f := 5x 2y y1 := 5x 2 Toelichting: De snijlijn die in het vlak z = 0 ligt, moet eerst in een vectorvoorstelling (parametervoorstelling) in de R 3 geformuleerd worden met één parameter! Dus [x(t),y(t),0]. Overigens kunnen de vlakken f = 5x 2y en z = 0 eventueel als alternatief ook wel met een parametervoorstelling geformuleerd worden. Daarvan is een toepassing te zien in voorbeeld 8.16.
55 2 Grafieken 43 twee snijdende vlakken 4 2 Z Y X Figuur 2.18 De opties voor de labels langs de assen en het assenstelsel boxed kunnen het beste bij het commandodisplay opgegeven worden. Verder is hier ook nog een voorbeeld van de optie patchnogrid die aan het grondvlak z = 0 is meegegeven Asymptoten Bij het tekenen van grafieken van een functie van één variabele is het in principe voldoende om alleen het domein op te geven van die variabele. Zie paragraaf 2.5. Als er echter verticale asymptoten in de grafiek voorkomen, is het verstandig om tevens het interval op de verticale as op te geven, zodat het plaatje niet teveel in elkaar gedrukt wordt. De asymptoot wordt dan meestal wél getekend door Maple, hoewel deze eigenlijk niet tot de grafiek behoort; de asymptoot zou eigenlijk gestippeld moeten worden of helemaal niet weergegeven moeten worden. Met de optie discont=true kan bewerkstelligd worden dat de asymptoot niet getekend wordt. Zie ook voorbeeld 2.3 bij de stapfunctie. De punten aan weerskanten van de discontinuïteit worden dan door het programma niet met elkaar verbonden. Voorbeeld 2.22 Verticale asymptoot Gegeven is de functie f(x) = 1 2x x+1 met een verticale asymptoot x = 1. > restart; interface(warnlevel=0): f:=(1-2*x)/(x+1); with(plots): f := 1 2x x+1 > plot(f,x=-3..4,view=[-3..4, ]); Op deze manier is het beperkte interval op de verticale as gegarandeerd. (De figuur is niet afgedrukt.) In het volgende wordt meteen ook de mogelijkheid getoond om de asymptoot te stippelen metlinestyle=2. > p1:=plot(f,x=-3..4, ,linestyle=2): p2:=plot(f,x=-3..4, ,color=black,thickness=2,discont=true): display({p1,p2},title="discontinue functie met verticale asymptoot"); Zie figuur 2.19.
56 44 Handleiding Maple 10 discontinue functie met verticale asymptoot 15 y x Figuur 2.19 Toelichting: Er kan gewerkt worden met de optie view, zoals in voorbeeld 2.22, maar er kan ook een interval opgegeven worden voor de verticale as. Dit is om te voorkomen dat het plaatje wordt platgedrukt. Als verder de optie discont=true wordt meegegeven, wordt de asymptoot niet getekend. De optie view wordt vaak gebruikt als er geen andere manier is om intervallen aan te passen, bijvoorbeeld bij functies van twee variabelen in voorbeeld Door de twee grafieken met display over elkaar heen te leggen, wordt bewerkstelligd dat de asymptoot gestippeld wordt weergegeven. Zie voor meer informatie over display paragraaf Voorbeeld 2.23 Snel commando voor rationale functies Er bestaat in het subpakket Precalculus binnen het Student-pakket nog een mooi commando om in één keer inzicht te geven in een rationale functie van één variabele waar meestal asymptoten bij voorkomen. De nodige pakketten moeten daarvoor wel eerst geactiveerd worden. Zie bij de helpfunctie paragraaf 1.8 van hoofdstuk 1 enige informatie over pakketten. > restart; interface(warnlevel=0):with(student): with(precalculus): f:=(3*x^2+2*x-1)/(x+2); RationalFunctionPlot(f ); f := 3x2 + 2x 1 x+2 Zie figuur > with(calculus1): Asymptotes(f, x); [y = 3x 4, x = 2] Toelichting: Geheel automatisch verschijnt er bij gebruik van RationalFunctionPlot in de grafiek een titel met informatie over de functie en het interval. Er hoeft ook geen interval opgegeven te worden voor de verticale as, maar er kan eventueel nog wel een optie view bij gegeven worden als dat wenselijk is, dus bijvoorbeeld RationalFunctionPlot (f,view=[-6..6,=20..20]). Verder verschijnen ook geheel automatisch de asymptoten in de grafiek gestippeld en wel en met verschillende kleuren, die later nog ingesteld kunnen worden. (Zie voor meer informatie daarover de website behorende bij het boek.) Als je dan ook nog het subpakket Calculus1 opent, kunnen de vergelijkingen van de asymptoten opgevraagd worden met Asymptotes. Ook een aanrader is in hetzelfde Precalculus-subpakket (te activeren met with(student):
57 2 Grafieken 45 Plot of f(x) = (3*x^2+2*x 1)/(x+2) on the Interval [ 10, 10] x Figuur 2.20 with(precalculus): ) ook eens RationalFunctionTutor( ); in te tikken. Je komt dan in een Maplet terecht (een soort applet) waarin je dingen kunt veranderen en waarin ook de vergelijkingen van de asymptoten gegeven worden. Onder in dit Maplet vind je het commando om hetzelfde in één keer te kunnen doen als je dit met copy en paste (Ctrl-c en Ctrl-v) overneemt en in je werkblad voegt. Meer informatie over dit Student-pakket is te vinden bij de animaties paragraaf 2.12 en op de website behorende bij dit boek. Voorbeeld 2.24 Oneindige discontinuïteit bij functie van twee variabelen De grafiek van de functie f(x,y) = y is voor (x,y) = (0,0) niet gedefinieerd. x 2 +y 3 > restart; f:=y/(x^2+y^3); f := y x 2 + y 3 > plot3d(f,x=0..2,y=0..2,view=[0..2,0..2,0..5],axes=boxed); Zie figuur y x Figuur 2.21 Toelichting: De enige manier om in deze situatie ervoor te zorgen dat de figuur niet platgedrukt wordt, is het werken met view. Zie verder voor dit soort functies paragraaf 2.9.
58 46 Handleiding Maple Animaties Met animaties is het mogelijk om presentaties te verlevendigen en visualisaties te maken van begrippen die anders te veel woorden kosten om iets duidelijk te maken. Daarom is het belangrijk dat er op deze plaats enige aandacht aan besteed wordt. Er zijn in feite drie soorten animaties. Ten eerste is het instructief om te zien hoe de grafiek van een functie opgebouwd wordt als de variabele het interval doorloopt. Als een functie behalve een variabele ook nog een parameter bevat, kan in een animatie gevisualiseerd worden hoe de grafiek verandert als de parameter een bepaald interval doorloopt. Ten derde kan er ook nog een aantal specifieke grafieken worden voorbereid, die dan achtereenvolgens als een filmpje kunnen worden afgedraaid. In feite komen deze drie manieren allemaal op dit laatste idee neer. Verder is er een groot aantal animaties beschikbaar in het Student-pakket en ten slotte zijn er op de website bij dit boek in het bestand Animaties veel voorbeelden te zien en vrij te kopiëren. Zodra een animatie op het scherm verschijnt, klik je met de muis in de grafiek en wordt de contextbalk aangepast. Er komt een aantal knoppen beschikbaar en de animatie kan geactiveerd worden met play (zie figuur 2.22). Er zijn ook mogelijkheden om de animatie langzamer te laten verlopen, beeld voor beeld te bekijken (frames) of in omgekeerde richting af te draaien, enzovoort. Zorg dat je Balloon Help (blz. 3) aan hebt staan om te weten wat de betekenis is van de knoppen. Figuur 2.22 Er volgt hier nu een aantal voorbeelden zonder grafiek. Op de cd-rom is een en ander na te spelen Het doorlopen van de grafiek Bij animaties van het soort waarbij de grafiek in het platte vlak wordt doorlopen, worden er opvolgend standaard 16 grafieken (frames) getoond die bestaan uit standaard 50 punten. (Het aantal frames kan ook opgegeven worden; zie voorbeeld 2.28.) Als bijvoorbeeld een grafiek wordt gemaakt waarbij x loopt van 0 tot 10, worden de 50 punten eerst verdeeld over een klein interval van de variabele en naarmate je verder komt bij het doorlopen van de grafiek, worden de punten bij latere frames verdeeld over steeds grotere intervallen. Als de grafiek
59 2 Grafieken 47 op het laatst wat hoekig wordt, kun je dit beter oplossen met het verhogen van numpoints (zie voorbeeld 2.11 en 2.16) dan met het verhogen van het aantal frames. Het effect is goed te zien als je bij willekeurig een van de animaties in de voorbeelden als extra optie bij het commando de optiestyle=point neemt. Voorbeeld 2.25 Het doorlopen van de grafiek alsof je de grafiek zelf tekent Van de functie f(x) = x2 +1 x 1 wordt de grafiek doorlopen waarbij met behulp van de optieview het verticale interval beperkt wordt met het oog op de verticale asymptoot (zie voor view ook paragraaf 2.11). > with(plots):animatecurve((x^2+1)/(x-1),x= , view=[ , ],style=point); De enige manier om ervoor te zorgen dat de grafiek niet platgedrukt wordt, is met view. De andere manier, met het opgeven van het interval op de verticale as, zal niet werken bij dit commando. Ook werkt de optiediscont=true hier niet. TIP: hier is de optie style=point meegegeven om te laten zien welke punten er achtereenvolgens worden gegenereerd bij de verschillende frames. Als je de animatie langzaam afspeelt, zie je dat de 50 punten eerst over een klein interval verdeeld worden en vervolgens steeds over een groter interval. Voorbeeld 2.26 Twee of meer animaties in één Het is ook mogelijk om een verzameling (met accolades) van twee of meer grafieken tegelijk in een animatie op te nemen: > with(plots):animatecurve({x-x^3,sin(x)},x=0..pi/2); De individuele eigenschappen van elke grafiek zijn dan wat moeilijker te verwezenlijken. De krommen die doorlopen worden, hebben dan bijvoorbeeld allemaal dezelfde kleur. Een lijst met functies opgeven bij animatecurve is namelijk niet mogelijk. In het volgende voorbeeld is daarvoor een oplossing. Voorbeeld 2.27 Meer animaties met verschillende stijlen in één In dit voorbeeld wordt met behulp van display een mogelijkheid gegeven om verschillende stijlen voor de grafieken te gebruiken in de situatie van meer grafieken in één animatie. Zie voor display ook paragraaf > restart; with(plots): p1:=animatecurve( x-x^3, x=0..pi/2,color=blue,thickness=3 ): p2:=animatecurve(sin(x),x=0..pi/2,color=red, thickness=1,labels=["x","y"]): display({p1,p2},title="twee grafieken die worden doorlopen als x toeneemt"); Voorbeeld 2.28 Het doorlopen van een parameterkromme (grafiek van een vectorfunctie) > with(plots):animatecurve([t-t^3,sin(t),t=0..pi/2],color=black, thickness=2,frames=50); Met het opgeven van het aantal frames, (standaard 16) worden er meer beelden geproduceerd die achterelkaar verschijnen. Het duurt dan ook voor standaardsnelheid iets langer voordat de animatie doorlopen is. De animatie kan overigens wel sneller afgedraaid worden met een van de knoppen (zie figuur 2.22). De grafiek van een complexe functie (van een reële variabele) kan op deze manier zelfs getekend worden in het complexe vlak, zoals in voorbeeld te zien is.
60 48 Handleiding Maple 10 Voorbeeld 2.29 Het doorlopen van een grafiek met poolcoördinaten Bij poolcoördinaten is het mogelijk om bijvoorbeeld de kromme r = 1 cos(ϕ) te laten doorlopen bij toenemende hoek ϕ. Er kan dan echter niet van polarplot gebruikgemaakt worden. Wel is het mogelijk door middel van een extra optie coords=polar bij het commando animatecurve toch het programma te laten weten dat het om poolcoördinaten gaat: > with(plots): r:=1-cos(phi); animatecurve([r,phi,phi=0..2*pi],coords=polar); Functies met parameters in een animatie In feite is het commando animate, dat in de volgende voorbeelden aan de orde komt, hét commando waar al dit soort animaties mee gedaan kunnen worden. Als je een grafiek kunt maken (impliciet, poolcoördinaten, ruimtekrommen, vlakken in de ruimte, enzovoort) met alle opties die maar mogelijk zijn (kleuren, lijnstijlen, assen, labels, titel, enzovoort), kun je deze ook animeren door er een parameter bij te betrekken en er animate voor te zetten. Ook alle vorige situaties van paragraaf , bij het doorlopen van de grafiek, kunnen in feite met het commando animate verwezenlijkt worden door de parameter in het interval te verwerken (voorbeeld 2.33). Voor de animatie zelf zijn ook weer bepaalde mogelijkheden om dingen aan te passen zoals een achtergrondgrafiek, de waarde van de frame-parameter waarvoor gekozen kan worden of deze wel of niet in beeld verschijnt en ten slotte het aantal frames dat ingesteld kan worden. Standaard is bij het commando animate het aantal frames 25 en dat is meestal ruim voldoende voor een goede animatie. Voorbeeld 2.30 Eenvoudig voorbeeld: de amplitude van de sinus Stel je hebt een functie van twee variabelen waarbij één van de variabelen als parameter aangemerkt kan worden, bijvoorbeeld de functie f(x) = A sin(x) waarbij de amplitude A de parameter is (we noemen dat dan de frame-parameter). De bedoeling is nu om achtereenvolgens grafieken te maken waarbij de waarde van A bijvoorbeeld loopt van 1 tot 3. In een filmpje worden dan achtereenvolgens 25 beelden van de grafiek met een steeds groeiende waarde van de frame-parameter A vertoond. De structuur van het commando is als volgt: > with(plots): f:=a*sin(x); animate(plot,[f,x=0..2*pi],a=1..3); Toelichting: Je wilt een bepaalde grafiek van f animeren. (De functie f moet dan wel een parameter bevatten.) Alles wat het plotten van de functie betreft staat tussen de vierkante haken. Deze animatie is gebaseerd op plot(f,x=0..2*pi). Daarbuiten staan de dingen die met het animeren te maken hebben, zoals het interval van de frame-parameter. Het resultaat is te zien in figuur 2.22 waar ook te zien is dat boven in de grafiek de waarde van de frame-parameter A op ieder moment tijdens de animatie wordt weergegeven. Voorbeeld 2.31 Animatie met achtergrond en plotopties Het vorige voorbeeld 2.30 wordt nu iets uitgebreid om te laten zien dat alles wat je wilt mogelijk is. Voor het overzicht van de structuur kun je het beste eerst de functie definiëren, daarna nog een paar opties voor de grafiek en apart nog wat opties voor de animatie. De structuur van het commando wordt dan wat duidelijker. > animate(plot,[f,x=0..2*pi,optiesgrafiek],a=1..3,optiesanimatie); Weer dezelfde sinus waarvan de amplitude A groeit van 1 tot 3. > restart; with(plots): f:=a*sin(x); f := Asin(x)
61 2 Grafieken 49 > OptiesGrafiek:=color=black,thickness=2,labels=[X,Amplitude], labeldirections=[horizontal,vertical], title="amplitude A van de sinus wordt groter": achtergrond:=plot(sin(x),x=0..2*pi,linestyle=2,color=red): animate(plot,[a*sin(x),x=0..2*pi,optiesgrafiek],a=1..3, background=achtergrond,frames=30); Zie figuur Amplitude A van de sinus wordt groter A = Amplitude X Figuur 2.23 Toelichting: Eerst wordt het plotpakket geactiveerd en de functie f(x) gedefinieerd met parameter A. Alle opties die we nodig hebben voor de grafiek, zoals labels, kleur en titel kunnen we vooraf in een rij definiëren (zie voor meer informatie over rijen paragraaf 4.6). Bij dit soort animaties is het ook mogelijk een achtergrondgrafiek voor te bereiden en bij de opties voor animatie kun je dan deze achtergrond als background opgeven. Het aantal frames kan opgegeven worden en als je dat niet doet, komen er standaard 25 frames. Verder wijst het zich vanzelf en kan de animatie in gang gezet worden (zie het begin van paragraaf 2.12). Boven in beeld komt de titel te staan die bij de plotopties afgesproken was en daaronder automatisch de waarde van de parameter A die steeds verandert tijdens de animatie. Deze laatste kan eventueel weggelaten worden met de optie paraminfo=false bij de animatieopties. Voorbeeld 2.32 Animatie in de ruimte In dit voorbeeld kun je zien dat het in het geheel niet uitmaakt wat voor soort grafiek het is, plot3d, implicitplot, polarplot of spacecurve of iets anders. Hier volgt een voorbeeld van een functie van twee variabelen met nog een parameter t erbij. Het basiscommando is danplot3d. > restart;interface(warnlevel=0):with(plots):f:=1/((x-t)^2+(y-t)^2+1); 1 f := (x t) 2 +(y t) > PlotOpties:=axes=boxed,orientation=[110,50],style=patchnogrid, title="muis onder het kleed"; animate(plot3d,[f,x=-5..5,y=-5..5,plotopties],t=-5..5);
62 50 Handleiding Maple 10 Voorbeeld 2.33 De frame-parameter in het plotinterval Hetzelfde voorbeeld van de functie f(x) = x2 +1 x 1 met de verticale asymptoot als voorbeeld 2.25, maar nu met meer mogelijkheden. De frame-parameter is nu in het interval opgenomen en niet in de functie zelf. Zo krijg je hetzelfde effect als met animatecurve: dat de grafiek achtereenvolgens doorlopen wordt. > restart; with(plots): f:=(x^2+1)/(x-1): achtergrond:=plot([1,t,t= ],linestyle=2,color=red): animate(plot,[f,x=-10..a, ,discont=true,thickness=2, color=blue],a= ,background=achtergrond); Toelichting: De functie wordt gedefinieerd. Vervolgens wordt de achtergrond (de verticale aymptoot) voorbereid met lijnstijl 2 (gestippeld). In dit geval wordt gebruikgemaakt van een parametervorm die het meest geschikt is voor het modelleren van een rechte lijn. Verder kun je zien dat de frame-parameter A in het plotinterval voorkomt. Ook zijn de bekende plotopties weer te gebruiken zoals discont=true voor het níet-plotten van de verticale asymptoot (zie ook voorbeeld 2.22) Gebruik van display Met het gebruik van display kunnen er verschillende grafieken in één figuur worden samengebracht. Er kunnen ook meerdere geanimeerde grafieken op deze manier samengebracht worden in één figuur. In voorbeeld 2.26 is dat bijvoorbeeld gedaan met twee animatiecurves. Je kunt ook zelf animaties maken met vooraf gemaakte grafieken die dan achter elkaar worden afgespeeld (in een bepaalde volgorde!). Als bij het commando display namelijk de optie insequence=true opgegeven wordt, dan wordt de lijst met alle grafieken die voorbereid zijn niet over elkaar heen gelegd, maar achter elkaar afgespeeld. Er kunnen zelfs vooraf aangemaakte animaties op deze manier achter elkaar afgespeeld worden! Het is wel belangrijk dat het nadrukkelijk een lijst is met grafieken of animaties, omdat de volgorde van het afspelen belangrijk is. Voorbeeld 2.34 De ruimtekromme v wordt doorlopen > restart; interface(warnlevel=0): with(plots): v:=[2*cos(t),3*sin(2*t),2*t]; N:=20; v := [2cos(t), 3sin(2t), 2t] N := 20 > P:=seq(spacecurve(v,t=0..2*Pi/N*k,thickness=2,title=cat("Het punt is ", convert(evalf[4](subs(t=2*pi/n*k,v)),string))),k=1..n): display([p], insequence=true,orientation=[-55,75],axes=boxed, labels=[x,y,z]); Toelichting: Bereid eerst een ruimte-vector v = [2 cos(t), 3 sin(2t), 2t] voor (als lijst of als vector) en spreek het aantal frames N af. De bedoeling is nu dat de ruimtekromme doorlopen wordt naarmate (de tijd) t vordert. Verdeel het interval voor t ([0,2π]) in N deelintervallen en maak op die manier N grafieken van ruimtekrommen die elk een stukje verder doorlopen, inclusief opties die bij elke kromme moeten horen. Deze rij (P) van N grafieken (ruimtekrommen) kan snel gemaakt worden met het commando seq (zie paragraaf 4.6). Deze rij moet netjes achter elkaar afgespeeld worden. Met de vierkante haken [P] wordt de juiste volgorde gegarandeerd. Als nu bij het commando display de optie insequence=true opgegeven wordt, dan worden alle grafieken die voorbereid zijn niet over elkaar heen gelegd, maar achter elkaar afgespeeld. Het beste kan de optie axes=boxed
63 2 Grafieken 51 opgegeven worden bij het display-commando evenals de orientation-instellingen en die van delabels. De titel moet wel al bij de rij grafieken worden aangemaakt, omdat deze titel steeds bij ieder frame anders is. Dat is dan ook bij gebruik van display het grote voordeel, terwijl het aanpassen van de titel voor elk frame afzonderlijk niet kan bij de animatie-commando s animate en animatecurve. De titel geeft namelijk steeds de coördinaten van het punt aan waar je op elk moment bent. Omdat de titel een string is, wordt voor uitleg hierover naar paragraaf 4.12 verwezen Animaties met Maplets Veel animaties zijn direct beschikbaar in de vorm van Maplets. Een Maplet is een soort applet waarin dingen veranderd kunnen worden, gebaseerd op Java. In de subpakketten van het Student-pakket (te activeren met with(student)) zijn nogal wat zogenoemde tutors opgenomen in de vorm van Maplets. Als je met with(student[calculus1]) een van deze subpakketten activeert en afsluit met een puntkomma, dan vind je bijvoorbeeld de TangentTutor. Met een ander subpakket with(student[vectorcalculus]) vind je bijvoorbeeld de SpaceCurveTutor en de VectorFieldTutor. In voorbeeld 3.27 vind je een Maplet over limieten. In paragraaf staat een figuur van de CrossSectionTutor waarbij het ook mogelijk is een animatie in werking te stellen van de doorsnijding van een ruimtefiguur met een plat vlak. Zie ook de website behorende bij dit boek voor veel voorbeelden met het Student-pakket. Voorbeeld 2.35 Animatie van de raaklijn aan een grafiek > restart;with(student); with(calculus1): [Calculus1, LinearAlgebra, MultivariateCalculus, Precalculus, SetColors, VectorCalculus] > TangentTutor(); Zie figuur 3.7. Toelichting: In dit voorbeeld is te zien dat als je eerst het Student-pakket activeert en afsluit met een puntkomma, dat je dan de subpakketten te zien krijgt. Vervolgens kun je een van de subpakketten activeren, hier is dat Calculus1. Het is ook mogelijk om in één keer het Maplet te openen zonder eerst de pakketten te activeren. Dat gaat dan als volgt: > Student:-Calculus1:-TangentTutor(); In het Maplet kun je vervolgens de functie zelf invullen en allerlei andere instellingen doen wat betreft de raaklijn in een punt van de grafiek en het differentiequotiënt (Newton-quotiënt), waarna je met de Animate-knop de animatie in werking kunt zetten. Al deze instellingen worden direct vertaald naar een commando dat onderaan in het Maplet komt te staan. Dit commando kan met Ctrl-c en Ctrl-v naar je werkblad verplaatst worden en je kunt dus op die manier een dergelijke animatie ook, gespecificeerd met je eigen instellingen, in je werkblad opnemen. Voorbeeld 2.36 Een animatie met een ruimtekromme > restart; with(student[vectorcalculus]): SpaceCurveTutor(); Zie figuur 2.24.
64 52 Handleiding Maple 10 Figuur 2.24 Toelichting: Hier is te zien dat je ook direct het subpakket kunt activeren. Nog sneller gaat het met: > Student:-VectorCalculus:-SpaceCurveTutor(); Het gaat hier over een ruimtekromme (die je zelf kunt invoeren) waar met behulp van Display Options steeds de snelheidsvector (Tangent Vector) in ieder punt van de kromme gevisualiseerd wordt. De snelheid van animeren kan hier ingesteld worden en er zijn allerlei andere instellingen mogelijk die direct vertaald worden naar een commandoregel onderaan die je dan weer eventueel met copy en paste (Ctrl-c en Ctrl-v) in je werkblad kunt binnenhalen. Voor meer informatie over ruimtekrommen zie paragraaf Grafiek met punten, pijlen en tekst In het volgende voorbeeld kun je zien hoe in één figuur een aantal mogelijkheden gecombineerd wordt. Je hebt hier het commando display uit het plotpakket voor nodig (zie paragraaf 2.10) om de verschillende grafieken die gemaakt worden te combineren tot één figuur. Verder het commando textplot uit het plotpakket om de tekst in de figuur te plaatsen en ten slotte het commando arrow uit het plotpakket om de pijlen te tekenen. Om een lijst of een verzameling punten te tekenen is geen speciaal commando nodig, dat kan gewoon met plot maar dan moet wel voor een stijl met punten gekozen worden door middel van de optiestyle=point. In voorbeeld 12.5 en voorbeeld 12.3 worden nog andere manieren aangeboden om punten te tekenen. TIP: het is soms handig om bij de punten ook de oorsprong op te geven. Je krijgt dan vaak een betere figuur. Een manier om een aantal punten in het complexe vlak te tekenen, zie je in voorbeeld Voor figuren met pijlen in de R 3 zie voorbeeld Met textplot3d kan er ook in ruimtefiguren gewerkt worden!
65 2 Grafieken 53 Voorbeeld 2.37 Punten, pijlen en letters in de figuur > restart; interface(warnlevel=0): with(plots): a,b,c:=<-2, 1>,<5, 2>,<3, 3>; [ ] [ ] [ ] a, b, c :=,, > plaat1:=arrow({a,b,c},shape=arrow,thickness=2,color=green): plaat2:=textplot({[-2,1,a]},align={above,left },font=[times,bolditalic,14]): plaat3:=textplot({[5,2,b],[3,3,c]},align={above,right}, font=[times,bolditalic,14]): plaat4:=arrow(a,b,shape=double_arrow,color=blue): display({plaat1,plaat2,plaat3,plaat4},scaling=constrained,title="pijlen met tekst"); Zie figuur Pijlen met tekst A C B Figuur 2.25 Toelichting: Er is hier gebruikgemaakt van de meervoudige toekenning. In één keer zijn er drie vectoren tegelijk ingevoerd. Voor het invoeren van vectoren zijn verschillende mogelijkheden, zie daarvoor paragraaf 4.9. Je kunt trouwens ook lijsten invoeren in plaats van vectoren om hetzelfde effect te krijgen bij het commando arrow (dus a:=[-2,1] in plaats van a:=<-2,1> ). Voor informatie over lijsten zie paragraaf 4.7. In figuur 2.25 is ervoor gezorgd dat met scaling=constrained de eenheden op de assen gelijk zijn (1:1). De plaatjes van de pijlen die in O beginnen en die de vectoren vertegenwoordigen, zijn in één keer in plaat 1 ondergebracht met behulp van een verzameling. De dubbele pijl is de enige die niet in de oorsprong begint en is dus apart aangemaakt in plaat 4. Om deze te maken heb je dan een iets andere invoer nodig. In feite is het de pijl die in het eindpunt van vector a begint en de richting heeft van vector b, dusarrow(a,b). Toevallig eindigt deze pijl in punt C. Er zijn extra opties meegegeven om de pijl verschillende gedaanten te geven met bijvoorbeeld shape=arrow. In de R 2 is trouwens de dubbele pijl standaard. Er zijn verder allerlei manieren om tekst in de figuur te maken. Bij één van de plotopdrachten kan bijvoorbeeld een titel meegegeven worden. Bij textplot moeten de twee coördinaten opgegeven worden van de plaats waar de tekst moet komen te staan met als derde coördinaat
66 54 Handleiding Maple 10 de tekst tussen dubbele quotes (string). Zie meer informatie over strings in Er kan natuurlijk meer tekst opgegeven worden dan alleen één letter. Bovendien kan zelfs het font van de text beïnvloed worden met een extra optie font=... Om ervoor te zorgen dat de letters niet precies óp de gedefinieerde punten komen te staan, zijn de coördinaten van de punten bij textplot iets rechtsboven het punt gesitueerd door middel van align={above,right}. Zie voor een ander voorbeeld met textplot ook voorbeeld om automatisch de coördinaten te genereren waar de tekst moet komen te staan. Voorbeeld 2.38 Grafiek met punten > restart; Digits:=4; interface(warnlevel=0):with(plots): Digits := 4 > punten:=[seq([i/5,evalf(sin(2*pi*i/5))],i=0..5)]; punten := [[0, 0.], [ 1 5, ], [2 5, ], [3 5, ], [4, ], [1, 0.]] 5 > p1:=plot(sin(2*pi*t),t=0..1,thickness=2): p2:=plot(punten,style=point,symbol=circle,color=black,symbolsize=12): p3:=plot(punten,color=black,linestyle=2): display({p1,p2,p3},title="grafiek met punten"); Zie figuur Grafiek met punten t Figuur 2.26 Toelichting: Voor de overzichtelijkheid stellen we het aantal significante cijfers op 4 met Digits. Dit kan ook bereikt worden op een andere manier met displayprecision (zie blz. 7 aan het eind van paragraaf 1.3.4). Met behulp van het maken van een rij en daarvan weer een lijst, kun je een lijst met punten genereren en die plotten. Als je daarbij niet opgeeft dat de stijl in punten moet zijn, worden de punten automatisch verbonden in de volgorde van de lijst. In figuur 2.26 zien we dus drie grafieken die met behulp van display in één figuur worden samengebracht: de grafiek met vijf punten (p2), de grafiek met de verbonden punten (p3) en de grafiek van de sinus (p1) die in feite bestaat uit 50 punten. Als er punten getekend worden, kan de stijl daarvan ook nog aangepast worden bijvoorbeeld met symbol=circle en de grootte met sybolsize. In figuur 11.3 staat een voorbeeld van punten in een grafiek in de vorm van een cirkel of een kruisje.
67 3 Basisvaardigheden 3.1 Inleiding In dit hoofdstuk worden voorbeelden gegeven van een aantal eenvoudige basisberekeningen. Daarvoor is het nodig dat de basis van de algebra met pen en papier aanwezig is. Rekenregels voor breuken, machten, vergelijkingen en differentiëren worden bekend verondersteld. In de praktijk is gebleken dat een goed gebruik van een computeralgebrasysteem bevorderd wordt als men inzicht en vaardigheid bezit op het gebied van de algebra met pen en papier. De onderwerpen differentiëren en integreren worden hier alleen op laag niveau behandeld. In hoofdstuk 5 wordt er dieper op het differentiëren ingegaan, in hoofdstuk 7 komt de formulemanipulatie nog wat geavanceerder terug en in hoofdstuk 9 wordt het integreren verder uitgediept met voorbeelden. De vectoren en matrices worden geïntroduceerd als wiskundige objecten in hoofdstuk 4 en het rekenen daarmee gebeurt binnen de lineraire algebra die in hoofdstuk 8 samengebracht is. Voor dit hoofdstuk is nodig dat van het eerste hoofdstuk in ieder geval kennis genomen is van het verschil in het invoeren van een functie en van een uitdrukking en hoe het gaat met decimale getallen en standaardfuncties. De paragrafen en worden aanbevolen om nog eens te bekijken. Ook is het belangrijk te weten dat Maple rekent in de complexe getallen. Enige bekendheid met de imaginaire eenheid, die bij het programma bekend is onder de naam I, is aan te bevelen. Verder zullen de menu s die aangeboden worden, als de uitvoer aangeklikt wordt met de rechtermuisknop, pas echt betekenis krijgen na het doorwerken van dit hoofdstuk. 3.2 Formulemanipulatie Bij het invoeren van een uitdrukking is het handig om deze een naam te geven. Maak onderscheid tussen een toekenning met := en een vergelijking met het =-teken. Een toekenning ongedaan maken wordt uitgelegd in paragraaf Geef namen aan de entiteiten die ingevoerd worden en maak onderscheid tussen hoofdletters en kleine letters. Let op de sterren in de invoer als er een vermenigvuldiging bedoeld wordt. Dit teken is beslist noodzakelijk; 3x wordt niet opgevat als een vermenigvuldiging als er geen ster tussen getikt wordt in de invoer Substitutie Met behulp van het commando subs (substitutie) kun je getalwaarden voor variabelen of parameters invullen (substitueren = invullen). De structuur van het commando is subs({waarden},formule). Dus eigenlijk substitueer de waarden in de formule. Er zijn echter meer mogelijkheden. In de volgende voorbeelden komen de verschillende mogelijkheden aan de orde.
68 56 Handleiding Maple 10 Voorbeeld 3.1 Een waarde invullen in een vergelijking We willen bijvoorbeeld in de vergelijking x 2 8x+7 = 0 voor x de waarde 7 invullen. Dat gaat als volgt: > restart; verg:=x^2-8*x+7=0; > subs(x=7,verg); verg := x 2 8x+7 = 0 0 = 0 Op deze manier krijgen we een identieke vergelijking. Dat wil zeggen dat de waarde x = 7 voldoet aan de gegeven vergelijking. Voorbeeld 3.2 Meervoudige substitutie Neem nu de uitdrukking f = ax 2 1 waarin twee variabelen zijn aan te wijzen, namelijk x en a. Het is mogelijk om een aantal substituties tegelijk te doen; eigenlijk een verzameling waarden te substitueren. Deze verzameling moet dan ook aangegeven worden met behulp van accolades. Echter de waarden opgeven in een lijst is evengoed mogelijk. Laten we bijvoorbeeld x = 2 en a = 3 invullen in de uitdrukking f. > f:=a*x^2-1; > subs({x=2,a=3},f); f := ax TIP: ga hiermee nu zelf experimenteren en vul bijvoorbeeld decimale getallen in voor een variabele in een uitdrukking. Automatisch geeft Maple de uitkomst van de berekening in decimale getallen! Voorbeeld 3.3 Functiewaarden opvragen Als de functie opgegeven was als echte functie van bijvoorbeeld x en a met de pijltjesnotatie, dan is het sneller om over de functiewaarden te beschikken voor zekere waarden van x en a. > restart; f:=(x,a)->a*x^2-1; > f(2,3); f := (x, a) ax De betekenis is dat voor x = 2 en a = 3 de functiewaarde berekend wordt. Soms is het erg handig om op deze manier te werken, zie voorbeeld Voorbeeld 3.4 Evaluatie van een formule Ook een mogelijkheid is het subsitutiecommandoeval met een voorbeeld. De structuur van dit commando is eval(formule,{waarden}). Dus eigenlijk evalueer de formule voor de volgende waarden. Met een verzameling kunnen ook meer waarden ingevuld worden (met een lijst is het trouwens ook mogelijk). Het aardige hiervan is dat met behulp van het inerte commando met hoofdletter een mooie uitvoer op het scherm ontstaat. Het inerte commando geeft dus geen berekening. Hetzelfde commando met kleine letter geeft wel het resultaat van de berekening. > restart; f:=a*x^2-1: eval(f,{x=2,a=3}); > Eval(f,x=2):%=value(%); 11
69 3 Basisvaardigheden 57 (ax 2 1) x = 2 = 4a 1 Toelichting: Met het inerte commando Eval (met hoofdletter) komt er dus een mooie schrijfwijze en met het commandovalue krijgt men vervolgens de berekende waarde ervan te zien. Deze mooie uitvoer kan alleen bij enkelvoudige substituties. Zie ook op de website bij dit boek in het bestand Aanvullingen op de handleiding Haakjes wegwerken (expand) Voor het wegwerken van haakjes in allerlei vormen is het commando expand geschikt. Het werkt op breuken, polynomen, vergelijkingen en nog vele andere vormen. Voorbeeld 3.5 De werking van het commandoexpand > restart; f:=(x-1)*(x^2-x+1)*(x^2+x+1); > expand(f); > (p+q)/r=expand((p+q)/r); > sin(x+y)=expand(sin(x+y)); f := (x 1)(x 2 x+1)(x 2 + x+1) x 5 x 4 + x 3 x 2 + x 1 p+q r = p r + q r sin(x+y) = sin(x)cos(y)+cos(x)sin(y) Toelichting: Voer eerst een uitdrukking in met de naam f met haakjes en vergeet niet de ster te tikken als er een vermenigvuldiging bedoeld wordt. Met expand worden keurig de haakjes weggewerkt ook al is het een ingewikkelde opdracht. Let ook eens op het uit elkaar trekken van een breuk met behulp van ditzelfde commando. Het komt neer op ongeveer het volgende: = Elke term van de teller wordt afzonderlijk gedeeld door de gehele noemer. Er is hier trouwens geen sprake van een toekenning, maar puur het intikken van een gelijkheid. In het laatste voorbeeld met de sinus (ook ingetikt als een gelijkheid), herken je misschien een van de goniometrische formules Ontbinden in factoren (factoriseren) We beginnen met de omgekeerde bewerking van het haakjes wegwerken. In bepaalde gevallen kan het omgekeerde van expand (haakjes wegwerken) beschouwd worden als het effect van het commando factor (ontbinden in factoren of factoriseren). Het zal trouwens niet altijd lukken een veelterm (polynoom) te factoriseren waarvan de coëfficiënten uit gehele getallen bestaan. Alleen als het mooi uitkomt, kan er gefactoriseerd worden. Er is echter wel een mogelijkheid om te factoriseren als ook decimale getallen worden toegestaan. In het volgende voorbeeld zien we het effect van het invoeren van een uitdrukking waarin ook decimale getallen voorkomen. Voorbeeld 3.6 De werking van het commandofactor > restart; interface(displayprecision=3): f:=x^5-x^4+x^3-x^2+x-1; > factor(f); f := x 5 x 4 + x 3 x 2 + x 1 (x 1)(x 2 + x+1)(x 2 x+1)
70 58 Handleiding Maple 10 > factor(f+3*x); > factor(f+3.0*x); > expand(%); x 5 x 4 + x 3 x 2 + 4x 1 (x 0.264)(x x+1.775)(x x+2.137) x x x x x Toelichting: De polynoom f wordt in factoren ontbonden, zoals ook te verwachten was als je voorbeeld 3.5 bekijkt. Van tevoren kun je niet weten of het mooi zal uitkomen bij het factoriseren van een polynoom. Als er bij de polynoom f bijvoorbeeld 3 x opgeteld wordt en er wordt vervolgens de opdracht gegeven deze te factoriseren, zal de polynoom weer onverrichter zake teruggegeven worden. Echter bij optellen van 3.0 x krijg je een nieuwe situatie: namelijk een polynoom waar in ieder geval ergens een decimaal getal in voorkomt. Het programma gaat nu onmiddellijk over op numerieke rekenwijze en de factorisering is nu wél mogelijk, maar het is wel een benadering. De displayprecision is voor dit doel omlaag gezet (zie blz. 7 aan het eind van paragraaf 1.3.4). LET OP: als dedisplayprecision niet omlaag was gezet, dan werd er op meer decimalen afgerond en het kan zijn dat, na het wegwerken van de haakjes, je niet meer terugkrijgt wat je verwacht. Met het commando fnormal(%,6) met een extra optie voor het aantal significante cijfers of met evalf[6](%) kan de afronding wat beïnvloed worden en krijg je toch weer terug wat je verwacht, maar dan wel in de gedaante van de numerieke notatie met decimale punt en het opgegeven aantal significante cijfers. Na het uit elkaar trekken van breuken en het uit elkaar trekken van sin(x+y) door middel van expand, krijgt men met factor niet dezelfde vorm weer terug. Verder is in hoofdstuk 7 (zie voorbeeld 7.2) nog een uitbreiding van factor mogelijk als ook complexe getallen worden toegestaan in de ontbinding. Het commando factor werkt ook op vergelijkingen en breuken! Zie paragraaf Ontbinden van getallen (ifactor) Getallen (gehele getallen) kun je ontbinden in priemfactoren. Bij breuken (geen decimale getallen) kun je teller en noemer ontbinden in priemgetallen. De breuk wordt eerst wel automatisch vereenvoudigd voordat het resultaat in priemfactoren gepresenteerd wordt. Zo is bijvoorbeeld het getal 15 te ontbinden in 3 5 en de breuk 8 9 = Voor dit soort ontbindingen is er het commandoifactor. 2 Voorbeeld 3.7 Ontbinden in priemfactoren > restart; ifactor(68); > expand(%); > ifactor(85/16); > expand(%); (2) 2 (17) 68 (5) (17) (2)
71 3 Basisvaardigheden 59 Toelichting: De ontbinding in factoren van getallen kan niet met factor gedaan worden. De omgekeerde bewerking kan wel weer met expand bewerkstelligd worden Wortelvormen Ga na of de volgende bewerkingen je bekend voorkomen en anders moet er nog iets gedaan worden aan het begrip van de wortels en de rekenregels met machten. Verder wordt x ingevoerd als sqrt(x). Zie paragraaf Voorbeeld 3.8 Wortelvormen vereenvoudigen > f:=(x-1)*sqrt(x); > expand(%); > factor(%); f := (x 1) x x (3/2) x x( x 1)( x+1) Toelichting: Als er in de vorm reeds een wortelteken staat, is de kans groot dat factor ook de ontbinding doet met wortels. Normaal gesproken wordt de vorm x 1 niet verder ontbonden. In paragraaf wordt er verder ingegaan op het manipuleren en vereenvoudigen van wortelvormen Breuken Breuken invoeren in een computeralgebrasysteem is lastig! Controleer de uitvoer of je de bedoelde breuk hebt ingetikt en verbeter zo nodig. Voorbeeld 3.9 Het invoeren van een ingewikkelde breuk > restart; 2*(x^2+2)/((x-1)*(x^2+x+1)*(x^2-x+1)); 2(x 2 + 2) (x 1)(x 2 + x+1)(x 2 x+1) Wellicht is het beter om teller en noemer apart in te voeren. > teller:=2*(x^2+2); > noemer:=(x-1)*(x^2+x+1)*(x^2-x+1); > breuk:=teller/noemer; teller := 2x noemer := (x 1)(x 2 + x+1)(x 2 x+1) breuk := 2x (x 1)(x 2 + x+1)(x 2 x+1) Toelichting: Voor ingewikkelde breuken kun je misschien het beste eerst teller en noemer apart intikken en controleren om vervolgens de breuk te definiëren. TIP: je kunt nu als je wilt over de teller en de noemer onafhankelijk van elkaar beschikken met behulp van de commando snumer endenom (Engelse afkortingen voor respectievelijk teller en noemer).
72 60 Handleiding Maple 10 Voorbeeld 3.10 Teller en noemer van een breuk > restart; breuk[1]:=(2*x^2+4)/(x^5-x^4+x^3-x^2+x-1); > teller:=numer(breuk[1]); > noemer:=denom(breuk[1]); breuk 1 := 2x x 5 x 4 + x 3 x 2 + x 1 teller := 2x noemer := x 5 x 4 + x 3 x 2 + x 1 Toelichting: Eventueel kun je met de teller of de noemer verder werken. Merk ook op dat met vierkante haakjes een index (paragraaf 6.2) gemaakt kan worden bij de naam van de breuk (breuk 1 ) Breuken optellen en vereenvoudigen Het herschrijven van een breuk kan op verschillende manieren. Van meer breuken één maken met gemeenschappelijke noemer kan in het algemeen met simplify of normal. Deze commando s werken niet helemaal hetzelfde, maar zorgen er in ieder geval voor dat het resultaat één breuk wordt. Voorbeeld 3.11 Verschillende schrijfwijzen van een breuk Let in het volgende voorbeeld ook eens op het effect van expand en factor op een breuk. (Zie ook voorbeeld 3.5 en 3.6.) We werken met dezelfde breuk 1 als in voorbeeld > restart; breuk[1]:=(2*x^2+4)/(x^5-x^4+x^3-x^2+x-1): breuk[2]:=factor(breuk[1]); breuk 2 := > breuk[3]:=expand(breuk[2]); breuk 3 := > normal(breuk[3]); > normal(breuk[3],expanded); > simplify(breuk[3]); 2(x 2 + 2) (x 1)(x 2 + x+1)(x 2 x+1) 2x 2 (x 1)(x 2 + x+1)(x 2 x+1) + 4 (x 1)(x 2 + x+1)(x 2 x+1) > simplify(breuk[3],expanded); 2(x 2 + 2) (x 1)(x 2 + x+1)(x 2 x+1) 2x x 5 x 4 + x 3 x 2 + x 1 2(x 2 + 2) (x 1)(x 2 + x+1)(x 2 x+1) 2x 2 (x 1)(x 2 + x+1)(x 2 x+1) + 4 (x 1)(x 2 + x+1)(x 2 x+1) Toelichting: Let in dit voorbeeld eens op het effect van de optie expanded bij normal en bijsimplify.
73 3 Basisvaardigheden Breuksplitsen Het is bekend dat je verschillende breuken samen kunt nemen door ze gelijknamig te maken en daarna op te tellen. Dat kan Maple vrij vlot zoals we gezien hebben in paragraaf met behulp van simplify of normal. Het omgekeerde is ook mogelijk: van een grote breuk allemaal kleine breuken maken. In beperkte mate kan dit met expand, maar dat is dan nog niet in de gewenste vorm wellicht. Het splitsen van een breuk in zo klein mogelijke breuken gaat met behulp van het commando convert(f,parfrac,x). Het betekent breuksplitsen (partial fraction) waarbij de variabele aangewezen moet worden. Dit laatste gaan we uitproberen op twee manieren. De eerste manier is zonder floating point en de tweede met floating point, dus numeriek. Let hierbij dus op het verschil in de commando s expand enconvert(..,parfrac,..). Voorbeeld 3.12 Breuksplitsen met gehele getallen De eerste manier zonder floating point levert probleemloos de breuksplitsing waarbij de omgekeerde bewerking weer de oude breuk oplevert. > restart; H:=(1+s)/(s*(s+3)*(s+2)); 1+s H := s(s+3)(s+2) > expand(h); 1 s(s+3)(s+2) + 1 (s+3)(s+2) > convert(h,parfrac,s); 1 2(s+2) 2 3(s+3) + 1 6s > simplify(%); 1+s s(s+3)(s+2) Toelichting: Merk op dat de factoren van de noemer van de oorspronkelijke breuk terug te vinden zijn in de noemers van de gesplitste vorm. Bekijk de volgorde van de opties van het commando convert (= omzetten). Het programma moet namelijk eerst weten wát er omgezet moet worden, in dit geval de vooraf gegeven formule H. Tevens moet het programma weten hóe er omgezet moet worden (parfrac is een afkorting van partial fraction; stukjes breuk). Ten slotte moet er opgegeven worden welke de variabele is. In dit geval was het wel duidelijk dat s de variabele was, maar je had nog meer letters in de breuk kunnen hebben en dan was de opdracht niet meer duidelijk zonder deze optie van de variabele. In paragraaf is nog een voorbeeld van een uitbreiding van het breuksplitsen als ook complexe getallen worden toegelaten. In de helpfunctie kun je zien welke omzettingen nog meer mogelijk zijn. Typ daarvoor?convert of kijk in de index van dit boek. Voorbeeld 3.13 Breuksplitsen met decimale getallen > restart; interface(displayprecision=3): H:=(3+s)/(s^3+5.0*s^2+4*s); 3+s H := s s 2 + 4s > factor(h)=convert(h,parfrac,s); s s(s+1.000)(s+4.000) = s s s
74 62 Handleiding Maple 10 Vervolgens weer terug samenvoegen tot één breuk. In dit voorbeeld werken we numeriek door ten minste één getal met decimale punt in te voeren. Zet dan ook de displayprecision wat lager ten behoeve van de overzichtelijkheid. In paragraaf is nog een voorbeeld van een uitbreiding van het breuksplitsen als ook complexe getallen worden toegelaten. > normal(rhs(%)); > fnormal(%); s s s(s+1.000)(s+4.000) s s(s+1.000)(s+4.000) Toelichting: De breuk H kan op verschillende manieren geschreven worden. De noemer kan ontbonden worden in drie factoren en de verwachting is dat de breuk dan ook gesplitst kan worden in drie kleinere breuken. De breuksplitsing levert inderdaad drie kleine breuken op maar er worden numerieke benaderingen gedaan. Bij de omgekeerde bewerking kán er een zogenoemd fuzzy zero ontstaan, een heel klein getal dat het gevolg is van afrondingen onderweg. Deze fuzzy zero kan weer weggehaald worden met het commando fnormal waarbij eventueel het aantal significante cijfers opgegeven kan worden. Eventueel kan de decimale punt weer weggehaald worden met convert(%,fraction) nadat de fuzzy zero s weggehaald zijn. Voor meer omzetcommando s wordt verwezen naar de index van dit boek Kwadraat afsplitsen Voor het manipuleren met kwadratische vormen, zoals het omzetten van x 2 6x 5 in de vorm (x 3) 2 14, is een speciaal commando. Het commandocompletesquare is echter niet direct te gebruiken. Niet alle commando s zijn namelijk direct beschikbaar, omdat dit te veel geheugenruimte kost. Voor een aantal commando s moet er een speciaal pakket geactiveerd worden. Voor het commando CompleteSquare (volledig kwadraat) is dat het subpakket Precalculus van het Student-pakket. Zo n subpakket wordt geactiveerd met behulp van with(student[precalculus]). Echter als je dat pakket niet eerst op wilt starten, kun je ook direct over het commando beschikken met het intikken van: > Student:-Precalculus:-CompleteSquare( x^2-6*x-5 ); TIP: met het aanklikken van de uitvoer met de rechtermuisknop (na het intikken van de kwadratische vorm) krijg je een menu te zien waar vanaf versie 10 ook CompleteSquare bij staat. (In oudere versies van Maple moet het commando completesquare uit het Student-pakket gehaald worden (with(student)), alles met kleine letters.) Voorbeeld 3.14 Andere schrijfwijze van een kwadratische vorm We bekijken nu een kwadratische vorm. Je kunt eventueel proberen de vorm in factoren te ontbinden. Dat is trouwens niet altijd mogelijk, tenzij je floating point-notatie toepast. Zoals bekend is de grafiek van f(x) = x 2 6x 5 een parabool. > restart; f:=x^2-6.0*x-5; > factor(f); f := x 2 6.0x 5 (x )(x ) > Student:-Precalculus:-CompleteSquare(f); (x )
75 3 Basisvaardigheden 63 > convert(%,fraction); (x 3) 2 14 > plot(f,x=-3..8,title="top van de parabool is [3,-14] nulpunten zijn x = en x = 6.742"); Toelichting: Aan de kwadraatafgesplitste vorm is snel te zien waar de top van de parabool ligt en aan de gefactoriseerde vorm is snel te zien waar de snijpunten met de X-as liggen. Eigenlijk weet je dan al bijna alles van deze dalparabool en kun je de grafiek schetsen. (De grafiek van de parabool is hier overigens niet afgedrukt.) Zie voor meer informatie hoe grafieken gemaakt moeten worden hoofdstuk 2. Je kunt je voorstellen dat er behalve de variabele x nog andere variabelen in een formule voorkomen. Het maakt verder niet uit wat voor formule het is: CompleteSquare werkt bijna op alle formules. Echter met de rechtermuisknop wordt in het menu dit commando alleen bereikt bij polynomen en bijvoorbeeld niet bij vergelijkingen. Voorbeeld 3.15 De impliciete functie gegeven door een vergelijking Het gaat om de volgende vergelijking: verg := 4x 2 + 9y 2 4x+24y = 127. > restart; verg:=4*x^2+9*y^2-4*x+24*y=127; verg := 4x 2 + 9y 2 4x+24y = 127 > Student:-Precalculus:-CompleteSquare(verg); > %+17; 9(y+ 4 3 )2 + 4(x 1 2 )2 17 = 127 9(y+ 4 3 )2 + 4(x 1 2 )2 = 144 Voor alleen het kwadraat afsplitsen met de variabele x: > Student:-Precalculus:-CompleteSquare(verg,x); 4(x 1 2 )2 + 9y y 1 = 127 Toelichting: De vergelijking willen we herschrijven in kwadraatafgesplitste vorm. Als er verder geen opties bij het commando CompleteSquare gegeven worden, zullen alle variabelen die kwadratisch in de formule staan worden aangepakt. Geef je echter een optie erbij van een of meer variabelen, dan worden alleen de genoemde variabelen aangepakt en de rest blijft ongemoeid. We willen misschien nog links en rechts van het gelijkteken het getal 17 erbij optellen om dan de vergelijking te herkennen als een ellips met middelpunt [ 1 2, 3 4 ]. Dat kan door gewoon 17 bij de vergelijking op te tellen. (In oudere versies moet (17=17) bij de vergelijking worden opgeteld.) TIP: het manipuleren met vergelijkingen kan ook met een Maplet gedaan worden dat geactiveerd wordt door met de rechtermuisknop op de uitvoer te klikken en te kiezen voor Manipulate Equation. Afgezien van het kwadraatafsplitsen, kunnen verder allerlei manipulaties gedaan worden. Zie verder paragraaf 2.8 hoe van dit soort impliciete functies een grafiek kan worden gemaakt.
76 64 Handleiding Maple Vergelijkingen Vergelijkingen zijn formules met een isgelijkteken erin. Verwar het niet met een toekenning waar het teken := gebruikt wordt. Tik eens een vergelijking in en klik in de uitvoer met de rechtermuisknop. Je krijgt dan een menu dat specifiek slaat op het object vergelijking. Vanaf versie 10 is in dat pop-upmenu Manipulate Equation erbij gekomen, een Maplet waarin dingen gedaan kunnen worden met vergelijkingen en die vertaald worden naar commando-regels. Het kwadraatafsplitsen (CompleteSquare, zie voorbeeld 3.15) staat niet in dit pop-upmenu, maar voor de rest zullen de andere menuopties terugkomen in de voorbeelden hieronder, zodat de betekenis en achtergrond daarvan duidelijk worden. Het gaat in het volgende over het oplossen van een vergelijking. Als je dan per ongeluk over het oplossen van een functie f spreekt, wordt automatisch opgevat dat je dan de vergelijking f = 0 bedoelt. Dus solve(f,x) wordt opgevat als solve(f=0,x). Houd er rekening mee dat Maple in de complexe getallen rekent en dat er ook eventueel complexe getallen als oplossing kunnen komen, te herkennen aan de I (zie voorbeeld 3.17) Exact oplossen (solve) Het oplossen van een vergelijking gaat in het algemeen met solve waarbij de vergelijking opgegeven moet worden en de variabele waarnaar opgelost moet worden (de onbekende). Let in de voorbeelden op het verschil in uitvoer als de onbekende wel of niet met accolades wordt ingevoerd bij solve! Het zal duidelijk zijn dat niet alle vergelijkingen even gemakkelijk zijn op te lossen. Soms moeten we onze toevlucht nemen tot numerieke methoden, waarbij de hulp van grafieken een steun kan zijn. Voorbeeld 3.16 Het oplossen komt mooi uit Laten we uitgaan van de vergelijking x 3 + x 2 17x+15 = 0. Dit is een vergelijking in x van de derde graad en we verwachten dan ook drie oplossingen. > restart; verg:=x^3+x^2-17*x+15=0; > solve(verg,{x}); > solve(verg,x); > factor(verg); verg := x 3 + x 2 17x+15 = 0 {x = 1}, {x = 3}, {x = 5} 1, 3, 5 (x+5)(x 1)(x 3)= 0 Toelichting: In de uitvoer komt er een rij met verzamelingen met de oplossing als de onbekende met accolades wordt opgegeven. Geef je echter in de opdracht bij solve géén accolades mee, dan krijg je een rij getallen die verder voor ons voldoende informatie bevat om de oplossingsverzameling te kunnen opschrijven. (Er kan eventueel ook nog met vierkante haken gewerkt worden. In de uitvoer komt dan een lijst met oplossingen te staan.) De oplossingsverzameling S van de vergelijking is dus S = {1, 3, 5}. Het oplossen van deze vergelijking komt trouwens erg mooi uit! In de laatste opdrachtregel wordt de vergelijking gefactoriseerd, zodat je nu ook uit het hoofd de oplossingsverzameling kunt achterhalen. Het commando factor werkt dus ook op vergelijkingen.
77 3 Basisvaardigheden 65 Voorbeeld 3.17 Het oplossen komt slecht uit Probeer eens de vergelijking x 4 + 2x 3 9x x 4 = 0. Deze is van de vierde graad en theoretisch verwachten we dan vier oplossingen. > restart; interface(displayprecision=3): verg:=x^4+2*x^3-9*x^2+11*x-4=0; > oplossing:= solve(verg,{x}) ; verg := x 4 + 2x 3 9x x 4 = 0 oplossing := {x = RootOf(%1, index = 1)}, {x = RootOf(%1, index = 2)}, {x = RootOf(%1, index = 3)}, {x = RootOf(%1, index = 4)} %1 := Z Z 3 9 Z Z 4 > allvalues({oplossing}); evalf(oplossing); {x = 0.625}, {x = I}, {x = 4.551}, {x = I} Uitgaande van de vergelijking met decimale getallen: > solve(evalf(verg),{x}); {x = 0.625}, {x = I}, {x = 4.551}, {x = I} Als je alleen geïnteresseerd bent in de reële oplossing: > use RealDomain in solve(evalf(verg),{x}) end; {x = 0.625}, {x = 4.551} Toelichting: Met solve probeert het programma exact te rekenen. Van het antwoord met de code RootOf word je in dit stadium nog niets wijzer. Het is een teken dat er analytisch gerekend wordt en dat is met solve altijd het geval. Als je wilt zien wat de betekenis is van deze code, kan de oplossing van de vergelijking zichtbaar gemaakt worden door middel van het commando allvalues({oplossing}). Wat er dan op het scherm komt, is hier niet afgedrukt, maar aan zo n ingewikkeld analytisch antwoord heb je niet veel. Het wordt dan tijd dat de (exact berekende) oplossing benaderd wordt. Zoals je weet gaat het programma over op floating point-berekeningen als in de invoer ook floating point gebruikt is. Dit effect bereiken we als we evalf gebruiken om de vergelijking naar floating point-notatie te schrijven. Voor dit doel is bij het begin van de sessie displayprecision omlaag gezet (zie blz. 7). Met solve komt er nu keurig een oplossingsverzameling van vier stuks te staan die weliswaar numeriek benaderd zijn, maar op een exacte rekenwijze verkregen zijn. We zien hier dat een paar van de getallen een I bevat. De I staat bij Maple voor de imaginaire eenheid (zie paragraaf 1.3.5). Er zijn twee reële oplossingen en twee complexe oplossingen. Voor complexe rekenwijze wordt verder naar hoofdstuk 10 verwezen. Wil je toch alleen beschikken over de reële oplossingen, dan is een mogelijkheid te werken in de reële getallen (RealDomain), zie paragraaf Numeriek oplossen (fsolve) We gaan nu kijken hoe de numerieke rekenwijze (metfsolve waarbij defstaat voor floating point) in zijn werk gaat met twee voorbeelden. Voorbeeld 3.17 leende zich in feite meer voor een numerieke oplossingsmethode. Als we daar met de rechtermuisknop gewerkt hadden, had het ook in de lijn gelegen om op Solve Numerically te klikken. Voor hogeregraads vergelijkingen geeft fsolve alleen de benaderde reële oplossingen en als de vergelijking wat ingewikkelder wordt, dan geeft fsolve hooguit één reële numerieke waarde. Het heeft te maken met de manier waarop er inwendig bij dit commando gerekend wordt. Het zal duidelijk worden in de voorbeelden.
78 66 Handleiding Maple 10 Voorbeeld 3.18 Vergelijking van de vierde graad numeriek oplossen > restart; interface(displayprecision=3): verg:=x^4+2.0*x^3-9*x^2+11*x-4=0; verg := x x 3 9x x 4 = 0 > fsolve(verg,{x}); {x = 4.551}, {x = 0.625} > plot(lhs(verg),x=-5..3); Zie figuur 3.1. vierdegraads functie met twee nulpunten a x b Figuur 3.1 > a:=fsolve(verg,x=-5..-4); > b:=fsolve(verg,x=0..1); a := b := Toelichting: De vergelijking is ingevoerd en omdat er numeriek gerekend wordt met fsolve, is voor dit doel bij het begin van de sessie displayprecision omlaag gezet (zie blz. 7). Met fsolve wordt vervolgens alléén de reële benaderde oplossing gevonden. Waar je hier eigenlijk naar zoekt, zijn de nulpunten van het linkerlid van de vergelijking. (De betekenis vanlhs is left hand side.) Dat wil zeggen dat je zoekt naar de waarden x waarvoor de grafiek van het linkerlid de X-as snijdt. Laten we de grafiek hiervan bekijken (zie figuur 3.1) en kijken waar deze de X-as snijdt. Duidelijk is te zien dat er een snijpunt met de X-as is in het interval [ 5, 4] en een in het interval [0,1]. Door met de muis zo goed mogelijk op zo n nulpunt in de grafiek te gaan staan, kun je schatten wat het nulpunt is. Er komt namelijk linksboven in de contextbar te staan wat de coördinaten zijn van het punt waar je met de muis op klikt in de grafiek. In dit geval komen de berekeningen niet mooi uit, wat bij het oplossen van hogere graads vergelijkingen meestal het geval is. Om de snijpunten te vinden en deze meteen een naam te geven, moeten we numeriek te werk gaan. Het commando fsolve heeft, behalve de vergelijking en de onbekende, nog bij voorkeur een interval nodig waarin gezocht moet worden naar de oplossing. Het programma komt dan met een startwaarde in dít interval terecht en zoekt met numerieke methoden vervolgens naar de benadering van de reële waarde die het beste aan de vergelijking voldoet. Er komen dus geen analytische rekenmethoden aan te pas bij deze manier van oplossen.
79 3 Basisvaardigheden 67 Voorbeeld 3.19 Een vergelijking die niet analytisch opgelost kan worden > restart; verg:=ln(x)=3*sin(x); verg := ln(x) = 3sin(x) > fsolve(verg,x); > plot([lhs(verg),rhs(verg)],x=0..30); Zie figuur 3.2 (met op de cd-rom het uitgebreide script voor de figuur met tekst erin). snijpunt a van de logaritme en de sinusfunctie in het interval [7,10] x a logaritme sinus Figuur 3.2 > a:=fsolve(verg,x=7..10); a := Toelichting: In dit voorbeeld is er een vergelijking waarvoor géén analytische methoden beschikbaar zijn om deze op te lossen. We zijn nu wel genoodzaakt voor numerieke methoden te kiezen. Alleenfsolve zal dan nog werken. Echter met fsolve krijgen we hier maar één oplossing terwijl er wel meer zijn (zie figuur 3.2). Door de grafiek van het linkerlid (lhs) en het rechterlid (rhs) beide in één figuur weer te geven kunnen we mogelijke oplossingen visualiseren. Als we nu bijvoorbeeld per se de oplossing a willen hebben die tussen 7 en 10 in ligt, kunnen we het interval meegeven aan het commando. Het programma gaat dan vanuit een startpunt in dit interval zoeken naar een numerieke reële waarde die aan de vergelijking voldoet Variabele vrijmaken uit een vergelijking Bij het oplossen van vergelijkingen is het belangrijk om bij solve op te geven wat de onbekende is (tenzij er maar één is). Als je deze onbekende opgeeft in de vorm van een verzameling, dus tussen accolades, krijg je een antwoord naar welke variabele de vergelijking is opgelost. Dat is bovendien handig als je in een vergelijking misschien meer variabelen hebt. Het is dan tenminste duidelijk welke variabele de onbekende is. Houd er rekening mee datfsolve niet werkt als er parameters in de vergelijking zitten! Voorbeeld 3.20 De onbekende in de vergelijking Een vergelijking die we verg noemen: y 2 5ay = 6. Je ziet dat er nu twee variabelen zijn en het wordt bij het oplossen extra belangrijk dat goed opgegeven wordt welke variabele als onbekende gezien moet worden.
80 68 Handleiding Maple 10 > restart; verg:=y^2-5*a*y=-6; verg := y 2 5ay = 6 > solve(verg,{y}); {y = 5a 25a }, {y = 5a 25a } 2 > solve(verg,{a}); {a = y y } Toelichting: In feite maken we eerst y vrij uit de vergelijking die kwadratisch is in y dus we verwachten twee oplossingen. Waarschijnlijk herken je hierin de abc-formule. Vervolgens stellen we a als onbekende. Dit komt dus neer op het vrijmaken van a uit de vergelijking. De vergelijking is een lineaire vergelijking in a. Er komt nu slechts één antwoord voor a in de oplossingsverzameling (de variabele a komt in de vergelijking immers lineair voor). Je ziet dat het handig was om de onbekende in de vorm van een verzameling op te geven (met accolades), zodat de uitvoer duidelijker is. Echter de oplossing wordt dan wel gegeven in de vorm van een vergelijking, maar dat kan soms wel zijn voordeel hebben zoals we in de volgende paragraaf (3.3.4) zullen zien Het toekennen van de oplossing Het is niet zo dat na het gebruik vansolve offsolve de variabelen voortaan deze waarden behouden. Als je dat wél wilt, kan dat met behulp van het commandoassign. Dit commando maakt van een vergelijking een variabele toekenning. Je moet dus wel eerst een vergelijking hebben. Het is daarom handig om het commando solve te gebruiken met de onbekende tussen accolades zoals in voorbeeld 3.20 hierboven. Voorbeeld 3.21 Toekennen van de oplossing met assign > restart; verg:=y^2-5*a*y=-6: solve(verg,{a}); {a = y y } > assign(%); a; y y > unassign( a ); a; a Toelichting: Met de vergelijking van voorbeeld 3.20 en het vrijmaken van a wordt de berekende waarde van a toegekend met assign. Dat kan dus alleen als de oplossing in vergelijkingsvorm gegeven wordt. Werk dus met accolades bij de onbekende in het solvecommando. Vervolgens wordt even de waarde van a gecontroleerd door a op te vragen. Daarna wordt deze toekenning weer ongedaan gemaakt met unassign. Inderdaad is de a nu weer waardeloos geworden als we a opvragen. Het ongedaan maken van een toekenning had ook gekund meta:= a ;. Zie paragraaf Het commandoassign werkt dus alleen als het op een vergelijking slaat! Stelsels vergelijkingen Het is mogelijk om een verzameling (met accolades) van twee vergelijkingen met twee onbekenden op te lossen met behulp van het commando solve. Het beste is het om altijd
81 3 Basisvaardigheden 69 met een verzameling te werken en niet met een lijst (met vierkante haken), hoewel dat in het geval van solve wel zal werken maar bij fsolve weer niet. De werkwijze is dezelfde als bij één vergelijking met één onbekende. Ook is het mogelijk om een verzameling van n vergelijkingen met n onbekenden op te lossen. In paragraaf 7.4 en paragraaf 8.5 wordt op een meer geavanceerde manier structuur gebracht in het oplossen van meer vergelijkingen met meer onbekenden. Als je met de rechtermuisknop een en ander wilt berekenen, moet eerst de verzameling van vergelijkingen voorbereid worden. Dus tik de vergelijkingen in en maak er een verzameling van door er accolades omheen te zetten, waarna je deze verzameling met de rechtermuisknop kunt behandelen. Op deze manier werken met een lijst van vergelijkingen is niet mogelijk. Voorbeeld 3.22 Twee vergelijkingen met twee onbekenden > restart; v[1]:=x+y=7; v[2]:=2*x-3*y=8; > solve({v[1],v[2]},{x,y}); > assign(%); S:={[x,y]}; v 1 := x+y = 7 v 2 := 2x 3y = 8 {y = 6 5, x = 29 5 } S := {[ 29 5, 6 5 ]} Toelichting: Noem de vergelijkingen v 1 en v 2. (Als je met de rechtermuisknop wilt werken, tik je vervolgens in {v[1],v[2]}; en klik dan op de uitvoer hiervan en er opent zich een pop-upmenu.) De verzameling vergelijkingen wordt opgelost met solve met als verzameling onbekenden {x,y}. Wil je nu dat x en y voortaan deze waarden blijven behouden, dan kun je het commando assign gebruiken. Dit commando werkt ook op een verzameling vergelijkingen, zoals hier {y = 5 6,x = 29 5 }, en werkt dus eigenlijk als meervoudige toekenning. De oplossingsverzameling S, de verzameling bestaande uit het getallenpaar (x, y) dat aan deze twee vergelijkingen voldoet, is S = { ( 29 5, 5 6)}. Een getallenpaar wordt bij Maple ook wel gepresenteerd met rechte haken, net als bij een vector. Voorbeeld 3.23 Twee vergelijkingen (niet beide lineair) De oplossing hiervan komt niet zo erg mooi uit en het ligt in de lijn om numeriek te werk te gaan. Begin een nieuwe situatie altijd metrestart om eventuele toekenningen ongedaan te maken. > restart; interface(displayprecision=3):v[1]:=x+y=7.0;v[2]:=2*x*y-3*y=8; > fsolve({v[1],v[2]},{x,y}); > solve({v[1],v[2]},{x,y}); v 1 := x+y = v 2 := 2xy 3y = 8 {y = 0.863, x = 6.137} {y = 0.863, x = 6.137}, {y = 4.637, x = 2.363} Toelichting: Met displayprecision is ervoor gezorgd dat in de uitvoer er niet al te veel decimalen verschijnen. (Zie voor meer informatie op blz. 7.) Als je even wat uitprobeert, zul je zien dat deze oplossing niet mooi uitkomt. Numeriek
82 70 Handleiding Maple 10 rekenen kan op twee manieren en deze twee manieren zijn zeer verschillend wat betreft de rekenwijze van Maple. We proberen nu eerst het commando fsolve en dwingen Maple op deze manier numeriek te gaan rekenen. Er wordt dan een willekeurige startwaarde genomen, waarop we eventueel invloed uit kunnen oefenen als we intervallen voor x en y zouden meegeven, bijvoorbeeld als we het vermoeden hebben dat y in het interval [4,5] ligt. > fsolve({v[1],v[2]},{x,y},{y=4..5}); Omdat we geen enkel idee hebben van de oplossing, geven we geen interval op en laten het programma dus zelf zoeken. Er komt dan een antwoord, dat wil zeggen één getallenpaar (x, y), dat aan de twee vergelijkingen voldoet. We zouden kunnen denken dat dit de volledige oplossingsverzameling is, maar dat is hier niet zo! Het is één van de oplossingen en wel een willekeurige. Vervolgens passen we een andere strategie toe: we gebruiken wél het commandosolve waarmee Maple analytisch rekent (volgens de bekende rekenregels voor het oplossen van vergelijkingen), maar we zorgen dat de vergelijkingen met hier en daar een decimale punt (floating point) zijn ingevoerd. De oplossing wordt dan ook in decimale getallen gegeven, maar inwendig worden de vergelijkingen wel exact opgelost en dat is precies onze bedoeling. De oplossing bestaat nu uit een rij met twee onderdelen. TIP: het commando fsolve werkt niet als er in de vergelijking behalve de variabele nog een of meer parameters voorkomen. 3.4 Ongelijkheden Het commando solve kan ook ongelijkheden aan. Echter het commando fsolve werkt beslíst níet op ongelijkheden! Bij het oplossen van ongelijkheden wordt aangeraden met grafieken te werken. Meestal is het toch verstandig om bij het oplossen van zowel vergelijkingen als ongelijkheden een onderzoekje te doen, eventueel met behulp van het schetsen van grafieken. Voor stelsels lineaire ongelijkheden wordt verwezen naar paragraaf waar het gaat over optimaliseren onder bepaalde voorwaarden in de vorm van ongelijkheden. Voorbeeld 3.24 Eenvoudige ongelijkheid Let ook eens op het verschil tussen wel of geen accolades bij de onbekende bij het commando solve. > restart; ong[1]:=x^2+2.0*x<3; ong 1 := x x < 3 Het kleinerdanteken kan gewoon met de toetsen getypt worden. Vervolgens los je deze ongelijkheid op: > solve(ong[1],x); RealRange(Open( 3.), Open(1.)) De oplossingsverzameling, een open interval op de reële as (RealRange), is uit het antwoord van Maple af te leiden: de oplossing is het interval 3,1. Als je met accolades had gewerkt, wordt de oplossing in een andere notatie weergegeven: > solve(ong[1],{x}); { 3. < x, x < 1.} Ga na dat de eindpunten van het interval van de oplossing dus niet meedoen! Naar keuze is een van beide methoden te hanteren. Je kunt het antwoord eventueel met pen
83 3 Basisvaardigheden 71 en papier controleren. Voorbeeld 3.25 Ongelijkheid met een breuk Let bij de volgende ongelijkheid weer op de twee verschillende manieren van het gebruik van solve (met en zonder accolades bij de onbekende). Hier zie je tevens hoe het kleinergelijkteken ingevoerd moet worden. > restart; ong[2]:=(4-x^2)/(x^2-9)<=0; > solve(ong[2],x); ong 2 := 4 x2 x RealRange(, Open( 3)), RealRange( 2, 2), RealRange(Open(3), ) > solve(ong[2],{x}); {x < 3}, { 2 x, x 2}, {3 < x} De oplossingsverzameling in de officiële notatie als interval is, 3 [ 2, 2] 3,. Hier valt op dat inderdaad de getallen 3 en 3 niet meedoen vanwege de noemer die in de ongelijkheid staat. Voorbeeld 3.26 Ongelijkheid met grafiek Als de ongelijkheid wat ingewikkelder wordt, kun je het linkerlid en het rechterlid van de ongelijkheid eventueel een naam geven en apart intikken. Dit heeft voordelen met het oog op het tekenen van de grafieken. We zullen hier echter werken met het linker- en rechterlid van de ongelijkheid. De commando s lhs en rhs werken namelijk ook op ongelijkheden. > restart; ong := (x+1/2)^2 <= (2.0*x^2+x-1)/(x-1); ong := (x+ 1 2 )2 2.0x2 + x 1 x 1 > plot([lhs(ong),rhs(ong)],x=-4..4,y= ,discont=true, thickness=[3,1]); Zie figuur 3.3. ongelijkheid oplossen met grafieken en berekenen van de snijpunten 20 y 10 a x 10 b c 20 Figuur 3.3 > solve(ong,{x}); { x, x }, {x , 1. < x}
84 72 Handleiding Maple 10 In figuur 3.3 kun je de oplossing verifiëren. > a:=fsolve(lhs(ong)=rhs(ong),x=-1..0); > b:=fsolve(lhs(ong)=rhs(ong),x=0..1); > c:=fsolve(lhs(ong)=rhs(ong),x=2..3); a := b := c := Toelichting: In hoofdstuk 2 staat uitgebreid informatie hoe je de figuur van tekst en een titel voorziet. Door met de muis op de snijpunten in de grafiek te klikken, vind je in de contextbar links bovenaan de coördinaten van deze snijpunten. Zo kun je alvast een schatting maken van de oplossing van de ongelijkheid. Je zult zien dat het niet mooi uitkomt en zoals gezegd: het commando fsolve werkt niet bij ongelijkheden! Daarom is de ongelijkheid alvast ingevoerd met ergens een decimale punt, zodat het programma de benaderde oplossing geeft! Een onderzoek is echter in dit soort gevallen steeds aan te raden. Ga na dat in figuur 3.3 de vet getekende kromme (parabool) de grafiek van het linkerlid is. De dun getekende grafiek stelt het rechterlid voor waarbij de asymptoot niet getekend is om niet in de war te komen met de snijpunten van de beide grafieken en daardoor verkeerde conclusies te trekken over de oplossing van de ongelijkheid. (Zie ook paragraaf 2.11 voor de optie discont=true.) In het plaatje kun je de oplossingsverzameling al bijna aflezen. Als we er nu achter zouden kunnen komen waar de snijpunten liggen van de twee grafieken, kunnen we aan de hand van de figuur zien wat de oplossingsverzameling van de ongelijkheid zou moeten zijn. We benaderen met behulp van het reeds besproken commando fsolve de snijpunten van de grafieken De bijbehorende x-waarden noemen we a, b en c. (Het commando fsolve werkt niet op ongelijkheden, daarom lossen we de vergelijking op met fsolve.) Nu kan de oplossingsverzameling S van de ongelijkheid gegeven worden: ( x+ 1 ) 2 2x2 + x 1 S = [a,b] 1,c] = [ 0.9, 0.3] 1, 2.6] 2 x 1 TIP: voor bijvoorbeeld de ongelijkheid ln(x) 3 cos(x) ben je aangewezen op het berekenen van de snijpunten van de grafieken van linker- en rechterlid van deze ongelijkheid. Op grond daarvan en de grafiek (zie figuur 3.2) kun je de oplossingsverzameling vinden. De ongelijkheid is immers niet analytisch oplosbaar en fsolve werkt niet op ongelijkheden! 3.5 Limieten Het bepalen van limieten zal vaak een onderdeel zijn van het bestuderen van het verloop van een functie. Het kan zijn dat het moeilijk is om functiewaarden te berekenen in sommige punten van de grafiek. Denk aan noemers die nul worden, of uitdrukkingen waarbij je nul gedeeld door nul krijgt (kans op een ophefbare discontinuïteit). Het is soms gewenst om het verloop van een functie te bestuderen in het geval dat een variabele naar oneindig gaat. Andere situaties zijn denkbaar wanneer een functie niet continu is, maar sprongen vertoont. Aan je eigen inzicht wordt overgelaten in welke punten het nodig is om de limiet te bepalen en in welke punten je gewoon waarden in kunt vullen (met behulp vansubs ofvalue of op een andere manier, behandeld in paragraaf 3.2.1). Het invoeren van limieten kan, behalve commandogestuurd zoals in de voorbeelden, ook met behulp van een menu. Open het expression-palet met behulp van View en kies voor
85 3 Basisvaardigheden 73 Palettes. Een overzicht van het symbol-palet en het expression-palet zie je in figuur 1.2. Er is tegenwoordig zelfs in een van de subpakketten van het Student-pakket een speciaal Maplet gemaakt om limieten te bekijken en dingen te animeren zoals in het volgende voorbeeld. Voorbeeld 3.27 Limieten met een Maplet Beschouw nu de functie f(x) = sin3x x. In het vorige hoofdstuk heb je kunnen zien hoe functies van één variabele eenvoudig geplot kunnen worden. Een aantal functiewaarden wordt berekend en het programma verbindt de punten met elkaar. Op die manier is niet altijd te zien welke punten er berekend zijn en welke punten niet. In het subpakket Precalculus van het pakket Student zit een limiet-tutor die je op de volgende manier bereikt. Vul daarin zowel de functie als ook het punt x = 0 in en klik in het Maplet op de knop Display. > Student:-Precalculus:-LimitTutor(); (Zie figuur 3.4.) Figuur 3.4 In de animatie zie je dat voor x = 0 de functiewaarde ongeveer gelijk is aan 3. Verder is in het Maplet het nodige aan te passen. Je kunt de functie veranderen, het punt waar de discontinuïteit plaats heeft, moet ingevuld worden en je kunt kiezen of je van de linkerkant of de rechterkant het punt benaderen wilt. Bij de berekende waarden beweegt er gelijktijdig een punt over de grafiek heen naar het betreffende punt waar de functie discontinu is. Verder verschijnt onder in beeld het commando dat je met Ctrl-c en Ctrl-v naar een invoerregel in je werkblad kunt verplaatsen. Bedenk dan wel dat je eerst Student:-Precalculus:- ervoor moet plaatsen óf het benodigde pakket activeren met with(student[precalculus]). Als je de grafiek tekent, is dit gewoon een vloeiende kromme, maar let erop dat er een open rondje getekend zou moeten worden in het punt (0,3), want volgens de berekening is de limiet van de functie voor x nadert tot 0 precies gelijk aan 3, terwijl x = 0 dus beslist niet ingevuld kan worden. Voorbeeld 3.28 Limiet met het commandolimit > restart; f:=sin(3*x)/x; f := sin(3x) x > plot(f,x=-5..5,discont=true,color=black); Zie voor de grafiek ook in figuur 3.4. > Limit(f,x=0):%=value(%);
86 74 Handleiding Maple 10 sin(3 x) lim = 3 x 0 x Toelichting: Het commando voor het bepalen van de limiet is limit, het Engelse woord voor limiet. Let hier eens op de invoer met het commando value. Bij het inerte commando Limit (met een hoofdletter) wordt er nog niets uitgerekend. Pas na value wordt de feitelijke berekening gedaan. Je krijgt op deze manier een goede presentatie in je werkblad. Voorbeeld 3.29 Rechterlimiet Gegeven de functie g(x) = x x 1 waarvan de grafiek hier niet is afgedrukt. Deze functie heeft een verticale asymptoot x = 1 want de limiet voor x 1 van de functie is oneindig met de volgende officiële notatie: g(x) = x x 1 lim x 1 g(x) = > restart; g:=x/sqrt(x-1); g := x x 1 > Limit(g,x=1,right):%=value(%); lim x 1+ x = x 1 Toelichting: De grafiek kan eventueel met plot(g,x=0..5,0..10); afgedrukt worden. Het symbool voor oneindig wordt gemaakt metinfinity, terwijl in de tekst en in de uitvoer het teken gebruikt wordt. Merk op hoe het programma de rechterlimiet noteert Limieten met parameters Soms komt het voor dat een limiet bepaald moet worden van een functie waarin een parameter voorkomt. Dit soort functies kan niet getekend worden, tenzij er tijdelijk even een waarde voor de parameter aangenomen wordt. Neem bijvoorbeeld de functie f(x) = e ax. Deze kan opgevat worden als een functie van x met a als parameter. Met je kennis van standaardfuncties is het belangrijk om te weten of de waarde van a positief danwel negatief is als je gaat kijken naar de functie voor x nadert naar oneindig. Oneindig moet ingevoerd worden als infinity. In de tekst gebruiken we het symbool. (Eventueel met behulp van het symbol-palet (figuur 1.2) met View en Palettes.) Voorbeeld 3.30 Neem van de functie f(x) = e ax de limiet voor x en x met als aanname dat a positief is. > restart; assume(a>0); f:=exp(a*x); f := e (ax) > Limit(f,x=infinity): %=value(%); lim x e(ax) = > Limit(f,x=-infinity): %=value(%); lim x ( ) e(ax) = 0 Toelichting: Met behulp van het commando assume (Engels voor: neem aan dat...) kun je bijvoorbeeld laten weten dat a positief is. Voor meer informatie over dit commando zie paragraaf
87 3 Basisvaardigheden Differentiëren Er zijn verschillende mogelijkheden om functies te differentiëren met Maple. Voer de functie f(x) in als een uitdrukking met de naam f (beter níet met de naam f(x)). Meestal gebruik je voor differentiëren het commando diff. Hierbij moet opgegeven worden welke functie er gedifferentieerd zal worden. Tevens moet de variabele opgegeven worden waarnaar gedifferentieerd wordt. De structuur van het commando is dus:diff(uitdrukking,variabele). Voor snelle berekeningen om even een paar afgeleiden te bepalen is het handig om met de rechtermuisknop te werken. Selecteer een uitdrukking in de uitvoer van Maple en klik deze aan met de rechtermuisknop. Kies vervolgens voor Differentiate en de rest wijst zich vanzelf. Het commando voor het differentiëren kent, net als het commando voor de berekening van limieten, verschillende mogelijkheden: diff en Diff. De werking is hetzelfde als bij de limietbepaling: het commando met de hoofdletter, het inerte commando, berekent nog niets, maar zorgt alleen voor een mooie schrijfwijze. Na value wordt de berekening gedaan. Om met pen en papier te oefenen met de rekenregels voor het differentiëren is er een handige tutor, zie paragraaf Zie voor meer informatie over differentiëren hoofdstuk 5. Voorbeeld 3.31 Verschillende manieren van differentiëren Ga uit van de functie f(x) die je nog wel handmatig kunt differentiëren. f(x) = x 6 5x d f(x) dx = 6x 5 15x 2 en d f(x) da = 0 > restart; f:=x^6-5*x^3+3; > Diff(f,x):%=value(%); > Diff(f,a):%=value(%); f := x 6 5x d dx (x6 5x 3 + 3) = 6x 5 15x 2 a (x6 5x 3 + 3) = 0 Toelichting: De functie is als uitdrukking ingevoerd. Merk verder op dat Maple op het scherm een uitvoer geeft met de ene keer een rechte letter d en de andere keer een (een kromme letter d). Deze wordt gebruikt voor het partieel differentiëren van een functie: het differentiëren naar a in dit geval, waarbij de andere letters (x) constant gehouden worden. Bij het differentiëren naar x hoeft er geen kromme geschreven te worden want er zijn geen andere letters dan de x in het spel. De functie f is niet afhankelijk van a en de afgeleide naar a is dan ook gelijk aan 0. Wij schrijven in de tekst meestal gewoon een rechte d, tenzij we werkelijk de partiële afgeleide bedoelen. TIP: merk de truc op met het inerte commando (Diff met hoofdletter) gevolgd door value met gebruikmaking van het procentteken. Deze manier werd ook gebruikt bij de limieten om een mooie uitvoer op het scherm te krijgen (zie de voorbeelden van paragraaf 3.5). Voorbeeld 3.32 Herleiden van de afgeleide Vaak is het nodig om de afgeleide nog te herleiden (vereenvoudigen). > restart; f:=ln(x+sqrt(1+x^2));
88 76 Handleiding Maple 10 f := ln(x+ 1+x 2 ) > f :=simplify(diff(f,x)); f := 1 1+x 2 Toelichting: Als je van tevoren weet dat je de vorm na het differentiëren nog verder moet herleiden, kan dat ook in één moeite met het ervoor zetten van het commando simplify (nesten van commandoá) dat meestal het gewenste resultaat oplevert. Merk hier het gebruik van backquotes op voor de notatie van f. Zie voor informatie over backquotes paragraaf Voorbeeld 3.33 Differentiëren van echte functies Mocht het zo zijn dat de functie gegeven is in pijltjesnotatie, dan moet de te differentiëren functie op een andere manier aangeroepen worden, namelijk met f(x). Dat geldt ook voor bijvoorbeeld limieten en bij het plotcommando. > restart; f:=x->sin(x)*exp(-2*x); > diff(f(x),x); f := x sin(x)e ( 2x) cos(x)e ( 2x) 2sin(x)e ( 2x) Overigens is nóg mooier en met hetzelfde resultaat: D(f)(x). Je kunt, als je wilt, zelfs metéén ook de waarde van de afgeleide berekenen in een bepaald punt: > D(f)(5); cos(5)e ( 10) 2sin(5)e ( 10) Hierna kan eventueel met evalf gewerkt worden. TIP: wellicht kan beter D(f)(5.0) met floating point ingevoerd worden om metéén de benaderde waarde te krijgen. 3.7 Integreren Het commando voor integreren is int en er moet, net als bij differentiëren, eerst opgegeven worden wat de integrand is en vervolgens naar welke variabele er geïntegreerd moet worden. De structuur van het commando is dus:int(uitdrukking,variabele). Er zijn weer verschillende mogelijkheden. Voor een mooie uitvoer is Int, het inerte commando met hoofdletter, gevolgd door value zeer geschikt. De werking is hetzelfde als bij het differentiëren en bij het bepalen van limieten, en het gebruik ervan is uitermate geschikt voor het controleren van de invoer van een integraal. Het invoeren van integratie kan, behalve commandogestuurd zoals in de voorbeelden, ook met behulp van een menu. Open het expression-palet met behulp van View en kies voor Palettes (figuur 1.2). Voor snelle berekeningen om even een paar integralen te berekenen is het ten slotte ook handig om met de rechtermuisknop te werken. Selecteer een uitdrukking in de uitvoer en klik deze aan met de rechtermuisknop. Kies vervolgens voor Integrate en de rest wijst zich vanzelf. Er kan ook met Maplets gewerkt worden voor wat meer instructie bij het primitiveren. Zie daarvoor paragraaf
89 3 Basisvaardigheden Onbepaald integreren (primitiveren) Wees erop bedacht dat niet alle functies geprimitiveerd kunnen worden! Soms wordt de invoer weer teruggegeven en dat is een teken dat de primitieve waarschijnlijk niet bestaat. Wees er ook op bedacht dat de algemene (integratie)constante bij het primitiveren door Maple op 0 gesteld wordt. Voorbeeld 3.34 Een paar eenvoudige voorbeelden Eenvoudig wil zeggen dat je deze functies nog met de hand zou kunnen primitiveren met wat basiskennis. Doe dit eens en controleer het resultaat met Maple. Gegeven zijn de volgende functies: f(x) = sin(3x) g(x) = e ax h(x) = x5 1+x 2 > restart; f:=sin(3*x); > F:=int(f,x); diff(f,x); f := sin(3x) F := 1 3 cos(3x) sin(3 x) > g:=x->exp(-a*x); Int(g(x),x):%=value(%); g := x e ( ax) Z e ( ax) dx = e( ax) a > h:=x^5/(1+x^2); H:=int(h,x); h := x5 1+x 2 H := x4 4 x ln(1+x2 ) > Int(convert(h,parfrac,x),x): %=value(%); Z x 3 x+ x x4 dx = 1+x2 4 x ln(1+x2 ) Toelichting: Er wordt gebruikgemaakt van Int en value voor een mooie presentatie op het scherm. Je kunt het resultaat weer differentiëren en vergelijken met de oorspronkelijke uitdrukking. Merk op dat de functie g ingevoerd is met de pijltjes-notatie en dat dan de functie voor integratie aangeroepen moet worden met g(x). Verder is op de uitdrukking h breuksplitsing toegepast, zodat de integratie begrijpelijker wordt. Zie voor breuksplitsing paragraaf De bepaalde integraal In paragraaf heb je gezien hoe een onbepaalde integraal ingevoerd moet worden. Bepaalde integralen voer je op dezelfde manier in, het commando is iets uitgebreider: je moet namelijk een interval (range) opgeven voor de variabele, dus: int(uitdrukking,variabele =a..b). Dit interval kan zelfs oneindig groot zijn bij de integratie. Het teken voor oneindig is net als bij de limieten: infinity. Het opgeven van een interval gaat op dezelfde manier als bij het tekenen van grafieken met plot. Verder kun je weer gebruikmaken van de mogelijkheden om de invoer van de integraal te controleren met het inerte commando
90 78 Handleiding Maple 10 Int. Als Maple de integraal met value niet kan berekenen, stap dan over op numerieke benadering, met evalf of met invoer van decimale getallen. Het spreekt vanzelf dat alleen het integreren met grenzen voor numerieke integratie in aanmerking komt. Voor meer informatie over integratie zie ook hoofdstuk 9. TIP: probeer ook eens de bepaalde integraal in te voeren met behulp van View Palettes met het expression-palet, zie figuur 1.2. Met de Tab-toets kun je dan steeds naar het volgende invulveld. Voorbeeld 3.35 Oppervlakte tussen grafiek en horizontale as Gegeven is een derdegraadsfunctie f(x) = x 3 9x x waarvan de grafiek de X-as een aantal malen snijdt, namelijk in de punten a, b en c. De opdracht is nu om de oppervlakte te berekenen van het gedeelte van het vlak dat ingesloten wordt door de grafiek van de functie en de X-as. Zie figuur 3.5. > restart; f:=x^3-9*x^2+12*x; f := x 3 9x x > nulp:=solve(f=0,x); nulp := 0, , > a:=nulp[1]; b:=nulp[3]; c:=nulp[2]; a := 0 b := c := > with(plots): p1:=plot(f,x=-2..8,color=black): p2:=plot(f,x=a..c,filled=true,color=gray): p3:=textplot({[a,0,"a"],[b,0,"b"],[c,0,"c"]}, font=[times,italic,14], align={below,right}): display({p1,p2,p3},title=oppervlaktebepaling); Zie figuur 3.5. Oppervlaktebepaling 20 x a b c Figuur 3.5
91 3 Basisvaardigheden 79 > Int(f,x= a.. b )-Int(f,x= b.. c ):% :%%=simplify(value(%)); Z b Z c x 3 9x xdx x 3 9x xdx = 531 a b > Opp_totaal:=evalf(int(abs(f),x=a..c)); Opp totaal := Toelichting: Eerst is de functie ingevoerd en gecontroleerd. De waarden van x voor de snijpunten met de X-as zijn berekend door de vergelijking f(x) = 0 op te lossen. Er zijn drie waarden gevonden. Deze waarden voor x zijn exact berekend met behulp van het commando solve. Je moet zelf bekijken welke waarde bij welk snijpunt hoort, want de volgorde van de oplossingsverzameling ligt niet vast. Dan kun je de namen a, b en c aan deze waarden toekennen. De integraal van f op het interval [b, c] moet negatief genomen worden, omdat namelijk de oppervlakte bepaald moet worden en het gebied ligt juist onder de X-as. Voor de gearceerde vlakken kan bij het plotcommando als optie filled=true gegeven worden, wat ervoor zorgt dat het gebied tussen de grafiek van de functie en de horizontale as wordt gekleurd. Voor de oppervlaktebepaling kan natuurlijk ook in één keer de absolute waarde van f geïntegreerd worden over het gehele interval. Er kan gebruikgemaakt worden van evalf in plaats vanvalue om de integraal te benaderen. Zie paragraaf 6.3 voor het gebruik van quotes en zie verder hoofdstuk 9 voor meer voorbeelden met integratie. Voorbeeld 3.36 Oppervlaktebepaling tussen twee grafieken Gegeven de functie f = sin(x)e 2x en de lijn g = 1 10 x. Bereken de oppervlakte ingesloten door de grafiek van f, de lijn g en de X-as. > restart; Digits:=4: f:=sin(x)*exp(-2*x); g:=x/10; f := sin(x)e ( 2x) g := 1 10 x > plot({f,g},x=0..3); Zie figuur Oppervlakte tussen de grafieken Y f A g X Figuur 3.6 Zie bij de toelichting het script voor het maken van deze grafiek inclusief aanvullingen van letters en titel en arcering.
92 80 Handleiding Maple 10 > a:=fsolve(f=g,x, ); a := > Int(g,x=0..a)+Int(f,x=a..infinity):%=value(%); Z Z x 0 10 dx+ sin(x)e ( 2x) dx = Toelichting: Er is nu gekozen voor een numerieke methode (met fsolve) om het snijpunt van de twee grafieken (a) te bepalen. Verder komt hierin een oneigenlijke integraal voor met een oneindig interval. Metvalue wordt toch numeriek gerekend omdat er decimale getallen zijn ingevoerd. Evengoed had de integraal ook berekend kunnen worden met evalf. Zie voorbeeld 3.35 voor een nog elegantere uitvoer met behulp van quotes. Hieronder staat het script voor figuur 3.6. Voor het gearceerde gebied zijn apart de plots p 1 en p 2 gemaakt metfilled=true, zodat de gearceerde gebieden mooi aansluiten. > p1:=plot(f,x=a..3,filled=true,color=gray): p2:=plot({g},x=0..a,filled=true,color=gray): > p3:=plot({f,g},x=0..3,color=black): > p4:=textplot({[a,a/10,a],[2,2/10,"g"],[0.5,0.18,"f"]}, font=[times,italic,16],align={above,left}): > with(plots): display({p1,p2,p3,p4},labels=[x,y], title="oppervlakte tussen de grafieken"); Integratie met parameters Net als bij limieten, kan Maple soms de integraal niet doen omdat er te weinig informatie is over een parameter, zie voorbeeld Met behulp van assume kan deze informatie gegeven worden zodat er wél gerekend kan worden. Zie paragraaf voor informatie over het commando assume. Voorbeeld 3.37 Aanname voor de parameter Voor het bepalen van de oppervlakte van de halve cirkel met middelpunt O en straal R stellen we de volgende integraal op. Met een aanname dat R > 0 kan de computer probleemloos de integraal berekenen. > restart; assume(r>0); Int(sqrt(R^2-x^2),x=-R..R): %=value(%); Z R R 2 x 2 dx = 1 R 2 R2 π 3.8 Maplets met animaties en tutors Er bestaat een aantal interessante animaties en zogenoemde tutors in de vorm van Maplets over differentiëren en integreren in de subpakketten van het Student-pakket. De meest aantrekkelijke voor beginniveau worden hier toegelicht. Deze kunnen eventueel zonder het activeren van betreffende subpakket gedraaid worden als de commando s worden overgenomen, zoals ze hieronder gegeven zijn. Vaak staat onder in het Maplet het commando dat nodig is voor bijvoorbeeld een animatie. Dit commando, waarmee buiten het Maplet betreffende animatie in het werkblad kan draaien, kan door selecteren en met Ctrl-c en Ctrl-v naar het werkblad verplaatst worden. Echter dan moet er wel de code voor het activeren van de nodige pakketten voor geplaatst worden, anders werkt het commando niet, tenzij de pakketten reeds geactiveerd zijn met bijvoorbeeld with(student[calculus1]); of with(student[precalculus]);.
93 3 Basisvaardigheden Differentiëren met Maplets > Student:-Precalculus:-FunctionSlopeTutor(); De FunctionSlopeTutor geeft een animatie hoe je tot de helling van de grafiek in een bepaald punt komt met behulp van het Newton-quotiënt (het differentiquotiënt). Opgegeven moet worden de functie én het punt waar de helling bepaald moet worden. Een tabel met x-waarden en bijbehorende waarden van het Newton-quotiënt worden in het Maplet gepresenteerd. Je krijgt dan ook de vergelijking van de raaklijn erbij en onder in het Maplet het commando om de animatie in het werkblad op te nemen. > Student:-Calculus1:-TangentTutor(); Zie figuur 3.7. Dit Maplet werkt ongeveer hetzelfde als de FunctionsSlopeTutor maar er is nog een extra mogelijkheid om het aantal iteraties en de toename van de variabele in te stellen. Figuur 3.7 > Student:-Calculus1:-DerivativeTutor(); Met deze DerivativeTutor kun je een functie opgeven en dan krijg je de functies van de afgeleide en van de tweede afgeleide gepresenteerd. In de bijbehorende grafiek krijg je de grafiek van de afgeleide erbij en optioneel ook die van de tweede afgeleide. > Student:-Calculus1:-DiffTutor(); Met de Differentieer Tutor kun je stap voor stap elke functie differentiëren die je wilt met de rekenregels, zoals somregel, productregel, quotiëntregel, kettingregel en combinaties daarvan. Voer een functie in en je krijgt hints voor de regels die toegepast moeten worden Integreren met Maplets > Student:-Calculus1:-ApproximateIntTutor(); Met deze tutor kan een functie ingevoerd worden en kunnen de verschillende methoden bestudeerd worden om de oppervlakte onder de grafiek te benaderen. > Student:-Calculus1:-IntTutor(); Met deze tutor kun je stap voor stap oefenen met de rekenregels voor het primitiveren met pen en papier. Voer een functie in en je krijgt hints voor de regels die toegepast moeten worden. > Student:-Calculus1:-AntiderivativeTutor(); Met deze tutor kun je een functie invoeren, een interval en een beginwaarde om de grafiek én de formule van een of meer primitieven te weten te komen.
94
95 4 Overzicht van wiskundige objecten In de techniek wordt bij het beschrijven van situaties en verschijnselen gebruikgemaakt van formules. Het woord formule is eigenlijk een verzamelnaam voor allerlei wiskundige objecten. Voorbeelden van wiskundige objecten zijn: vergelijkingen, functies, grafieken, vectoren en matrices. In dit hoofdstuk wordt geprobeerd om een overzicht te geven van de meest voorkomende wiskundige objecten waarmee je te maken krijgt als je een computeralgebrasysteem hanteert. Als je een goed inzicht hebt in de verschillende wiskundige objecten, kun je ook beter omgaan met een computeralgebrasysteem. Maple is in staat om de verschillende objecten te herkennen en handelt daar ook naar. Dat is te merken bij het gebruik van de rechtermuisknop. Zie voor het gebruik van de rechtermuisknop paragraaf 1.4. Het is belangrijk te weten wanneer er bijvoorbeeld een vergelijking, een verzameling of een lijst moet worden opgegeven bij bepaalde commando s. Als je de structuren daarin kunt herkennen, is het gebruik van het systeem een stuk doorzichtiger. 4.1 Formules uitdrukkingen en functies Onder formules kan men van alles verstaan wat met wiskundige uitdrukkingen te maken heeft. Er zijn verder nog specifieke wiskundige objecten die men kan onderverdelen in soorten. Als niet duidelijk is om wat voor wiskundig object het gaat, kun je het beste in teksten het woord formule gebruiken. Elke formule kan bij Maple ingevoerd worden. Zorg er dan voor dat de namen van de formules corresponderen met de bijbehorende tekst. Geef de formule die je invoert een logische naam, zodat je de formule later nog eens kunt aanroepen. In de vorige hoofdstukken zijn functies wel vaak als uitdrukkingen (expressies) ingevoerd. Er zijn eigenlijk twee manieren om een functie in te voeren: met de pijltjesnotatie en als uitdrukking. Beide hebben hun voordelen, zie paragraaf Een functie van één of meer variabelen wordt gedefinieerd door middel van een formule waarin duidelijk wordt gemaakt wat de naam van de functie is, wat de variabelen zijn en wat het functievoorschrift is. Er zijn twee manieren om een functie van x schriftelijk te definiëren: f : x x 4 + ax 3 + x 2 of f(x) = x 4 + ax 3 + x 2 Een functie van twee variabelen definieer je schriftelijk als: g : (x,a) x 4 + ax 3 + x 2 of g(x,a) = x 4 + ax 3 + x 2 Deze functies kunnen worden ingevoerd met de pijltjesnotatie op de volgende manier: > restart; f:=x->x^4+a*x^3+x^2; > restart; f:=(x,a)->x^4+a*x^3+x^2; f := x x 4 + ax 3 + x 2 f := (x, a) x 4 + ax 3 + x 2 Zie voor verdere instructie de paragrafen en 3.6 om te weten wat de voordelen zijn van het hanteren van een echte functie zoals in voorbeeld 5.2.
96 84 Handleiding Maple Vergelijkingen en ongelijkheden Vergelijkingen zijn formules met een isgelijkteken. Je kunt ze invoeren en voor het gemak een naam geven. Geef altijd wel logische namen, bijvoorbeeld verg:=x^3-2*x^2=0;. Zie voor voorbeelden paragraaf 3.3. Als je met de rechtermuisknop de ingevoerde vergelijking aanklikt (zie instructie aan het begin van paragraaf 3.3), wordt dit object door het programma herkend en er opent zich een menu dat specifiek op een vergelijking betrekking heeft. Klik eens op Manipulate Equation: er opent zich dan een Maplet waarin je met knoppen de vergelijking kunt manipuleren. Alle rekenregels die je over vergelijkingen kent, zie je daarin terug! Ongelijkheden zijn formules met een kleinerdan-, groterdan-, kleinergelijk- of grotergelijkteken. Deze tekens kun je intikken met het toetsenbord: >=, enzovoort. Zie voor voorbeelden paragraaf 3.4. Met de commando slhs ( = left hand side) en rhs kun je over het linker- en het rechterlid van de vergelijking/ongelijkheid beschikken. 4.3 Intervallen (ranges) Een interval (range) wordt aangeduid met behulp van een begin- en een eindpunt met twee stipjes ertussen. Er wordt bedoeld het gesloten interval, dus begin- en eindpunt meegerekend. Soms wordt bedoeld een interval op de reële as en soms wordt bedoeld een interval van gehele getallen. Het programma herkent een range en weet wat er in iedere situatie met een range gedaan moet worden. Voorbeelden heb je al gezien bij het commando plot. Neem bijvoorbeeld de opdracht voor het tekenen van een parabool, waarbij x [ 3, 3] (interval op de reële as), in het plotcommando aangegeven doorplot(x^2,x=-3..3);. Bij het maken van een rij wordt de range bedoeld als interval, waarbij stapjes van precies 1 genomen worden vanaf beginpunt waarbij het eindpunt niet overschreden mag worden. Een en ander wordt getoond in voorbeeld 4.3 met seq(tk,k=0..10). De waarden van k zijn in dit geval dan geheel van 0 tot en mét 10. Echter bij seq(i,i= ) is het beginpunt precies 0.3 en daarna neemt i achtereenvolgens steeds grotere waarden aan met stapjes van 1 tot 9.3. De waarde van 10 mag namelijk niet overschreden worden. Ook kan er gewerkt worden met breuken in een range. Zie verder bij de rijen paragraaf Operanden Het is mogelijk om de operanden van een wiskundig object te zien te krijgen of er iets mee te doen: de termen van een som, de factoren van een product of de elementen van een matrix. Hiervoor kan het commando op gebruikt worden. Voorbeeld 4.1 De operanden van een uitdrukking Ga eens na uit welke onderdelen een zelfbedachte functie bestaat. > restart; f:=x^4+a*x^3+x^2; > op(f); f := x 4 + ax 3 + x 2 x 4, ax 3, x 2 > de tweede operand van f =op(2,f); de tweede operand van f = ax 3
97 4 Overzicht van wiskundige objecten 85 > map(cos,f); cos(x 4 )+cos(ax 3 )+cos(x 2 ) Toelichting: Eerst wordt er gevraagd naar de operanden van de uitdrukking f. Vervolgens wordt er gevraagd naar de tweede operand van f. (Elke operand kan natuurlijk op zijn beurt ook weer uit operanden bestaan.) Zie voor uitleg van het gebruik van de quotes paragraaf 6.3. Je kunt heel gemakkelijk iets gaan doen met de operanden van een object. Je wilt bijvoorbeeld van alle termen van f de cosinus nemen. Een handig commando voor zulke acties is het commando map. Dit zorgt ervoor dat met alle operanden van een object hetzelfde gedaan wordt. In dit geval de cosinus nemen. Zie de index van dit boek bij map voor meer voorbeelden. Alle kentallen (operanden) van een vector differentiëren gaat ook met het commando map (voorbeeld 4.11), maar als je binnen het VectorCalculus-pakket werkt, kan een vector rechtstreeks gedifferentiëerd worden met diff (voorbeeld 4.12). Het gebruik van het commandoop kan veel tikwerk en fouten besparen. Wil je bijvoorbeeld met een gedeelte van een uitvoer die Maple geeft verder werken, dan kun je een rij met operanden maken en het goede object eruit kiezen met behulp van een index (met vierkante haakjes). Zie voor meer informatie over het gebruik van indices paragraaf 6.2. Als je wilt weten hoeveel operanden een lijst of een vector bijvoorbeeld heeft, vraag je daarnaar metnops(..). Zie een toepassing in voorbeeld Randomgetallen Maple bezit een commando om randomgetallen (willekeurige gehele getallen) te genereren met het commando rand. De voorbeelden die hier gegeven worden, geven op je eigen scherm natuurlijk andere getallen, omdat het om een willekeurig getal gaat. Met rand() krijg je een willekeurig geheel getal met maximaal twaalf significante cijfers te zien. Met rand(10..30)() krijg je een willekeurig geheel getal tussen de 10 en de 30 te zien. Met rand(1000) een willekeurig geheel getal tussen 0 en Het is tevens mogelijk om een willekeurig decimaal getal te genereren in een bepaald interval: bijvoorbeeld met evalf(rand(1000)/250) krijg je een willekeurig (niet geheel) getal tussen 0 en 4. Een toepassing hiervan is te vinden op de cd-rom met een voorbeeld over ruis in een sinusvormig signaal. Voorbeeld 4.2 Genereren van randomgetallen > rand(); > rand(3..30)(); > rand(1000)(); > evalf(rand(1000)()/250);
98 86 Handleiding Maple Rijen (sequenties) Een rij of sequentie is niets anders dan een aantal elementen gescheiden door komma s. Als je bijvoorbeeld naar de operanden van een object vraagt (zie paragraaf 4.4), krijg je een rij te zien. De elementen van een rij, ook wel termen genoemd, kunnen getallen, variabelen, constanten en dergelijke zijn. Rijen hebben we al gezien bij het oplossen van vergelijkingen. Het komt voor dat er meer oplossingen zijn van een vergelijking en het programma geeft deze oplossingen dan in de vorm van een rij (zie voorbeeld 3.16). Zelf kun je er eventueel nog een oplossingsverzameling van maken door er accolades omheen te zetten. Ook kun je van een rij snel een lijst maken door er vierkante haken omheen te zetten. Er kunnen nog meer dingen met rijen gedaan worden. Je kunt op een handige manier een rij maken als je een bepaald systeem in een bestaande rij elementen kunt vinden. Meetkundige rijen, rekenkundige rijen en nog andere rijen zijn gemakkelijk te maken met het commando seq (als er tenminste systeem in de rij zit). Voorbeeld 4.3 Meetkundige rij De meetkundige rij 1, 2 1, 1 4, is gemakkelijk te genereren als je de algemene term kent. Noem de algemene term van deze rij t k = 1. 2 k > restart; tk:=1/2^k; tk := 1 2 k > meetkundige_rij:=seq(tk,k=0..10); meetkundige rij := 1, 1 2, 1 4, 1 8, 1 16, 1 32, 1 64, 1 128, 1 256, 1 512, Toelichting: Automatisch doorloopt k hier de verzameling van gehele getallen van beginpunt tot en met eindpunt van de opgegeven range. (Zie voor het begrip range paragraaf 4.3.) Voor de letter k kun je eventueel een andere letter nemen en je hoeft niet speciaal altijd bij k = 0 te beginnen. Bij het opvragen van de operanden (zie paragraaf 4.4 voor het begrip operand) van een wiskundig object geeft Maple een rij. Het is duidelijk dat een rij het enige object is waarvan je de operanden niet kunt nemen met behulp vanop, behalve als de rij bestaat uit één element. Let op dat bij Maple 2,3 een rij is, dat 2.3 een decimaal getal is en dat 2..3 een interval (range) is! TIP: er is ook nog een dot-operator waarbij het handig is om te weten dat deze als vermenigvuldiging gebruikt kan worden (eigenlijk dotproduct). Aan weerszijden van de punt kun je het beste een spatie typen bij getallen, maar het gebruik van de dot-operator is bij getallen niet aan te raden! Kijk eens wat er gebeurt als je invoert: 2..33; met de nodige spaties. Een toepassing van het dotproduct met de dot-operator is te vinden in voorbeeld 4.10 en verder in paragraaf bij het dotproduct van vectoren Het dollarteken voor een rij Het voorbeeld 4.3 van het maken van de meetkundige rij kan ook met behulp van het dollarteken, maar is niet zo gebruikelijk: > tk $ k=0..10; geeft dezelfde rij als in dat voorbeeld. Het betekent: alle termen t k waarbij k loopt van 0 tot en met 10 met stappen van 1. Voor korte dingen is het dollarteken vaak wel te prefereren. Zie ook bij het herhaald
99 4 Overzicht van wiskundige objecten 87 differentiëren, bijvoorbeeld bij het invoeren van een differentiaalvergelijking van hogere orde (paragraaf ). De betekenis en de mogelijkheden van het dollarteken wordt duidelijk in het volgende voorbeeld. Voorbeeld 4.4 Gebruik van het dollarteken > i $ i = 2/3.. 5; > $ 2/3.. 5; > 2/3 $ 5; > x$4; 2 3, 5 3, 8 3, 11 3, , 5 3, 8 3, 11 3, , 2 3, 2 3, 2 3, 2 3 x, x, x, x Toelichting: Met k $ k=0..10; maak je alle waarden van k zichtbaar en je krijgt als uitvoer 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. De betekenis is namelijk: een rij met alle k waarvoor geldt dat k loopt van 0 tot en met 10. Er kunnen ook breuken in de range voorkomen om een rij te maken: alle waarden van i waarbij i loopt van 3 2 tot 5 met stappen van 1, waarbij 5 niet overschreden mag worden. Decimale getallen zijn ook mogelijk! Met een dollarteken vóór de range krijg je dezelfde rij. Met het dollarteken ertussen (a$b) krijg je een rij van allemaal dezelfde a s waarbij het aantal gelijk is aan het grootste gehele getal kleiner of gelijk aan b. Zo kun je ook een rij van een aantal x-en krijgen De som van een rij De som van een rij kan met Maple gemakkelijk geschreven worden met het inerte commando Sum en berekend worden met het commando sum. Decimale getallen zijn hierbij ook mogelijk. Na Sum kun je weer gebruikmaken van het commandovalue net als bij limieten (paragraaf 3.5), differentiëren (paragraaf 3.6) en integralen (paragraaf 3.7). Als k de lopende variabele is, moet met een range opgegeven worden wat de beginwaarde en de eindwaarde van k is, waarbij de waarde oneindig (infinity) ook toegestaan is, dus: Sum(algemene term,k=a..b). De getallen van de range bestaan uit gehele getallen als je begint met een geheel getal. Je had echter ook een andere letter in plaats van k kunnen nemen. Voorbeeld 4.5 De som van de meetkundige rij De meetkundige rij 1, 2 1, 4 1, waarbij er oneindig veel termen worden meegenomen: > restart; tk:=1/2^k: Sum(tk,k=0..infinity):%=value(%); 1 k=0 2 k = 2 Toelichting: Bij het berekenen van de som is het goed om een aantal termen van de rij even zichtbaar te maken met behulp vanseq zoals in voorbeeld 4.3. In het geval van oneindig veel
100 88 Handleiding Maple 10 termen natuurlijk niet. Wel is het mogelijk om in alle gevallen de som eerst met het inerte commando Sum te presenteren in de officiële notatie. Voorbeeld 4.6 De binomiaalontwikkeling van (a+b) n Er geldt voor n = 5: ( ) 5 a 5 k b k = (a+b) 5 k k=5 k=0 > restart; Sum(binomial(5,k)*a^(5-k)*b^k,k=0..5): %=value(%); 5 binomial(5, k)a (5 k) b k = a 5 + 5a 4 b+10a 3 b a 2 b 3 + 5ab 4 + b 5 k=0 > factor(rhs(%)); (a+b) 5 > sum(binomial(5,k)*a^(5-k)*b^k,k=0..5): %=factor(%); a 5 + 5a 4 b+10a 3 b a 2 b 3 + 5ab 4 + b 5 = (a+b) 5 Toelichting: Let ook op het gebruik van het inerte commando Sum mét en het commando sum zónder hoofdletter. Voor het commando binomial wordt verwezen naar paragraaf Lijsten (lists) Een lijst (list) is een rij, bestaande uit getallen of andere objecten, die een vaste volgorde vertegenwoordigt. Je hoeft dus alleen maar om een rij een paar vierkante haakjes te zetten en je hebt een lijst waarmee de volgorde vastligt. Om er weer een rij van te maken, vraag je naar de operanden van de lijst zoals voorgedaan in paragraaf 4.4. Je bent al eens een lijst tegengekomen bij het plotcommando om meer grafieken te maken in één figuur (wat ook met verzamelingen kan). Het voordeel van het gebruik van een lijst in dit soort gevallen is dat er kleuren, lijndiktes of andere eigenschappen van de presentatie van de grafiek van de functies gedefinieerd kunnen worden. Kijk voor een toepassing in voorbeeld 2.2. Bij parameterkrommen (vectorfuncties) is het gebruik van een lijst juist noodzakelijk voor het garanderen van de volgorde. In paragraaf 2.6 is in de voorbeelden te zien dat er een lijst opgegeven wordt bij het plotcommando van zo n functie: plot([x,y,t=-3..3]);. Het is belangrijk dat hier de x en de y niet verwisseld worden, dus vierkante haken! Voorbeeld 4.7 Het maken van een lijst met punten Gegeven de functie sin(2πt). Verdeel het interval t [0,1] in vijf gelijke stukken en maak dus zes punten die op de grafiek van de sinusfunctie liggen. Je maakt dan een rij punten waaromheen je vierkante haken zet, zodat je een lijst krijgt. Zie voorbeeld 2.38 in hoofdstuk 2. > restart;digits:=3;punten:=[seq([i/5,evalf(sin(2*pi*i/5))],i=0..5)]; Digits := 3 punten := [[0, 0.], [ 1 5, 0.952], [2 5, 0.588], [3 5, 0.588], [4, 0.952], [1, 0.]] 5
101 4 Overzicht van wiskundige objecten 89 Voorbeeld 4.8 Lijst met dollarteken Een handige manier om een lijst met veel dezelfde getallen te maken is met het dollarteken $. (Zie ook paragraaf voor dit teken.) Bijvoorbeeld een lijst met drie enen en vijf nullen. Je kunt dit gebruiken bij het voorbeeld in hoofdstuk 9 op de cd-rom voor het maken van filters: > [1$3,0$5]; [1, 1, 1, 0, 0, 0, 0, 0] Voorbeeld 4.9 De operanden van een lijst Om een element uit een lijst te halen met de bedoeling er eventueel mee verder te werken, kun je gebruikmaken van de operanden (zie paragraaf 4.4) maar ook van de index-notatie. Gegeven een lijst L met elementen in een bepaalde volgorde: L = [t 2,3t, 5 t ]. Het tweede element van deze lijst wordt aangeduid met L 2 en er moet L[2] ingevoerd worden om deze te krijgen. Deze methode met de index kan ook bij vectoren, rijen en verzamelingen worden toegepast! Het is daarom niet handig om lijsten, vectoren en dergelijke van een naam met index te voorzien. Het is ook mogelijk om een lijst te differentiëren, dat wil zeggen dat alle elementen van de lijst gedifferentieerd worden. Dat kan direct met diff(l,t). Echter om bijvoorbeeld vectoren (buiten het VectorCalculus-pakket) te differentiëren moet gebruikgemaakt worden vanmap, evenals bijvoorbeeld voor het nemen van de cosinus van elk van de elementen van de lijst L. Je werkt dan met map(cos,l). Het heeft te maken met de operanden van de lijst. Zie ook voorbeeld Verzamelingen (sets) Een verzameling (set) is niets anders dan een rij elementen met accolades er omheen. De volgorde van de elementen in de verzameling is niet belangrijk, bijvoorbeeld: {a, b, 4, 5} is dezelfde verzameling als {b, a, 5, 4}. Dubbele elementen worden weggelaten, bijvoorbeeld {a, a, b, 4, 4, 5} is dezelfde verzameling als {a, b, 4, 5}. De elementen van een verzameling kunnen bestaan uit allerlei wiskundige objecten. Het begrip verzameling is aan de orde gekomen bij het oplossen van stelsels vergelijkingen, zie paragraaf Bij het tekenen van meer dan één grafiek in een figuur maakte je reeds gebruik van verzamelingen, zie voorbeeld 2.2. Met verzamelingen kan enigzins gerekend worden. Er zijn daarvoor dan ook een paar commando s nodig. Het is mogelijk om twee verzamelingen te verenigen (union) of van elkaar af te trekken (minus). Een voorbeeld van het verenigen van twee verzamelingen vind je in voorbeeld De doorsnede kan bepaald worden met intersect. 4.9 Vectoren Vectoren zijn objecten met specifieke rekenregels en eigenschappen, die bij Maple ingevoerd kunnen worden door middel van het commando Vector en het opgeven van een lijst waarvan de elementen getallen, variabelen of constanten zijn. Belangrijk is in ieder geval dat de volgorde vastligt. Er hoeft voor het invoeren van een vector geen pakket geactiveerd te worden en voor de meest elementaire berekeningen met vectoren, zoals lineaire bewerkingen en het inwendig product of acties met het rechtermuisknopmenu, is het activeren van het lineaire algebra pakket eerst nog niet nodig. Zie voor meer geavanceerde bewerkingen met vectoren in hoofdstuk 8. Het invoeren gaat als volgt met Vector([a,b,c]); of <a,b,c>;.
102 90 Handleiding Maple 10 Beide manieren kunnen door elkaar gebruikt worden. Op het scherm verschijnt in beide gevallen een kolomvector. Ook kan zo n vector ingevoerd worden met behulp van het vector-palet, zie figuur 1.2. Kies in dat palet voor de kolomvector als je deze door elkaar gebruikt met de andere invoer en ga steeds met de Tab-toets naar het volgende veld voor het invoeren van de kentallen van de vector. Voorbeeld 4.10 Vectoren en het inproduct > restart; OA,OB:=<1,2>,<3,1>; [ ] [ ] OA, OB := 1 3, 2 1 > OA+5*OB; x*oa-6*ob; inproduct=oa.ob; [ ] 16 [ 7 ] x 18 2x 6 inproduct = 5 Toelichting: Een voorbeeld van twee vectoren die ingevoerd zijn met behulp van het vectorpalet, of gewoon door de invoer te typen. Het is gedaan met een meervoudige toekenning (een rij van meer toekenningen in één keer). Met deze twee vectoren wordt een lineaire bewerking gedaan en vervolgens wordt het inwendig product van de twee vectoren berekend. Lineaire bewerkingen met parameters kunnen dus direct uitgevoerd worden. Het zijn de volgende berekeningen die ook uit het hoofd gedaan kunnen worden. ( ) ( ) ( ) OA+ 5OB = + 5 = ( ) ( ) ( ) 1 3 x 18 xoa 6OB = x 6 = 2 1 2x 6 Het inwendig product (dotproduct) van twee vectoren kan snel berekend worden met gebruikmaking van de stip in de invoer (dot-operator): ( ) ( ) 1 3 OA OB = = Voorbeeld 4.11 Differentiëren van een vector > restart; s:=<t^2,t,cos(t)>; v:=map(diff,s,t); t 2 s := t v := cos(t) 2t 1 sin(t)
103 4 Overzicht van wiskundige objecten 91 Toelichting: De afgeleide van de wegfunctie s is de snelheidsfunctie v. Om een vector te differentiëren moet er gebruikgemaakt worden van map, tenzij er gewerkt wordt in het VectorCalculus-pakket (zie paragraaf 4.9.1). Zie voor informatie over map ook paragraaf 4.4. In hoofdstuk 8 wordt nader op de vectoren ingegaan met geavanceerde berekeningen en toepassingen Geavanceerde berekeningen met vectoren Het rekenen met vectoren binnen het LinearAlgebra-pakket heeft vele mogelijkheden om met matrices én vectoren te rekenen. Dit wordt behandeld in hoofdstuk 8. De invoer en uitvoer van een vector binnen dit pakket is hetzelfde als hiervoor beschreven. Er is echter ook nog een VectorCalculus-pakket dat specifieke mogelijkheden biedt voor het rekenen met vectoren, vectorfuncties, vectorvelden en afgeleiden daarvan in de reële getallen. De manier van invoeren van een vector is als hiervoor beschreven. Echter de presentatie van een vector ziet er binnen dit pakket wat anders uit. Bovendien is het mogelijk om ook coördinatentransformaties uit te voeren. Een vector in Carthesische coördinaten kan bijvoorbeeld gemakkelijk naar poolcoördinaten worden omgezet en door middel van de presentatie van de vector is dan ook meteen duidelijk met wat voor coördinaten men te maken heeft. Elke vector die ingevoerd is binnen dit pakket, krijgt eigenschappen (attributes) mee die niet veranderen (zoals het coördinatenstelsel). Voorbeeld 4.12 Geavanceerde vectoren invoeren en differentiëren > restart; interface(warnlevel=0): with(vectorcalculus): V1:=<3,a,5>; > V2:=<3,a,5,b>; > s:=<t^2,t,cos(t)>; v:=diff(s,t); V1 := 3e x + ae y + 5e z V2 := 3e x1 + ae x2 + 5e x3 + be x4 s := t 2 e x + t e y + cos(t)e z v := 2t e x + e y sin(t)e z Toelichting: Na het activeren van het VectorCalculus-pakket komen er wel waarschuwingen op het scherm dat sommige commando s anders werken binnen dit pakket. Er hoeft verder niet op deze waarschuwingen gelet te worden en deze kunnen ook uitgezet worden met interface(warnlevel=0). Let op het verschil in presentatie van vectoren in drie dimensies en meer. De namen van de eenheidsvectoren worden dan automatisch aangepast. Lineaire bewerkingen tussen vectoren van gelijke dimensie kunnen verder op volkomen natuurlijke manier plaatshebben, zoals ook in andere situaties buiten dit VectorCalculuspakket. Differentiëren van een vectorfunctie s(t) gaat op een natuurlijke manier om bijvoorbeeld de snelheidsvector v(t) te krijgen waarbij het niet nodig is om met map te werken zoals in voorbeeld Voorbeeld 4.13 Vectoren in poolcoördinaten > restart; with(vectorcalculus): SetCoordinates(polar): a:=<3,4>; > b:=<5,6>; a := 3e r + 4e θ
104 92 Handleiding Maple 10 b := 5e r + 6e θ > a+b; (3sin(4)+5sin(6)) 2 +(3cos(4)+5cos(6)) 2 e r + arctan( 3sin(4)+5sin(6) 3cos(4)+5cos(6) )e θ > a1:=maptobasis(a,cartesian); > b1:=maptobasis(b,cartesian); a1 := 3cos(4)e x + 3sin(4)e y > attributes(a1); b1 := 5cos(6)e x + 5sin(6)e y coords = cartesian Toelichting: Als je binnen het VectorCalculus-pakket begint met het instellen van het poolcoördinatensysteem, worden de kentallen van de vectoren die je invoert opgevat als kentallen ten opzichte van dit ingestelde coördinatensysteem. De vectoren krijgen automatisch de juiste kenmerken mee (attributes). Als vectoren met bijvoorbeeld poolcoördinaten opgeteld worden, worden ze op de achtergrond eerst geconverteerd naar vectoren met cartesiaanse coördinaten en opgeteld, waarna het resultaat weer teruggezet wordt naar de poolcoördinaten. Wel een beetje een omweg maar je merkt er verder niets van, het gaat geheel automatisch en alleen het resultaat is zichtbaar. Eventueel kun je ook vectoren met MapToBasis zelf omzetten naar het basiscoördinatenstelsel (cartesiaanse stelsel). Alle vectoren die ingevoerd worden binnen het VectorCalculus-pakket krijgen automatisch eigenschappen mee die je op kunt vragen met attributes. Zo is te zien dat een vector a1 naar zijn eigenschappen kan worden gevraagd. TIP: merk op dat liever niet de naam van de vector a1 met een index gegeven wordt, want dan zou dit verkeerd opgevat kunnen worden. Zie voor toelichting hierover in voorbeeld Tekenen van vectoren Het tekenen van vectoren gaat met behulp van arrow uit het gewone plotpakket. In het volgende voorbeeld wordt in de R 3 getoond hoe vectoren getekend kunnen worden. Voor een voorbeeld in de R 2 kun je in voorbeeld 2.37 kijken. Met behulp van textplot is er tekst in de figuur te plaatsen zoals dat in paragraaf 2.13 gedaan is. In de R 3 gaat het verder op dezelfde wijze als in de R 2. Voorbeeld 4.14 Tekenen van pijlen in de R 3 Begin met het invoeren van twee vectoren (met meervoudige toekenning) op een van de manieren naar keuze (mag ook binnen het VectorCalculus-pakket) en definieer hiermee een aantal pijlen metarrow uit het plotpakket. > restart; with(plots): a,b:=vector([1,2,3]),vector([-2,4,1]); 1 2 a, b := 2, 4 > A:=arrow(a,color=gray): B:=arrow(b,color=black): AB1:=arrow(a,b-a,color=magenta,shape=arrow): AB2:=arrow(b-a,color=red,shape=arrow,linestyle=3): 3 1
105 4 Overzicht van wiskundige objecten 93 ABsom1:=arrow(a,b,color=gold,shape=harpoon,thickness=2): ABsom2:=arrow(a+b,color=green,fringe=black): display({a,b,ab1,ab2,absom1,absom2},scaling=constrained, axes=boxed,orientation=[-110,75],labels=[x,y,z]); Zie figuur z y x Figuur 4.1 Toelichting: Er wordt bij het toekennen van de vectoren gebruikgemaakt van meervoudige toekenning. Dat wil zeggen dat er in één commando een rij van toekenningen wordt gedaan (ruimtebesparend, vooral met kolomvectoren!). In figuur 4.1 is te zien dat de vectoren a en b (gedefinieerd als A en B) in de ruimte standaard cilindervormig gepresenteerd worden. Verder is de verschilvector b a (gedefinieerd als AB1), die in het eindpunt van a begint, als dunne pijl getekend (shape=arrow). Er kan dan ook een dikte en lijnstijl aangegeven worden, net als de verschilvector b a (gedefinieerd als AB2), die gewoon in de oorsprong begint en linestyle=3 meegekregen heeft. De vector b die in het eindpunt van a begint (gedefinieerd als ABsom1) heeft de vorm van een harpoen (shape=harpoon) en de somvector a + b (gedefinieerd als ABsom2) is weer standaard als cilindrische pijl getekend, maar nu met een mooi kopje op de pijlpunt met fringe, ter onderscheid van de andere pijlen. In de R 2 is shape=double arow standaard. Zie verder met?arrow in de helpfunctie voor nog meer opties voor het tekenen van vectoren. Klik eens op de grafiek en sleep met de muis om de grafiek te draaien. Ga na dat alle getekende vectoren in één en hetzelfde vlak liggen! Nog andere voorbeelden van vectoren in de ruimte zijn te zien in voorbeelden 8.6 en Matrices Een matrix (meervoud matrices) is een tweedimensionaal getallenschema met specifieke eigenschappen en rekenregels. Als er een matrix ingevoerd moet worden, kan dat op dezelfde manier als bij de vectoren. Het lineaire algebrapakket hoeft niet geactiveerd te worden voor het invoeren van matrices evenals voor eenvoudige lineaire berekeningen en acties met de rechtermuisknop. Het invoeren van matrices gaat rij voor rij als volgt: Matrix([[a,b],[c,d]]); of <<a b>,<c d>>; Beide manieren kunnen door elkaar gebruikt worden. Nog handiger kan het met behulp van paletten. Klik in de menubalk op View en kies vervolgens voor Palettes en dan voor Matrix Palette. Zie figuur 1.2. Je ziet dan een schema
106 94 Handleiding Maple 10 verschijnen waarmee je op de gewenste knop kunt klikken om snel matrices te maken. De invoer is dan op de tweede manier met de <<%? %?>, <%? %?>>-tekens. Alleen de %?-tekens moeten nog ingevuld worden. Met gebruikmaking van de Tab-toets kom je steeds bij het volgende veld om iets in te vullen. Met het aanklikken van de matrix in de uitvoer met de rechtermuisknop, opent zich een menu waarmee veel snelle berekeningen rechtstreeks gedaan kunnen worden. Ook het exporteren van een matrix naar andere applicaties behoort tegenwoordig tot de mogelijkheden. Voorbeeld 4.15 Eenvoudige bewerkingen met matrices en vectoren > restart;a,b,c:=matrix([[1,a],[2,3]]),matrix([[2,4],[b,6]]),vector([3,4]); [ ] [ ] [ ] 1 a A, B, c :=,, 2 3 b 6 4 > A+x*B; [ ] 1+2x a+4x > A.(3*B); > A.c; [ 2+xb 3+6x 6+3ab 12+18a 12+9b 78 [ 3+4a 18 Toelichting: Er wordt vanwege de ruimtebesparing een meervoudige toekenning gedaan, zodat een rij van toekenningen ontstaat in één keer. Verder zijn de matrices A en B en de vector c ingevoerd met behulp van de commando s Matrix en Vector. (Het kan ook met paletten.) Verder is een lineaire bewerking met matrices uitgevoerd: A + xb, een matrixvermenigvuldiging A 3B, (in feite het dotproduct) met behulp van de stip (dot-operator) en ten slotte een vermenigvuldiging van de matrix A met de vector c (dotproduct), ook met behulp van een stip. Zie ook hoofdstuk 8 voor de uitgebreidere berekeningen met matrices en vectoren Arrays Een enkele keer kan het nodig zijn om in plaats van een matrix, vector of lijst, een array te gebruiken. Een array is een soort tabel met als belangrijk voordeel dat de elementen van de tabel aangeduid kunnen worden met zelfgekozen indices. Er hoeft geen pakket geactiveerd te worden voor het gebruik hiervan. Met behulp van indices kunnen elementen van een tabel worden toegekend. Voorbeeld 4.16 Het maken van een array Normaal gesproken lopen natuurlijke indices vanaf 1. Bij het toekennen van array a kunnen we opgeven dat de indices lopen van 1 tot en met 3 met behulp van een range (zie paragraaf 4.3). > restart; a:=array(1..3); > print(a); ] a := array(1..3, []) [a 1, a 2, a 3 ] ]
107 4 Overzicht van wiskundige objecten 95 Toekenningen kunnen eventueel ook achteraf gedaan worden door bijvoorbeeld het eerste en tweede element van deze tabel (array) te definiëren met een meervoudige toekenning. > a[1],a[2]:=5,10; print(a); a 1, a 2 := 5, 10 [5, 10, a 3 ] Bij de array b spreken we af dat de indices lopen van 0 tot en met 3 en als we willen dat het tweede element van deze tabel de waarde 10 krijgt, dan moet dat dus opgegeven worden met behulp vanb[1], want dat is het tweede element! > b:=array(0..3); b[1]:=10; print(b); b := array(0..3, []) b 1 := 10 array(0..3, [ (0) = b 0 (1) = 10 (2) = b 2 (3) = b 3 ]) De tabel wordt nu op een andere manier gepresenteerd dan de tabel a, omdat het geen natuurlijke indices meer zijn. Probeer eens: > c:=array(0..8,[0$4,1$5]);d:=array(1..9,[0$4,1$5]); > e:=array([0$4,1$5]); Als er natuurlijke indices gebruikt worden, hoeven de indices niet gedefinieerd te worden. Er is dus geen verschil tussen de volgende twee invoeren: > p:=array([5,6,7]) en > q:=array(1..3,[5,6,7]). In voorbeeld 9.18 wordt van array gebruikgemaakt bij het schrijven van een korte procedure. Daar is namelijk nodig dat de indices lopen vanaf 0. Op de cd-rom aan het eind van hoofdstuk 9 vind je een toepassing vanarray bij de Fast-Fourier-transformatie. In voorbeeld 11.7 kun je bijvoorbeeld een tabel (array) met grafieken maken Strings Een string is een opeenvolging van tekens die tussen dubbele quotes geplaatst zijn. Een string kan niet als naam ergens voor gebruikt worden. Strings zijn we tegengekomen als extra optie bij het maken van plaatjes met plot. De titel bijvoorbeeld is altijd een string: title = "... ". Verder kan er bij de tekst van de assen iets als string opgegeven worden zoals in voorbeeld 10.7 en figuur 2.6. Het voordeel is dat spaties en tekens allemaal worden meegenomen in de string, precies zoals je deze hebt ingetikt. (Als je toevallig ook nog een dubbele quote in de string wilt hebben, laat deze dan voorafgaan door een backslash.) Wil je beschikken over de string zonder de quotes aan begin en eind, dan kan dat met printf. Zie toepassingen daarvan paragraaf 6.9. Verder is er nog een uitgebreid StringTools-pakket (activeren met with(stringtools)) om met strings te manipuleren.
108 96 Handleiding Maple 10 Voorbeeld 4.17 Aaneenschakelen van strings Dit voorbeeld kan gebruikt worden in de titel van een animatie (voorbeeld 2.34), waarbij steeds de titel aangepast moet worden tijdens de animatie met de veranderende waarde van de frame-parameter k. In de titel verscheen achtereenvolgens het betreffende punt bij steeds veranderende waarde van k. Een substitutie wordt gedaan waarna de benadering in 4 significante cijfers plaatsvindt en het resultaat wordt omgezet naar een string. > restart; v:=[2*cos(t),3*sin(2*t),2*t]; N:=20;k:=4; v := [2cos(t), 3sin(2t), 2t] N := 20 k := 4 > title=cat("het punt is ",convert(evalf[4](subs(t=2*pi/n*k,v)),string)); title = Het punt is [.6174, 1.762, 2.514] Toelichting: Twee strings (of zelfs meer) kun je aan elkaar knopen met cat. De structuur van cat is de volgende: cat(string1,string2,string3) Omzettingen Door middel van omzettingen (conversies) kan het ene object in het andere omgezet worden. Een lijst kan bijvoorbeeld in een vector of in een verzameling omgezet worden en andersom. Het is bijvoorbeeld nodig om bij tubeplot (voorbeeld 2.9) een lijst of een array op te geven, terwijl het verhaal wellicht over een vector gaat. Een eenvoudige omzetting is dan een oplossing. Overigens accepteren de meeste van dit soort commando s tegenwoordig ook vectoren. Voorbeeld 4.18 Het omzetten gebeurt met het commandoconvert waarbij je moet opgeven wat er omgezet moet worden en hoe er omgezet moet worden. Hier wordt een verzameling omgezet in een lijst. > convert({a,b,c},list); [a, b, c] In voorbeeld 4.17 is te zien dat het resultaat van een berekening omgezet kan worden in een string. In voorbeeld 2.4 zie je dat de schrijfwijze van een functie in stukken naar andere schijfwijzen omgezet kan worden. In paragraaf is te zien hoe je een breuk kunt splitsen in kleine stukken (breuksplitsen) met behulp van het omzetcommando convert(...,parfrac). Zie in de index van dit boek bij convert voor nog meer voorbeelden van het omzetcommando.
109 5 Differentiëren 5.1 Inleiding In dit hoofdstuk wordt bij het differentiëren in de voorbeelden veel gebruikgemaakt van grafieken. De kennis van een aantal veelvoorkomende commando s met opties wordt hier bekend verondersteld. Zoek zo nodig iets op in de index of in de inhoudsopgave van dit boek en voor de rest zijn er veel verwijzingen naar andere paragrafen. Het is in ieder geval belangrijk om ook iets te weten over het invoeren van een functie op verschillende manieren. We zullen hier zien wat de voordelen zijn van bijvoorbeeld de pijltjesnotatie van een functie. Zie daarvoor nog eens paragraaf en Zoals je weet, zegt de eerste afgeleide van een functie f iets over de stand (richtingscoëfficiënt) van de raaklijn in een bepaald punt van de grafiek. Als de eerste afgeleide positief is, is de grafiek daar stijgend bij toename van de variabele. Als de eerste afgeleide negatief is, is de grafiek daar dalend bij toenemende waarde van de variabele. Dit geldt niet alleen voor functies van één variabele (y(x)), maar ook voor impliciete functies, gedefinieerd door middel van een vergelijking (in x en y). Zie paragraaf 2.8 voor grafieken van dit soort functies. Deze laatste soort vereist trouwens een speciaal soort commando voor het differentiëren (zie paragraaf 5.6)! Bij relaties in parametervorm of functies in poolcoördinaten (zie paragraaf 2.7 voor grafieken daarvan) moet de eerste afgeleide iets anders geïnterpreteerd worden, omdat je daar te maken > 0, dat de helling van de raaklijn in het x,y-vlak positief is en als dy dx < 0, dat de helling van de raaklijn negatief is. Staat de raaklijn horizontaal, dan is dy dx = 0. Staat de raaklijn verticaal, dan is dx dy = 0. Dit komt in paragraaf 5.5 aan de orde. Voor functies van twee of meer variabelen geldt eigenlijk hetzelfde. Bij een functie van twee variabelen f(x,y) krijgt bijvoorbeeld de afgeleide f x de betekenis van de helling van de raaklijn aan het functievlak in de x-richting, waarbij y constant gehouden wordt. De grafiek van zo n functie is immers een oppervlak in de ruimte. In paragraaf 2.9 komt dat aan de orde bij het maken van grafieken en het differentiëren van een dergelijke functie zie je in paragraaf 5.3. hebt met de afgeleiden van x en y naar t of naar ϕ. Maar nog steeds geldt als dy dx 5.2 De raaklijn aan de grafiek (functie van één variabele) Ga uit van een functie f(x). De vergelijking van de raaklijn in een punt A aan de grafiek, waarvoor geldt x = a, maak je als volgt: het raakpunt A dat op de grafiek ligt, is het punt [a, f(a)] = [a,y A ] en voor de raaklijn door A met richtingscoëfficiënt f (a) geldt: y = f (a)(x a)+ f(a) Voorbeeld 5.1 Snel een raaklijn opstellen In dit voorbeeld wordt gebruikgemaakt van het subpakket Calculus1 van het Student-pakket. Hierin is een commando opgenomen waarmee je op een snelle manier een raaklijn maakt aan een grafiek en tegelijk ook de vergelijking van de raaklijn erbij krijgt in een bepaald punt van de grafiek.
110 98 Handleiding Maple 10 > restart; with(student[calculus1]): f:=x^3-3*x-6: Tangent(f,x=1.5,output=line); 3.75x > Tangent(f,x=1.5,output=plot,view=[0..4,-13..2],title= cat("raaklijn is",convert(y=tangent(f,x=1.5,output=line),string))); Zie figuur raaklijn is y = 3.75*x x f(x) The tangent at x = 1.5 Figuur 5.1 Toelichting: Bij dit commando Tangent met de optie output=line krijg je als uitvoer de formule van de raaklijn en bij output=plot krijg je de grafiek met raaklijn en legenda cadeau. Ook een titel is er automatisch bij. Wil je echter een andere titel, zoals hier gedaan is, dan wordt de standaardtitel overschreven. Let hier op de titel waar gebruikgemaakt is van cat om twee strings te combineren. Zie ook paragraaf 4.12 voor strings. Als er verder nog dingen veranderd moeten worden aan de grafiek, is dat altijd mogelijk. Zie ook op de website behorende bij het boek. Probeer ten slotte ook eens de Tangent Tutor uit dit pakket (activeren met with(student[ Calculus1])) met mogelijkheden voor animaties met de raaklijn. Onderaan in dit Maplet staat het commando voor het Newton-quotiënt (differentiequotiënt). > TangentTutor; Voorbeeld 5.2 Raaklijn met animatie Bij het zelf maken van een raaklijn aan de grafiek van f(x) = x 3 3x 6 in het punt A = (a, f(a)), wordt hier gebruikgemaakt van het invoeren van de functie met de pijltjesnotatie. Het is in deze situatie een krachtig middel om in één keer de raaklijn te formuleren. Kijk nog even na in paragraaf wat de voordelen zijn van een functie met de pijltjesnotatie en hoe de afgeleide daarvan wordt bepaald in voorbeeld > restart; f:=x->x^3-3*x-6; f := x x 3 3x 6 > with(plots): y_lijna:=d(f)(a)*(x-a)+f(a); y lijna := (3a 2 3)(x a)+a 3 3a 6 > animate(plot,[[f(x),y_lijna],x=-4..4, ,color=[black,red], linestyle=[1,2],thickness=[2,2]],a=-4..4);
111 5 Differentiëren 99 Toelichting: Het raakpunt A = (a, f(a)) is verder niet ingevuld omdat a in de vergelijking van de raaklijn als parameter optreedt, zodat het mogelijk is om een animatie te maken waarbij de raaklijn langs de grafiek verschuift. Zie verder voor de grafiek van de raaklijn figuur 5.2 en voor dit soort animaties paragraaf Voorbeeld 5.3 Raaklijn vanuit een punt buiten de grafiek Iets ingewikkelder is het geval van de raaklijn aan de grafiek van f(x) van voorbeeld 5.2, vanuit een punt B = (b,y B ) dat níet op de grafiek ligt. Zie figuur 5.2. Stel dat de raaklijn de grafiek van f(x) raakt in het punt (a 1, f(a 1 )), dan kan de raaklijn als volgt opgesteld worden. y = f (a 1 )(x a 1 )+ f(a 1 ) Deze raaklijn moet voor zekere waarde van a 1 door bijvoorbeeld het punt B = (3,30) gaan. Zie ook de animatie in voorbeeld 5.2. Substitueer dit punt B = [b,y B ] in de bovenstaande vergelijking en je krijgt de vergelijking: y B = f (a 1 )(b a 1 )+ f(a 1 ) waarin a 1 als enige onbekende zit als het punt B = [b,y B ] bekend is. Voor de volgende sessie moet eerst voorbeeld 5.2 nog weer geactiveerd worden. > b,yb:=3,30.0; verg1:=yb=d(f)(a1)*(b-a1)+f(a1); b, yb := 3, 30.0 verg1 := 30.0 = (3a1 2 3)(3 a1)+a1 3 3a1 6 > oplossinga1:=fsolve(verg1,{a1}); oplossinga1 := {a1 = } > assign(oplossinga1); y_lijnb:=d(f)(a1)*(x-a1)+f(a1); y lijnb := x > plot({f(x),y_lijnb},x=-4..4,y= ); Toelichting: Nadat de waarde van de enige onbekende a 1 berekend is met fsolve (met accolades om een vergelijking als output te krijgen zie voorbeeld 3.16 en paragraaf 3.3.2), wordt deze toegekend met assign, zodat deze waarde vanaf dat moment aan a 1 gekoppeld blijft. Om de complete figuur 5.2 zelf te maken met beide raaklijnen voor a = 1.5 en tekst erbij is onderstaande invoer nodig. Doe dan wel eerst de vorige twee voorbeelden achter elkaar opnieuw zonder restart te geven en vervolgens de volgende input. (Op de cd-rom staat de complete sessie.) > a:=1.5:p1:=plot([f(x),y_lijna,y_lijnb],x=-4..4,y= ,color=black, linestyle=[1,2,2]): p2:=plot({[b,yb],[a,f(a)],[a1,0]},style=point, symbolsize=15,color=black): with(plots):tekst:=textplot({[2.8,33,b], [1.5,-10,A],[3.5,22,"f"],[1.2,12.5,"lijn_B"],[-1.5,-22,"lijn_A"], [a1,3,"a1"],[a1,f(a1)-2.5,"f(a1)"]},font=[times,italic,14]): display({p1,p2,tekst},labels=[x,y],title=raaklijnen); Zie figuur De partiële afgeleide (functies van twee variabelen) Als je de functie f van twee variabelen als uitdrukking invoert, berekent Maple bij het commandodiff(f,x) automatisch de partiële afgeleide van f naar x. Dat wil zeggen: als je
112 100 Handleiding Maple 10 a1 f(a1) lijn_a raaklijnen Y f lijn_b X A B Figuur 5.2 naar x differentieert, dat dan de andere variabele(n) constant gehouden worden. Als je de functie invoert met de pijltjesnotatief:(x,y)->..., roep dan de functie aan met f(x,y), het differentiëren gaat dan weer op dezelfde manier. Nog mooier is de volgende manier (met de functie opgegeven in pijltjesnotatief:(x,y)->...) voor de afgeleide naar de eerste variabele: D[1](f) en voor de afgeleide naar de tweede variabeled[2](f). Daarvan wordt in de volgende voorbeelden gebruikgemaakt. In een onderzoekje van een functie van twee variabelen worden de partiële afgeleiden geïnterpreteerd. Een dergelijke functie heeft als grafiek een functievlak in de R De richtingsafgeleide De betekenis van de richtingsafgeleide is de toename van de functie f(x,y) als je in een bepaalde richting loopt in het x,y-vlak. Het hoeft niet altijd een richting te zijn die parallel loopt aan een van de assen! Het gemakkelijkst te berekenen zijn de hellingen van het functievlak (richtingsafgeleiden) in de x- en y-richting. Deze worden bepaald met de partiële afgeleiden f x en f y waarbij respectievelijk de y en de x constant gehouden worden. Voorbeeld 5.4 Richtingsafgeleide met een Maplet Ga eerst eens uit van de functie: f(x,y) = 2+arctan(x(y+2)). Op het oppervlak van de grafiek van f(x,y) kun je nu het stijgen en dalen in x- en y-richting gaan bestuderen en eventueel in willekeurige andere richtingen. Zie paragraaf 2.9 voor het maken van grafieken in de R 3 en het veranderen van de presentatie van de grafiek. In het subpakket MultivariateCalculus van het Student-pakket is een interessante mogelijkheid om de richtingsafgeleiden te bekijken met behulp van een Maplet waarin allerlei instellingen mogelijk zijn. > restart; f:=(x,y)->2+arctan(x*(y+2)); > Student:-MultivariateCalculus:-DirectionalDerivativeTutor(f(x,y)); Zie figuur 5.3. Bekijk daarin bijvoorbeeld eens in punt (1,1) de toename van de functie in de richtingen [1, 0] (x-richting) en [0, 1] (y-richting). De waarde die bij Actual Value wordt gegeven in het Maplet, is steeds de waarde van de richtingsafgeleide en is tevens de waarde waarmee de functie toeneemt als je vanuit punt [1,1] vertrekt en in de opgegeven richting loopt in het x,y-vlak. Als deze waarde negatief is, is er sprake van een afname van de functie en moet je in de tegenovergestelde richting lopen voor een toename van de functie.
113 5 Differentiëren 101 Vertrek ook eens vanuit hetzelfde punt (1, 1) en loop in de richting [3, 1]. In het Maplet van figuur 5.3 zie je dat de waarde van de helling van de functie gelijk is aan en dat je in deze richting dan te maken hebt met juist de grootste toename van de functie, gerekend vanuit het punt (1,1). Het hellingsvlak (raakvlak) is in het Maplet tegelijk ook gevisualiseerd. Figuur 5.3 Breng dit in verband met de richtingsafgeleide in de x-richting, die je kunt berekenen door f f x in het punt (1,1) in te vullen en de richtingsafgeleide y in de y-richting ook in het punt (1,1) in te vullen. Het meest praktisch is dan om de functie in pijltjesnotatie te hebben ingevoerd, zodat meteen de waarde van deze richtingsafgeleide kan worden opgevraagd. > D[1](f)(1,1); De uitvoer hiervan is 0.3 > D[2](f)(1,1); De uitvoer hiervan is 0.1 Voor het berekenen van de helling in een willekeurige andere richting is enige kennis van berekeningen met vectoren nodig. Kijk nu in het punt ( 1,1) en loop in de y-richting. In die richting is er een afname van de functie. > D[2](f)(-1,1); De uitvoer hiervan is 0.1. Je had dus eigenlijk in de negatieve y-richting moeten lopen om een toename van de functie te ondervinden Gradiënt Na uitproberen van voorbeeld 5.4 blijkt nu dat als je in een punt van het functievlak van de functie f(x,y) precies in de richting loopt van de vector [ f x, f y ] in het x,y-vlak, dat je dan juist goed loopt om de grootste toename van de functie te ondervinden. Het functievlak heeft in die richting de grootste helling. Deze vector wordt de gradiënt in dat punt genoemd van de functie van twee variabelen. In ieder punt van het x,y-vlak is zo n gradient te bepalen. Dit laten we zien in het volgende voorbeeld. Voorbeeld 5.5 Verschillende aspecten van de gradiënt Uitgaande van een functie van twee variabelen f(x,y) = x 3 + y 3 6xy die weer met de pijltjesnotatie is ingevoerd, kan de gradiënt gevisualiseerd worden in een bepaald punt.
114 102 Handleiding Maple 10 Neem bijvoorbeeld het punt [1, 1] en vul dat in de partiële afgeleiden f volgende sessie is een en ander na te gaan: > restart; f:=(x,y)->x^3+y^3-6*x*y; > D[1](f)(1,-1); D[2](f)(1,-1); f := (x, y) x 3 + y 3 6xy 9 3 x en f y > Student:-MultivariateCalculus:-Gradient(f(x,y),[x,y]=[1,-1], output=plot,axes=boxed,title="in de richting van de gradiënt is de grootste toename van de functie", gradientoptions=[color=black], functionoptions=[style=patch,orientation=[-50,75],color=gray]); in. Met de Zie figuur 5.4. In de richting van de gradiënt is de grootste toename van de functie x y 2 Figuur 5.4 > Student:-MultivariateCalculus:-DirectionalDerivative(f(x,y), [x,y]=[1,-1],[9,-3], output=value); 3 10 > with(plots): gradplot(f(x,y),x=-2..3,y=-2..3,arrows=large, title="gradiënt van de functie f(x,y)"); Zie figuur 5.5. Toelichting: Met het commando gradplot uit het plotpakket is de gradiënt goed zichtbaar te maken. Vergelijk dit ook eens met voorbeeld 8.7 waarbij ook een veld met pijlen getekend wordt. Probeer zo nodig nog een en ander uit met behulp van het Maplet van voorbeeld 5.4 voor een beter begrip. Als de partiële afgeleiden naar x en y bekend zijn in een punt, is de richting van de grootste toename van de functie ook bekend. Deze vector wordt dus de gradiënt genoemd in dat punt en is gelijk aan de vector [ f ]. Deze ligt in het x,y-vlak en de grootte van deze vector geeft meteen aan hoe groot de helling van het raakvlak aan het functievlak is in deze richting. Voor het maken van het raakvlak wordt verwezen naar voorbeeld De helling x, f y
115 5 Differentiëren 103 gradiënt van de functie f(x,y) 3 y x 1 2 Figuur 5.5 (richtingsafgeleide) van de functie in de richting van de gradiënt is namelijk gelijk aan de lengte van deze gradiënt-vector. De berekening kan ook gedaan worden met het commando DirectionalDerivative uit het Students-subpakket MultivariateCalculus. Hierbij moet de functie opgegeven worden, het punt én de richting waarin de richtingsafgeleide berekend moet worden. Geef dan als optie output=value als je dus geïnteresseerd bent in de waarde ervan. Natuurlijk kan ook direct met Pythagoras deze waarde berekend worden. Neem dan f x 2 + f 2 y voor de toename van de functie in de richting van de gradiënt. De gradiënt van de functie is het beste zichtbaar te maken metgradplot uit het plotpakket. We zien in deze grafiek van figuur 5.5 met allemaal pijlen in het x,y-vlak, dat hoe groter de pijl, des te sterker de functie toeneemt in juist de richting van die pijl. Dit is dan ook meteen de sterkste toename van de functie in het betreffende punt. Goed te zien is dat in de punten [0,0] en [2,2] de functie eigenlijk niet toeneemt. Het raakvlak zal in deze punten dan ook horizontaal lopen. Onderzoek een en ander eens door gewoon de grafiek van de functie te plotten metplot3d(f(x,y),x=...,y=...) met intervallen voor x en y naar keuze. Informatie over raakvlakken aan dit soort functievlakken is te vinden in paragraaf Maximum, minimum en zadelpunt Uitgaande van de functie van twee variabelen van voorbeeld 5.5 waar de gradiënt in figuur 5.5 in elk punt van het x,y-vlak gevisualiseerd is, valt op dat in de punten [0,0] en [2,2] de gradiënt gelijk is aan 0. Het betekent dat in een dergelijk punt de functie even niet toe- of afneemt, ook wel stationair punt genoemd. Een dergelijk punt vraagt om nader onderzoek, echter deze punten moeten wel eerst gevonden worden. Voorbeeld 5.6 Stationaire punten van een functie van twee variabelen Voor de punten waarvoor geldt dat de raaklijn horizontaal loopt in de richting van de assen (stationair punt), moet gelden dat f x = 0 én f y = 0. Dat wil dus zeggen dat het raakvlak aan het functievlak horizontaal loopt. Gevraagd wordt nu in welke punten (x, y) de raaklijn aan het functievlak in beide richtingen horizontaal loopt. Je zoekt in feite naar bergtoppen en -dalen; maxima en minima van de functie en nog eventuele andere punten waar het raakvlak aan het functievlak horizontaal loopt. Uitgaande van voorbeeld 5.5 zou je de berekeningen nog wel uit het hoofd kunnen doen, echter de mogelijkheden van dit soort berekeningen met
116 104 Handleiding Maple 10 de computer worden hier duidelijk gemaakt voor het geval de berekeningen ingewikkeld worden. Voer voor het gemak ergens een decimale punt in en zet de displayprecision wat lager. Merk op hoe de tweede afgeleide gemaakt kan worden als de functie is ingevoerd met de pijltjesnotatie. > restart; interface(displayprecision=3):f:=(x,y)->x^3+y^3-6.0*x*y; fx:=d[1](f)(x,y); fy:=d[2](f)(x,y); > solve({fx=0,fy=0},{x,y}); f := (x, y) x 3 + y xy fx := 3x y fy := 3y x {x = 0.000, y = 0.000}, {x = 2.000, y = 2.000}, {x = I, y = I}, {x = I, y = I} > plot3d(f(x,y),x=-5..5,y=-5..5,axes=boxed,orientation=[-45,75], title="3d-grafiek van f(x,y)"); plot3d(f(x,y),x=-1..1,y=-1..1,axes=boxed, orientation=[-105,75], style=contour,contours=16,title="[0,0] is zadelpunt"); plot3d(f(x,y),x=1..3,y=1..3,axes=boxed,orientation=[-110,55], style=contour,contours=30,title="[2,2] is lokaal minimum"); d-grafiek van f(x,y) x y y 0 [0,0] is zadelpunt x y [2,2] is lokaal minimum x > minimum:=f(2,2); minimum := 8.0 Toelichting: Eerst worden de partiële afgeleiden ( f x en f y ) voorbereid. De oplossing van het stelsel vergelijkingen { f x = 0, f y = 0} geeft de stationaire punten. Er zijn ook complexe getallen bij deze oplossing. Deze complexe waarden zijn voor ons probleem niet interessant; we zoeken namelijk naar reële waarden voor x en y waarvoor de grafiek een dal of een berg vertoont. Het blijkt dus dat de punten (0,0) en (2,2) als mogelijke extrema in aanmerking komen. In de buurt van deze punten kan de grafiek van f(x,y) getekend en onderzocht worden door de intervallen bij het plotcommando aan te passen. In de buurt van het punt (2, 2) lijkt het inderdaad alsof je daar een dal hebt. Gebruik eens de optie style=contour bij het plotten, waarbij het mogelijk is de dichtheid van de contouren te regelen met de optie contours=... Standaard worden er 10 contourlijnen gegeven. In de buurt echter van het punt (0,0) is er geen dal en ook geen berg op het oppervlak te zien: het lijkt alsof in de x-richting de grafiek in de buurt van dat punt eerst daalt, daarna even horizontaal loopt en daarna weer verder daalt. In de y-richting is het net andersom. Zo n punt op het oppervlak van de grafiek wordt wel zadelpunt genoemd. Laat de grafiek op je scherm wat draaien met behulp van de oriëntatie-parameters ϑ en ϕ of met het slepen van de muis, zodat je het geheel goed kunt bestuderen. Het blijkt dus dat het punt (2,2) het enige punt is
117 5 Differentiëren 105 waar een extreme waarde van de functie f(x, y) optreedt. Ten slotte kun je nog de waarde van de functie in dit dal berekenen en je kunt nu concluderen dat in het punt (2, 2) een minimum optreedt met waarde f(2, 2) = 8. Voorbeeld 5.7 Snelle berekeningen van stationaire punten Met sommige andere commando s zijn nog enkele elegante en snelle berekeningen mogelijk: Ga uit van voorbeeld 5.6. In het subpakket MultivariateCalculus van het Student-pakket zit nog een handige manier om de vermoedelijke extrema van de functie te checken. > restart; interface(displayprecision=3):f:=(x,y)->x^3+y^3-6.0*x*y; f := (x, y) x 3 + y xy > Student:-MultivariateCalculus:-SecondDerivativeTest(x^3+y^3-6.0*x*y, [x,y]=[[0,0],[2,2]]); LocalMin = [[2, 2]], LocalMax = [], Saddle = [[0, 0]] > Optimization:-Minimize(f(x,y)); [ 8.000, [x = 2.000, y = 2.000]] Toelichting: Door middel van het oplossen van het stelsel vergelijkingen { f x = 0, f y = 0}, kun je achter de mogelijke extrema komen (voorbeeld 5.6) en deze punten vervolgens checken met de zogenoemde SecondDerivativeTest. Enige kennis over de theorie van de tweede afgeleide is dan misschien wel aan te bevelen. In één keer kan op deze manier informatie over meer punten tegelijk worden opgevraagd. Deze test is ook uitermate krachtig in het geval je een functie van meer dan twee variabelen hebt. Een grafisch onderzoek is dan immers niet meer mogelijk! Ten slotte is het ook nog mogelijk direct het minimum op te vragen van een functie van meer variabelen met een commando uit het Optimization-pakket, met Minimize. Je krijgt dan direct het minimum, samen met het punt waar het minimum optreedt. Meer over dit pakket staat uitgebreid in hoofdstuk 7 paragraaf Functies in stukken Voor de functies in stukken is in hoofdstuk 2 de stapfunctie geïntroduceerd, zie paragraaf Deze wordt ook wel de eenheidsstap of Heaviside genoemd. Ga nog even na hoe deze bij Maple werd ingevoerd met behulp van Heaviside. Bekijk ook hoe het commando PIECEWISE (voorbeeld 2.4 ) werkt bij de functies in stukken Eenheidspuls (Dirac-puls) Voor de afgeleide van de functie in stukken hebben we de eenheidspuls nodig, ook wel bekend onder de naam Dirac-puls of deltafunctie en in de literatuur te vinden met de notatie δ(x). Bij Maple is deze eenheidspuls bekend onder de naamdirac. De Dirac-puls δ(x) wordt gedefinieerd als overal gelijk aan nul, behalve in x = 0, daar is δ(x) gelijk aan 1. Je zou δ(x) voor kunnen stellen als een heel erg spits driehoekje bij de oorsprong, gestippeld in figuur 5.6. Het is dan ook niet voor niets dat deze functie ook wel de deltafunctie wordt genoemd. Eigenlijk moet het nog een veel spitsere driehoek zijn, maar dan zie je niets meer. Symbolisch wordt de Dirac-puls wel aangeduid met een pijltje. Zie figuur 5.6. De oppervlakte onder de puls is per definitie gelijk aan 1, dus hoe smaller hoe hoger! Theoretisch oneindig smal en oneindig hoog. De Dirac-puls heeft als eigenschap dat
118 106 Handleiding Maple 10 delta(x-1) δ ( 1 x ) δ( x ) δ ( x 1 ) δ ( x 2 ) Figuur 5.6 R δ(x)dx = 1. Deze Dirac-puls hoeft niet altijd in x = 0 plaats te vinden. De puls δ(x 1) is bijvoorbeeld geplaatst bij x = 1. Je kunt de Dirac-puls bij Maple invoeren met Dirac(x) (met een hoofdletter). Als je deze zou tekenen, zie je dat deze functie overal gelijk is aan 0; de grafiek hiervan levert dus niet veel op. Je kunt deze eenheidspuls ook definiëren als de afgeleide van de (Heaviside) stapfunctie. Probeer maar eens?dirac om in de helpfunctie te komen. De stapfunctie heeft bij de stap een afgeleide die heel even gelijk is aan. Dit is eigenlijk precies wat de bedoeling is van de puls; heel kort is deze theoretisch gelijk aan oneindig. Neem als voorbeeld de eenheidsstap die begint bij x = 1, dus Heaviside(x 1) en bereken de oppervlakte onder de grafiek van de afgeleide hiervan door middel van integratie. Je berekent dan de oppervlakte onder de puls. > int(diff(heaviside(x-1),x),x=-infinity..infinity); De uitvoer levert Differentiëren van een functie in stukken Het differentiëren van een functie die uit meer stukken bestaat hoeft geen enkel probleem te zijn. Echter bij de overgangen zal de afgeleide vaak niet gedefinieerd zijn. Meestal vertoont de grafiek in de overgang knikken of is in de overgangen zelfs discontinu. De raaklijn is daar dan niet gedefinieerd en de afgeleide zal een sprong vertonen. Dit zien we dan ook in de piecewise-notatie. Als we de piecewise-notatie met convert omzetten naar de Heavisidenotatie, zien we bij de afgeleide Dirac-pulsen ontstaan. Met de Heaviside-notatie wordt er het beste gerekend door het programma. Heb je dus een absolute waardefunctie, converteer die dan naar een Heaviside-notatie als er gedifferentieerd moet worden. Voorbeeld 5.8 De afgeleide van een functie in stukken > restart; f:=piecewise([-x,x<0],[x^2,x<=1],[2-x^2,x>1]); x x < 0 f := x 2 x 1 2 x 2 1 < x > f :=diff(f,x);
119 5 Differentiëren x < 0 undefined x = 0 f' := 2x x < 1 undefined x = 1 2x 1 < x > convert(f,heaviside); x+xheaviside(x)+x 2 Heaviside(x) 2x 2 Heaviside( 1+x) > convert( f,heaviside); + 2Heaviside( 1+x) 1 + Heaviside(x) + undefined Dirac(x) + 2 x Heaviside(x) 4xHeaviside( 1+x)+undefinedDirac( 1+x) > simplify(%,{dirac(x)=0,dirac(x-1)=0}); 1+Heaviside(x)+2xHeaviside(x) 4xHeaviside( 1+x) > plot([f, f ],x=-3..3,discont=true,thickness=[3,1], color=[black,blue],legend=["f","f "]); Zie figuur 5.7. differentiëren van een functie in stukken x f f Figuur 5.7 Toelichting: Nadat de functie in stukken is ingevoerd metpiecewise, kun je deze het beste omzetten naar de Heaviside-notatie voordat er verder gerekend wordt. Metéén zonder fouten invoeren van de functie in Heaviside-notatie is vrij lastig! Voor de naam van de afgeleide f is gewerkt met quotes, zie paragraaf 6.3. In het plotcommando zijn functie en afgeleide in de vorm van een lijst meegegeven om de specificatie voor kleur, lijndikte en legenda goed te kunnen definiëren. Een en ander is ook met het menu met de rechtermuisknop in te stellen. Het is duidelijk dat f niet bestaat in x = 0 en x = 1. Er is dan ook de optie discont=true meegegeven. Zie ook voorbeeld Je ziet verder dat in de uitvoer van de piecewise-notatie van f twee regels zijn komen te staan met undefined. Maple doet dat automatisch en het levert verder niets op. Je kunt ze
120 108 Handleiding Maple 10 wegkrijgen met een vereenvoudigingscommando. Het reageert gewoon op de gegenereerde Dirac-functies die zijn ontstaan bij het differentiëren in de punten waar de afgeleide niet bestaat. Deze Dirac-functies kun je zien als je converteert naar de Heaviside-notatie. Het invoeren met PIECEWISE is eigenlijk gemakkelijker en verdient de voorkeur, omzetten kan altijd door de computer gedaan worden. 5.5 Differentiëren van een vectorfunctie De grafiek van een relatie in parametervorm wordt ook wel vectorfunctie genoemd of parameterkromme. In het platte vlak waarbij x en y gegeven zijn als functies van een parameter (meestal t), kunnen we de raaklijn formuleren. Als voorbeeld hadden we in paragraaf 2.6: x(t) = t 3 3t en y(t) = t 2 1. In deze paragraaf staan meer voorbeelden van parameterkrommen om mee te oefenen. De grafiek kun je nu zelf maken. Het eindpunt van de vector s(t) = [x(t),y(t)] is een plaatsvector. Wat doe je nu als je dit soort functies gaat differentiëren? In feite bepaal je van de plaatsvector s(t) de afgeleide (naar t) en dan krijg je de snelheidsvector: v(t) = [ẋ(t),ẏ(t)]. Je hebt alle kentallen van de vector gedifferentieerd naar t. De lengte van de verkregen snelheidsvector v(t) geeft de grootte van de snelheid aan en de richting van deze vector geeft de richting van de snelheid aan. Er wordt naar paragraaf verwezen voor het omgaan met vectoren in dit verband. De snelheid is altijd langs de baan (die het eindpunt van de plaatsvector beschrijft) gericht, dus de richting van de snelheid is tegelijk de richting van de raaklijn aan de kromme. Bij gewone expliciete functies wilde je vaak weten wat de richting van de raaklijn was in elk punt van de grafiek. Dat kan nu dus ook bij vectorfuncties in de R 2. Je hoeft dan alleen maar voor de richtingscoëfficiënt (rc) naar de richting van de snelheidsvector v te kijken; de verhouding van de kentallen van v. rc(t) = dy dy dx = dt In feite is dit de afgeleide van y naar x, hoewel y niet als functie van x gegeven was. Merk op dat deze richtingscoëfficiënt een functie is van t. Voorbeeld 5.9 Vectorfunctie en richting van de baan Gegeven is de vectorfunctie x(t) = t 3 3t en y(t) = t 2 1. Bepaald wordt de richtingscoëfficiënt van de raaklijn in het punt van de grafiek (zie figuur 5.8) waarvoor geldt t = 2.5. > restart; x,y:=t^3-3*t,t^2-1; > rc:=diff(y,t)/diff(x,t); > rc1:=subs(t=2.5,rc); dx dt = ẏ ẋ x, y := t 3 3t, t 2 1 t rc := 2 3t 2 3 rc1 := > plot([x,y,t=-3..3],scaling=constrained); Zie figuur 5.8.
121 5 Differentiëren 109 x := t 3 3 t y := t = -3 t 2 1 v(2.5) rc = 0.3 t = 1 t = -1 t = 3 t = 0 t = 2.5 Figuur 5.8 Toelichting: Er wordt gebruikgemaakt van meervoudige toekenning, zodat de toekenningen van x en y op één regel komen te staan. In het punt waarvoor geldt t = 2.5, is de richtingscoëfficiënt van de raaklijn aan de baan berekend. In figuur 5.8 is er met scaling=constrained voor gezorgd dat de eenheden op de horizontale en verticale as gelijk zijn. Verder is er aan de grafiek een aantal waarden van t toegevoegd met behulp van een ander programma, zodat je kunt zien hoe het verloop van de kromme is bij toenemende waarde van t. Zie ook paragraaf 2.12 hoe je dit soort grafieken gemakkelijk kunt animeren. 5.6 Differentiëren van impliciete functies Het plotten van impliciete functies wordt in hoofdstuk 2 paragraaf 2.8 toegelicht. Bij het rekenen met impliciete functies is het van belang te beseffen dat door middel van een vergelijking y (impliciet) als functie van x kan worden opgevat. Zo n vergelijking moet niet verward worden met een functie van twee variabelen! Een voorbeeld van een impliciete functie: C : 3x 2 + 2xy+y 2 = 6,Er is een commando om snel de impliciete functie te differentiëren. Daarbij moet er goed beseft worden dat bij het opgeven van een vergelijking met twee variabelen er een afhankelijke en een onafhankelijke variabele aangewezen moet worden. Dit is des te belangrijker in het geval er parameters in de vergelijking voorkomen. Om niet in de war te raken, moet je eigenlijk goed opschrijven welke variabele als functie van welke onafhankelijke variabele opgevat moet worden. Het commando is implicitdiff en heeft als structuur: implicitdiff(c,y(x),x). Het betekent dat de impliciete functie in de vorm van een vergelijking C met daarin opgevat dat y een functie is van x en dat er gedifferentiëerd moet worden naar x. Als er verder nog letters in de vergelijking staan, worden die automatisch als constanten opgevat. Zie voor meer voorbeelden van impliciete functies op de cd-rom bij hoofdstuk 2 en voor raaklijnen aan de impliciete functie op de cd-rom bij deze paragraaf.
122 110 Handleiding Maple Differentiëren van functies met poolcoördinaten De grafieken van functies met poolcoördinaten zijn in feite ook op te vatten als parameterkrommen (zie paragraaf 5.5). Als de straal r een functie is van de hoek ϕ, kun je x en y schrijven als functies van ϕ. Er is dus eigenlijk maar één vrijheidsgraad (ϕ) en dat impliceert dat er sprake is van een kromme. r(ϕ) { x(ϕ) = r(ϕ)cos(ϕ) y(ϕ) = r(ϕ)sin(ϕ) rc = dy dx = Vervolgens kan de richtingscoëfficiënt worden bepaald van raaklijnen aan de grafiek volgens de methode van paragraaf 5.2: raakli jn : y = rc(x x A )+y A Zie voor meer voorbeelden van functies met poolcoördinaten op de cd-rom. In het volgende voorbeeld wordt het gebruik van spreadsheets binnen Maple functioneel toegepast. In paragraaf 1.7 is daarover al een introductie gegeven. Voorbeeld 5.10 Raaklijn aan een functie met poolcoördinaten met gebruik van spreadsheet Gegeven de functie in poolcoördinaten r(ϕ) = 9 8 cos(ϕ). De vergelijking van de raaklijn aan de grafiek (zie figuur 5.10) in het punt A, waarvoor geldt dat de hoek ϕ = π 4, wordt later geformuleerd en in de grafiek gevoegd. Eerst wordt de functie r afhankelijk van de hoek ϕ geformuleerd en ook alvast het plotpakket geactiveerd. Deze toekenning wordt in de spreadsheet binnen Maple meegenomen! > restart; with(plots): r:=9-8*cos(phi); r := 9 8cos(φ) Maak nu een spreadsheet in Maple met Insert-Spreadsheet die eruitziet zoals in figuur 5.9. dy dϕ dx dϕ Figuur 5.9 Voor een introductie van spreadsheets met tips voor het gebruik ervan wordt verwezen naar paragraaf 1.7. Geef de spreadsheet een naam door erop te klikken met de rechtermuisknop en naar Properties te gaan. Stel dan meteen ook het aantal decimalen in dat getoond wordt. Het eventueel vooraf instellen van de displayprecision heeft geen effect op het aantal decimalen
123 5 Differentiëren 111 dat je ziet in de spreadsheet; gebruik daarvoor dus de instellingen van de spreadsheet zelf. In de spreadsheet van figuur 5.9 wordt alles ingevuld wat je nodig hebt om de raaklijn te maken op de volgende manier: A B C 1 phi Pi/4 2 r(phi) r fnormal(subs( A1= C1, B2)) 3 x-coördinaat B2*cos( A1) fnormal(subs( A1= C1, B3)) 4 y-coördinaat B2*sin( A1) fnormal(subs( A1= C1, B4)) 5 richtingscoëfficiënt diff( B4, A1)/diff( B3, A1) subs( A1= C1, B5) 6 raaklijn in (x,y) C5*(X- C3)+ C4 Rechts bovenaan wordt de waarde van de hoek ϕ ingevoerd. In de spreadsheet wordt deze waarde afgerond en tegelijk vertonen de cellen die afhankelijk zijn van deze waarde een raster. In de spreadsheet is ook het commando fnormal opgenomen voor het geval de berekening uitkomt met zogenoemde fuzzy zero s. Er worden immers afrondingen gemaakt onderweg! Zodra je alles doorgerekend hebt, verdwijnt het raster en kun je de uiteindelijke formule voor de raaklijn, de inhoud van cel B6, naar het plotcommando (p2) in het werkblad verplaatsen. Het valt misschien op dat bij deze laatste actie wel het volledig aantal significante cijfers wordt meegenomen, zodat de raaklijn niet in afgeronde vorm gebruikt wordt voor verdere berekeningen. > p1:=polarplot([r,phi,phi=0..2*pi],thickness=2,scaling=constrained): p2:=plot( *x ,x=-20..4,y= ): display({p1,p2},title="raaklijn aan de grafiek met poolcoördinaten berekend met een spreadsheet",labels=["x","y"]); raaklijn aan de grafiek met poolcoördinaten berekend met een spreadsheet 10 5 Y X 5 10 Figuur 5.10 Zie figuur 5.10 waarin weer verschillende soorten grafieken (waaronderpolarplot uit het plotpakket) in één figuur gemaakt zijn met display (paragraaf 2.10). 5.8 Machtreeksontwikkeling Het is bekend dat iedere differentieerbare functie van x rond een gekozen punt, bijvoorbeeld x = a te schrijven is als een machtreeks (som van een rij van positieve gehele machten
124 112 Handleiding Maple 10 van (x a)). De machtreeks benadert de functie in de buurt van dat gekozen punt. In het algemeen geldt: hoe meer termen van de machtreeks worden meegenomen, des te beter wordt de functie benaderd. Aan een dergelijke reeksontwikkeling ligt het theorema van Taylor ten grondslag: f(x) f(a)+(x a) f (x a)2 (a)+ f (x a)n (a)+... f (n) (a) 2 n! De coëfficiënten van (x a) n kunnen berekend worden met behulp van de n-de afgeleide f (n). Voor het ontwikkelen van een machtreeks bestaat het commando series, waarbij opgegeven moet worden om welke functie f het gaat en in de buurt van welk punt x = a er ontwikkeld moet worden. Als derde optie kan de orde van de ontwikkeling aangegeven worden (standaard is de orde 6). De reeks, met het symbool O(..) dat de restterm vertegenwoordigt, kan met het omzetcommando convert omgezet worden in een gewone polynoom zonder restterm, zodat er verder van alles mee gedaan kan worden. Voorbeeld 5.11 Machtreeksontwikkeling van een functie > restart; f:=x*exp(-x/7);a:=4; > series(f,x=0); f := xe ( x 7 ) a := 4 x 1 7 x x x x5 + O(x 6 ) > f1:=convert(%,polynom); f1 := x 1 7 x x x x5 > f2:=convert(series(f,x=0,3),polynom); f2 := x 1 7 x2 > Digits:=3: f3:=convert(series(f,x=evalf(a),4),polynom); f3 := x (x 4.) (x 4.) 3 > p1:=plot([f,f1,f2],x=-2..12,-4..5,linestyle=[1,2,3], thickness=[4,1,1],legend=["f","orde 5","orde 2"]): p2:=plot([[0,0]],style=point,symbol=circle,symbolsize=20,legend="punt"): with(plots): display({p1,p2},title= cat("reeksontwikkeling van functie f = ",convert(f,string)," in de buurt van x = 0")); In deze figuur zullen de grafieken van de polynomen f 1 en f 2 te zien zijn samen met de functie f. > p3:=plot([f,f3],x=-7..12,-18..4,linestyle=[1,2],thickness =[4,1]): p4:=plot([[a,subs(x=a,f)]],style=point,symbol=circle,symbolsize=20): with(plots): display({p3,p4},title= cat("reeksontwikkeling (orde 3) van functie f = ",convert(f,string)," in de buurt van x = ", convert(a,string))); In deze figuur zal de grafiek van de polynoom f 3 te zien zijn samen met die van f. Zie verder bij de toelichting. > P:=seq(plot([convert(series(f,x=0,A),polynom),f],x=-2..30,y=-2..4, color=[black,green],thickness=[1,3],title=
125 5 Differentiëren 113 cat("de orde is ",convert(a-1,string))),a=1..16): display([p],insequence=true); In deze animatie is de frame-parameter de orde van de benaderingspolynoom. In een filmpje worden de grafieken van steeds nauwkeuriger benaderingspolynomen getoond. Zie ook hoofdstuk 2 voor informatie om grafieken en animaties te maken. Toelichting: Na het invoeren van de functie en het toekennen van de waarde van a, kunnen de machtreeksen ontwikkeld worden. De waarde van a zal worden gebruikt voor het punt waar de functie ontwikkeld is om de reeks van f 3 te krijgen. Als er verder niets wordt meegegeven met het commando, is standaard de reeksontwikkeling van de orde 6 rond het punt x = 0. In feite komt het erop neer dat de polynoom f 1, die je krijgt na het converteren, van de orde 5 is, want de restterm die aangeeft dat er tot de zesde orde is ontwikkeld, halen we met deze conversie weg. De polynoom f 2 is verkregen na ontwikkelen rond x = 0 tot orde 3. Je krijgt daarmee een kwadratische vorm als de restterm wordt weggehaald. Het is niet beslist noodzakelijk om altijd rond x = 0 te ontwikkelen. Bij f 3 is de polynoom verkregen na een vierde ordeontwikkeling van de functie rond x = 3.0 (dat is dus de waarde van a) en in één opdrachtregel geconverteerd naar een derdegraads vorm. Omdat hier de decimale punt ingevoerd werd, is de polynoom f 3 nu ook in decimale vorm verkregen (met 3 significante cijfers omdat Digits op 3 gezet is. Een en ander is ten slotte in de grafiek zichtbaar gemaakt die hier niet afgedrukt is. Let speciaal eens op het robuuste programmeren van de grafieken. Als je bijvoorbeeld aan het begin van de sessie een iets andere functie neemt en je neemt de waarde van a ook iets anders, dan wordt automatisch al het volgende aangepast, ook de plaatjes, inclusief de titels. Zie voor het omgaan met strings voor de titel van een plaatje paragraaf Figuur 5.11 Voorbeeld 5.12 Reeksontwikkeling met een Maplet Probeer ook eens het volgende Maplet (figuur 5.11) met dezelfde functie als in het hiervoor genoemde voorbeeld om de reeksontwikkeling te maken. Verder geeft het commando TaylorApproximation uit het subpakket Calculus1 van het Student-pakket nog een aantal mogelijkheden voor het maken van reeksontwikkelingen.
126 114 Handleiding Maple 10 > restart; x*exp(-x/8); with(student): with(calculus1): > TaylorApproximationTutor(f);
127 6 Praktische tips 6.1 Inleiding In dit hoofdstuk komt een aantal tips aan de orde die niet zozeer bij een wiskundig onderwerp zijn in te delen. Deze tips zijn meer voor algemeen gebruik en overal inzetbaar om het gebruiksniveau wat te verhogen en documenten beter leesbaar te maken. Allerlei handige dingen komen hier dus aan de orde. Voor informatie over Maple als tekstverwerker zie paragraaf Het gebruik van indices en subscript Het is vaak nodig om vooral in de tekst gebruik te maken van indices. Als je in de tekst of in de uitvoer f 1 wilt hebben, typ je in de formule-editor of in de invoer: f[1]. Echter deze vierkante haakjes hebben nog een andere belangrijke functie. Als je uit een rij, een lijst, een verzameling of een vector een bepaald element wilt hebben, zonder dat te willen overtikken, kun je dat aangeven met een index. Zie ook paragraaf 4.4 om iets meer te weten te komen over de operanden van een wiskundig object. Voorbeeld 6.1 Namen geven aan oplossingen van een vergelijking > restart; opl:=fsolve(x^3-3*x-1,x); opl := , , > a:=opl[1]; b:=opl[2]; c:=opl[3]; a := b := c := Toelichting: De indices geven aan welk element van de verzameling je in dit geval wilt hebben. TIP: wees wel voorzichtig met het reproduceren van een sessie waarin gewerkt wordt met indices. De volgorde van de elementen van een rij of verzameling is namelijk niet vast en kan een ander moment anders zijn, zodat de nummering van de indices aangepast moet worden! TIP: vanaf Maple 6 is de meervoudige toekenning mogelijk en dat kan in sommige gevallen wat werk besparen. > a,b,c:=opl; a, b, c := , , Ook hier geldt dat je moet opletten wat betreft de volgorde van de elementen van een oplossingsverzameling. Deze volgorde ligt niet vast! Nog een toepassing van het maken van meervoudige toekenning met assign is te zien in voorbeeld Het gebruik van quotes Er zijn drie soorten quotes: de gewone quotes ( ), de backquotes ( ) en de dubbele quotes ( ).
128 116 Handleiding Maple 10 Deze quotes kunnen een belangrijke truc zijn voor een elegante presentatie van de uitvoer in een verslag Quotes Voorbeeld 6.2 Integraalnotatie in vereenvoudigde vorm De bedoeling is een elegante en eenvoudig leesbare uitvoer. > restart; f:=piecewise([0,x<1],[x^2,x<4],[x-1,x>=4]): a,b:=0.5,5.4: Int( f,x= a.. b ):%:%%=value(%); Z b f dx = a Toelichting: De bedoeling was hier om in de grenzen van de integraal de letters a en b weer te geven in plaats van de waarden en de integrand als f weer te geven in plaats van de piecewise-notatie. De gewone quotes zijn ervoor om de evaluering in feite te vertragen. Als er ergens quotes omheen staan, wordt de evaluering uitgesteld na het afsluitteken en vindt pas plaats bij het volgende afsluitteken na een opdracht waarbij de berekening met de quotes aangehaald wordt. Na ieder afsluitteken wordt er één paar quotes gestript. Je kunt het heel mooi zien als je in het voorbeeld van de afsluittekens (hier de dubbele punt) allemaal een puntkomma zou maken. Zie ook voorbeeld 6.8 en paragraaf Voorbeeld 6.3 Ongedaan maken van een toekenning Een zeer belangrijk voorbeeld van het gebruik van de quotes is het ongedaan maken van een toekenning. > restart; x,y:=t^3-3*t,t^2-1; > x:= x ; f:=x^2*sin(x); x, y := t 3 3t, t 2 1 x := x f := x 2 sin(x) Toelichting: Zonder restart kan toch de toewijzing van bijvoorbeeld x weer worden opgeheven, zodat deze weer voor iets anders gebruikt kan worden. Het ongedaan maken van de toewijzing kan ook met unassign( x ) gedaan worden. (Zie de uitleg van het commando assign in paragraaf en voorbeeld 3.21.) Backquotes De backquotes ( ) zijn ervoor om een naam te maken die er precies zo uitziet als dat deze wordt ingetikt. Alles wat er tussen deze backquotes komt te staan, wordt precies zo weergegeven in de uitvoer, compleet met spaties en speciale tekens, maar dan wel zonder die quotes. In voorbeeld 3.32 zie je het gebruik van quotes voor het presenteren van f in de uitvoer als je de afgeleide van f bedoelt. Voorbeeld 6.4 Speciale weergave in de uitvoer > restart; f:=x*sin(x); f :=diff(f,x); f := xsin(x) f := sin(x)+xcos(x)
129 6 Praktische tips Dubbele quotes De dubbele quotes zijn er om een zogenoemde string te maken Je bent ze al eens eerder tegengekomen in hoofdstuk 2 waar je bij het plotcommando labels langs de assen kunt definiëren of een titel aan de grafiek kunt geven, zie voorbeelden hiervan in de figuren 8.2 en Voorbeeld 6.5 > plot(x^2,x=-3..3,labels=["x-as"," Y-as"],title="parabool"); Alles tussen dubbele quotes (dus niet twee enkele quotes) blijft zoals het ingetikt wordt, inclusief spaties en vreemde tekens. Een string kan echter niet als naam dienen. TIP: voor lange titels met meer regels bij een figuur, ga je in de invoer naar een nieuwe regel met Shift-Enter. Een illustratie daarvan zie je in figuur Afspraken met alias, assume en unprotect Niet alle letters en namen kunnen als variabele gebuikt worden, omdat er een aantal reeds afgesproken is bij Maple, bijvoorbeeld gamma, π en O. Je hoeft niet bang te zijn dat je per ongeluk verkeerde namen aan objecten geeft. Het programma waarschuwt daar wel voor als dat mocht gebeuren. Wat dus NIET kan en waarop dan ook een error-melding komt, is het volgende: > gamma:=3; Pi:=9; O:=3; We gaan nu de verschillende mogelijkheden bekijken om toch handige aanpassingen te kunnen doen Alias Met het commando alias kun je een andere naam geven aan een commando dat erg lang is en dat je vaak gebruikt in een sessie. Of je wilt een beschermde naam die vanwege bijvoorbeeld zijn lengte ongeschikt is een andere naam geven. Voorbeeld 6.6 Andere naam voor de stapfunctie Heaviside De Heaviside-stapfunctie wil je bijvoorbeeld de naam H geven die in zowel de invoer als de uitvoer van Maple gebruikt wordt en als zodanig wordt opgevat. Enkele oefeningen om uit te proberen: de piecewise-functie f wordt omgezet in een notatie met behulp van de stapfunctie en ter controle kun je eventueel de grafiek van f tekenen. > restart; alias(h=heaviside): plot(h(t),t=-2..2); f:=piecewise([0,x<1],[x^2,x<4],[x-1,x>=4]): convert(f,h); x 2 H(x 1) x 2 H( 4+x)+H( 4+x)x H( 4+x) Voorbeeld 6.7 Lange commando s korter maken Veel commando s uit het LinearAlgebra-pakket hebben erg lange namen. Een oplossing daarvoor is in het volgende voorbeeld te zien. Overigens wordt er niet veel gebruikt van gemaakt in deze handleiding om verwarring te voorkomen. In dit voorbeeld wordt het lange commando MatrixInverse vervangen door het zelfbedachte commando inv. Na restart is deze afspraak weer opgeheven. TIP: maak deze afspraak wél nadat het LinearAlgebra-pakket is geactiveerd, anders doet het
130 118 Handleiding Maple 10 commando het niet. > restart; with(linearalgebra): > alias(inv=matrixinverse): A:=<<1 4>, <5 6>>: inv(a); Assume Bij berekeningen van integralen en limieten (voorbeeld 3.30) kan de berekening wel eens stuklopen op onbegrip van de computer wat betreft de eigenschappen van de parameters. Voor het vlot verlopen van sommige berekeningen wil het wel eens helpen als we bepaalde aannames doen met assume. We kunnen bijvoorbeeld afspreken dat een parameter een geheel getal is (integer) of dat de parameter een reëel getal is, bijvoorbeeld bij berekeningen met complexe getallen. Er zijn verschillende mogelijkheden, zie bij?assume in de helpfunctie. Voorbeeld 6.8 In dit voorbeeld zien we dat we een parameter groter dan 0 kunnen stellen of kunnen opvatten als een geheel getal. > restart; interface(showassumed=0):assume(n,integer); sin(n*pi) =sin(n*pi); sin(nπ) = 0 > assume(s>0); Int(t^2*exp(-s*t),t=0..infinity): %=value(%); Z t 2 e ( st) dt = 2 0 s 3 Toelichting: Om te beginnen kan het zijn dat je bij gebruik van assume een tilde ( ) in de uitvoer ziet boven de letter waarvoor je de aanname doet. Bij de tip hieronder kun je zien hoe je deze tilde weg krijgt. Als n geheel is, is de waarde van sin(nπ) steeds gelijk aan 0. Alleen als s > 0, kan de waarde van de integraal berekend worden. Bij de laatste opdracht van de sessie, het berekenen van het reële deel van z, hadden we al afgesproken dat s > 0. Dat impliceert meteen ook dat s reëel is. Evenzo hadden we al afgesproken dat n een geheel getal was, dus tevens reëel. Verder moet voor a dan nog een aanname worden gedaan en dan is er genoeg informatie om het reële deel van z te bepalen. Dit had natuurlijk ook gekund met evalc(re(z)). In het commando evalc is immers de aanname opgesloten dat alle parameters reëel zijn (zie voor meer informatie over dit commando paragraaf ). TIP: als je assume gebruikt hebt, kun je instellen of je voor de rest van de sessie steeds geconfronteerd wilt worden met deze aanname, een soort geheugensteuntje (meestal is dat niet nodig). Er komt dan een tilde boven de letter waarvoor een aanname is gedaan. Dit instellen gebeurt met File, Preferences. Met het tabblad Input/Output Display kan het aanzien van het werkblad ingesteld worden met ook de instellingen voor de variabelen waarvoor iets aangenomen is (trailing tildes). Je kunt echter ook aan het begin van de sessie een instelling doen metinterface om aan te geven dat je niet herinnerd wilt worden aan de afspraak over een aanname door af te spreken showassumed=0. Voorbeeld 6.9 Incidentele aanname Als het in een enkel geval voorkomt dat je een aanname moet doen voor een variabele als verder in de rest van de sessie deze aanname niet belangrijk is, kan er voor een bepaalde berekening incidenteel een aanname gedaan worden. > restart; cos(n*pi) assuming n::integer; ( 1) n Iets dergelijks is ook te zien in voorbeeld 6.13 en 8.2.
131 6 Praktische tips Unprotect Het kan zijn dat een letter of een naam bij Maple gereserveerd is voor iets anders, bijvoorbeeld de letter γ. Als je bijvoorbeeld een waarde aan de naam γ wilt geven, komt er een melding dat deze naam beschermd is. (Als je wilt weten waar deze voor staat, typ je?gamma. Hier is dat de gammafunctie.) Het is mogelijk om een bepaalde naam, die we toch willen gebruiken, tijdelijk van zijn bescherming te ontdoen. Voorbeeld 6.10 Gereserveerde letters toch kunnen gebruiken We willen de hoeken van de driehoek de namen α, β en γ geven. De volgende oplossing is dan mogelijk. > restart; unprotect(gamma); alpha,beta,gamma:=pi/2,pi/3,pi/6; α, β, γ := π 2, π 3, π 6 > alpha + beta + gamma : %: %%=%; α+β+ γ = π Het gebruik van quotes (zie paragraaf 6.3) wordt hiermee ook weer mooi geïllustreerd. 6.5 Instellingen met interface Al eerder is aan de orde geweest hoe bepaalde instellingen vooraf, direct na restart, geregeld kunnen worden en blijven gelden voor de hele sessie. Op bladzijde 7 is de instelling voor het aantal decimalen in de uitvoer aan de orde geweest en er wordt in het hele boek vaak gebruik van gemaakt. Aan het begin van de sessie kun je voor de instelling van 3 cijfers achter de decimale punt intikkeninterface(displayprecision=3): Met interface(warnlevel=0) is er de mogelijkheid om storende waarschuwingen uit te zetten. Daarvan wordt vaak gebruikgemaakt in hoofdstuk 2, omdat bij het activeren van het plotpakket steeds deze waarschuwingen op het scherm komen. Belangrijk is het voor het vak elektrotechniek dat de letter voor de imaginaire eenheid als letter j kan worden ingesteld (zie paragraaf 6.5.1). Zie ook voorbeeld 6.8 voor nog een instelling bij situaties waarbij er aannames gedaan worden De imaginaire eenheid Een nieuwe afspraak maken voor de imaginaire eenheid, bij Maple bekend onder de naam I. Als je wilt dat deze naam voor je verslag (in de invoer én in de uitvoer) veranderd wordt in een j, kan dat met behulp vaninterface. Berekeningen met complexe getallen kunnen dan met de letter j gedaan worden. Zie voor meer voorbeelden met interface in de index van dit boek. Voorbeeld 6.11 Andere letter voor de imaginaire eenheid > restart; interface(imaginaryunit=j); abs(6+j*5) =abs(6+j*5); 6+5 j = 61 Toelichting: Je spreekt op deze manier af dat in het vervolg de letter j voor de imaginarie eenheid gebruikt wordt. Daarmee komt de letter I voor iets anders beschikbaar. Er is hier bijvoorbeeld gecontroleerd of de modulus van j goed berekend wordt. (Narestart is de afspraak weer opgeheven.)
132 120 Handleiding Maple 10 TIP: gebruik in dezelfde sessie niet nogmaals restart, want dan worden overal in het gehele werkblad álle letters j in de uitvoer weer vervangen door de letter I. Na het opslaan van het werkblad en het afsluiten van Maple is bij hernieuwd openen van het werkblad overal in de uitvoer van het gehele werkblad de j vervangen door de I, ook al staat in de invoer nog de letter j. Het werkblad dient dan in zijn geheel weer te worden geactiveerd met behulp van Edit, Execute Worksheet of met de knop met de drie uitroeptekens in de contextbalk. 6.6 Rekenen met alleen de reële getallen Zoals bekend, rekent Maple per definitie met het volledige getallenstelsel C, de complexe getallen. Je kunt dan ook gerust de logaritme of de wortel nemen uit een negatief getal. Je wordt dan geconfronteerd met een I, de imaginaire eenheid (zie ook paragraaf voor eventueel een andere letter daarvoor). Ook vergelijkingen van een hogere graad hebben vaak complexe oplossingen. Het is echter mogelijk om Maple te laten rekenen met alleen reële getallen R. Bij het begin van de sessie moet daarvoor het pakket RealDomain geactiveerd worden. Voorbeeld 6.12 Vergelijkingen oplossen binnen de reële getallen R > restart; interface(warnlevel=0): with(realdomain); [I, R, ˆ, arccos, arccosh, arccot, arccoth, arccsc, arccsch, arcsec, arcsech, arcsin, arcsinh, arctan, arctanh, cos, cosh, cot, coth, csc, csch, eval, exp, expand, limit, ln, log, sec, sech, signum, simplify, sin, sinh, solve, sqrt, surd, tan, tanh] > verg:=(g*m/r)^(1/2) = 1/43200*Pi*R; GM verg := R = πr > solve(verg,{r}); {R = 7205(1/3) (GM π) (1/3) } π Toelichting: Na het activeren van het RealDomain-pakket wordt er een lijst van functies en commando s getoond waarop het rekenen in de reële getallen effect zal hebben en anders zal zijn dan het rekenen met het volledig getallenstelsel C. Voor een fysische situatie is het bijvoorbeeld wel wenselijk dat alleen de reële oplossing gegeven wordt. In deze situatie zouden er anders drie oplossingen voor R ontstaan wat niet altijd wenselijk is. Voorbeeld 6.13 Incidenteel Real Domain gebruiken Ook zou je zonder dit RealDomain-pakket te activeren tóch Maple kunnen forceren om bij bepaalde berekeningen alleen in R te rekenen. De volgende opdracht kan in een sessie plaatsvinden waarin het RealDomain-pakket niet geactiveeerd is. > restart; simplify(sqrt(x^2)) assuming x::real; x Een soortgelijke situatie vind je in voorbeeld 8.2. Een derde mogelijkheid om incidenteel in R te rekenen wordt gegeven in voorbeeld 3.17, 8.19 en 10.1, waarbij je met een heel klein programmaatje de opdracht geeft om in de reële
133 6 Praktische tips 121 getallen te rekenen metsolve. Het gaat als volgt met de opdracht: > use RealDomain in solve(...) end; 6.7 Eenheden Hoewel het in een wiskundeomgeving niet de gewoonte is, is het toch mogelijk om met eenheden te werken en te rekenen. In dit boek wordt er verder in geen enkel voorbeeld met eenheden gerekend. Toch worden hier enkele mogelijkheden genoemd waaronder ook een gemakkelijke manier om eenheden in elkaar om te zetten (de Unit Converter). Voor meer informatie over eenheden wordt echter verwezen naar de website behorende bij het boek, waar met voorbeelden veel geavanceerde mogelijkheden worden getoond. In voorbeeld 1.14 is al melding gemaakt van het feit dat de goniometrische functies, zoals de cosinus en de sinus, altijd gebruikmaken van radialen omdat radialen eenheidsloos zijn. Maar er kan eventueel wél met graden gerekend worden. In de volgende voorbeelden worden slechts enkele mogelijkheden getoond. Voorbeeld 6.14 De Unit Converter Voor het omzetten van eenheden, bijvoorbeeld van feet naar meter, kan via de menubalk via Edit de Unit Converter bereikt worden. Het volgende scherm (figuur 6.1) wordt getoond, waarbij de eenheden gekozen kunnen worden van bijvoorbeeld de dimensie lengte. Figuur 6.1 Toelichting: Het betekent dat de lengtemaat feet omgezet wordt in meters. Door middel van de knop Insert van dit pop-upscherm komt in het werkblad de volgende inputregel te staan: > convert( 1.0, units, ft, m ); Met als uitkomst , wat dus wil zeggen dat 1 voet gelijkstaat met meter. Het is niet beslist noodzakelijk om alles tussen quotes te zetten, maar het programma doet dat automatisch en voorkomt verwarring als er al misschien toekenningen gedaan zijn aan m of ft. Voorbeeld 6.15 Enkele berekeningen met eenheden De volgende eenvoudige berekeningen met eenheden kunnen gedaan worden zonder een pakket te activeren. Op de website behorende bij het boek staat meer informatie over eenheden waarbij eventueel het Units-pakket geactiveerd moet worden. > restart; interface(displayprecision=3): (4*Unit(feet) + 3*Unit(inches)+0.03*Unit(kilometers)); 4[ft]+3[in]+0.030[km]
134 122 Handleiding Maple 10 > simplify(%); > cos(30*unit(degree)); > simplify(%); [m] cos(30[arcdeg]) 3 > 3.87 * Unit(kg*m/s^2); > afstand:=4.98*unit(km); > tijd:=0.7*unit(hour); [N] afstand := 4.980[km] tijd := 0.700[h] > snelheid:=simplify(afstand/tijd); [ m snelheid := s] Toelichting: Enkele dingen zullen opvallen bij het gebruik van eenheden. Verschillende namen voor de eenheden kunnen door elkaar gebruikt worden, zoals feet en ft, kilometers of kilometer en km, enzovoort. Ook meervoud: degree of degrees, wordt allemaal geaccepteerd. In de uitvoer wordt dan de officiële afkorting gepresenteerd, zoals [arcdeg] voor graden. Na simplify wordt de berekening met eenheden afgehandeld met als uitkomst de meest officiële notatie van de eenheden. 6.8 Maplets Maplets zijn interactive, op Java gebaseerde dialoogschermen. Veel van deze Maplets zijn ingebouwd in het programma en te bereiken via een rechtermuisknopmenu of met bepaalde commando s. Vanaf versie 8 is het bijvoorbeeld mogelijk om met het Maplet Plot Builder te werken om grafieken te maken, zie ook paragraaf 2.4. Verder zijn er bij de laatste versies al veel handige Maplets in de vorm van Tutoren bijgekomen waarmee het gemakkelijk werken is. Zie in de index van dit boek bij Maplet voor meer voorbeelden. Vanaf versie 10 zijn deze Maplets vaak nog uitgebreid met de mogelijkheid om over het commando te beschikken, waarmee ook direct in het werkblad animaties of andere ingewikkelde opdrachten te geven zijn zoals in paragraaf of in voorbeeld 12.1 met het CurveFitting-Maplet. De Maplets die standaard in het programma ingebouwd zijn, zijn niet te bewerken, maar het is wel mogelijk om zelf Maplets te programmeren. Een Maplet kan ook zelfstandig optreden en gelezen worden met de (gratis) Maplet-viewer, waarvoor Maple zelf verder niet nodig is. Een heel nieuwe functionaliteit van Maple 10 is de Maplet Builder. Er kunnen op een elegante en gemakkelijke manier zelf Maplets geprogrammeerd worden en opgeslagen als Maplet. Daarvoor moet wel de standaardinterface van Maple 10 worden geopend, dus níet Maple Classic Worksheet! Met Tools, Assistents, Maplet Builder kom je bij deze uitgebreide omgeving voor het maken van Maplets waarin het ook mogelijk is de formules in de juiste lay-out te presenteren met MathML. Klik binnen de Maplet Builder op de Help-knop voor een uitgebreide helpfunctie voor het bedienen van de Maplet Builder. Ook wordt er op de website behorende bij het boek
135 6 Praktische tips 123 Figuur 6.2 bijgehouden wat de nieuwste ontwikkelingen zijn op dit gebied. Reeds gemaakte Maplets in deze Maplet Builder kunnen in deze omgeving geopend worden en verder bewerkt worden. Echter Maplets die in oudere versies gemaakt zijn, kunnen niet in de Maplet Builder geopend worden. Ook de Maplets die door het programma zelf gegenereerd worden, zoals de Plot Builder en dergelijke, kunnen hierin niet geopend en bewerkt worden. De Maplets die in lagere versies gemaakt zijn, kunnen alleen bewerkt worden door ze te editen in een tekstprogramma. Handig is het om de broncode van een Maplet in Maple Classic Worksheet te openen en eventueel te bewerken, waarna het runnen van het Maplet eenvoudig is. In de helpfunctie, te bereiken door?maplet in te voeren, is een schat van informatie te vinden over de broncode van Maplets. Op de cd-rom staan een paar Maplets die verder bewerkt kunnen worden in een tekstprogramma en een paar Maplets die verder bewerkt kunnen worden op de nieuwe manier: in de Maplet Builder. 6.9 MapleTA Er bestaat een geavanceerd toetsprogramma MapleTA (On Line Testing and Assessment) waarbij het mogelijk is om open vragen te stellen met formules en berekeningen. Dit toetssysteem maakt gebruik van de Maple-machine op de achtergrond. Voor studenten die toetsen moeten maken, is het handig als zij gewend zijn aan de Maplesyntax om formules snel te kunnen intikken met de bekende sterretjes, dakjes, deelstrepen en standaardfuncties zoals ln en sqrt. Er bestaat vervolgens de mogelijkheid om de ingetikte formule te zien in twee dimensionale vorm (zoals de formule ook opgeschreven wordt), zodat beoordeeld kan worden of de formule goed ingetikt is. Een en ander aan informatie over dit toetsprogramma staat op de website behorend bij dit boek. Om als docent te werken met dit toetssysteem, is bekendheid met enkele Maple-commando s een groot voordeel. Bij het programmeren van bepaalde toetsitems, kan gebruikgemaakt worden van Maple-commando s waarmee op een snelle manier hele series toetsitems gemaakt kunnen worden. Ook enige ervaring met de mogelijkheden van Maple kan meehelpen om op
136 124 Handleiding Maple 10 creatieve ideeën te komen bij het maken van toetsitems. Enkele aanvullende commando s die hieronder worden besproken, zijn hierbij van belang. Het toetssysteem kan gebruikmaken van variabelen die met een dollarteken worden gekenmerkt. Het programma ziet deze variabele dan als getal of formule of ander object waarmee gerekend kan worden Het commando evalb De manier waarop het antwoord van de student goedgekeurd zal worden, gebeurt met een Boolean expression, dat wil zeggen: iets is waar of niet waar (true of false). Binnen MapleTA worden variabelen aangeduid door middel van een dollarteken wat niet de manier is om binnen een Maple-sessie te gebruiken. (De volgende voorbeelden worden dan ook niet in een Maple-sessie gedaan maar binnen MapleTA.) Stel dat het antwoord van de student $RESPONSE genoemd wordt en dat het werkelijke antwoord $ANTWOORD genoemd wordt, dan kan het MapleTA-programma deze twee met elkaar vergelijken en uitsluitsel geven. > evalb($antwoord=$response); Voor het goedkeuren van het antwoord dat de student geeft, is dus true nodig als uitkomst hiervan. Een andere mogelijkheid is dat het verschil tussen respons en juiste antwoord bekeken wordt en na vereenvoudiging 0 oplevert: > evalb(simplify($antwoord-$response)=0); Ook handig is het volgende, bij berekeningen die afgerond moeten worden: > evalb(evalf[2]($answer)-evalf[2]($response)=0); Steeds levert deze opdracht twee mogelijkheden: true of false waarmee het programma kan beslissen of het antwoord van de student goedgekeurd moet worden of niet Maple-commando s binnen MapleTA Voorbeeld 6.16 Zoals bij het programma Excel onder bepaalde omstandigheden Maplecommando s gebruikt kunnen worden (zie paragraaf 1.2.3), kunnen ook binnen MapleTA Maple-commando s gebruikt worden op vrijwel dezelfde manier met: maple(" "), waar binnen de dubbele quotes het betreffende Maple-commando getikt kan worden. Zoals gezegd kun je dus bijvoorbeeld een getal, een formule of een ander wiskundig object als een variabele definiëren op de volgende manier: $a=range(-3,3); $b=range(-3,3); $formule=maple("($a)/x+($b)"); $antwoord=maple("simplify($formule)"); Toelichting: Binnen MapleTA kan er gebruikgemaakt worden van het definiëren van variabelen. Er worden eerst twee variabelen $a en $b (beide gehele getallen tussen -3 en 3) gedefinieerd en deze variabelen kunnen gebruikt worden in formules. De formule is gegeven en de opdracht is bijvoorbeeld om deze te vereenvoudigen. Laat Maple het werk doen om de vereenvoudiging tot stand te brengen. Het algoritme ter voorbereiding van de vraag is dan klaar en er kan achter de schermen mee gerekend worden. Op deze manier zijn er vele mogelijkheden, ook voor het maken van grafieken, waarbij een en ander op de achtergrond wordt voorbereid.
137 6 Praktische tips MathML Voor een presentatie van formules op het scherm, als onderdeel van de vraag in MapleTA, is het handig om alvast van tevoren de MathML-code (Mathematical Markup Language) voor te laten bereiden door Maple en er een variabele van te maken, om daar later gebruik van te maken in de tekst van de vraag, de terugkoppeling of de hints bij de vraag. Verder kan Maple ook het werk doen als er bij andere programma s gebruikgemaakt wordt van MathML-code. Binnen het MathML-pakket (activeren met with(mathml)) kan de code gemakkelijk gegenereerd worden. Voorbeeld 6.17 Genereren van MathML-code In de volgende Maple-sessie wordt getoond hoe gemakkelijke het is om MathML-code te genereren van een formule. > with(mathml): formule:=f^2=1/(4*l^2*mu)*f[t]; formule := f 2 = 1 F T 4 L 2 µ > code:=exportpresentation(formule); code := <math xmlns= >\ > printf(code); <mrow><msup><mi>f</mi><mn>2</mn></msup><mo>=\ </mo><mrow><mfrac><mn>1</mn><mn>4</mn></mfrac\ ><mo>&invisibletimes;</mo><mfrac><msub><mi>f</m\ i><mi>t</mi></msub><mrow><msup><mi>l</mi><mn\ >2</mn></msup><mo>⁢</mo><mi>μ\ </mi></mrow></mfrac></mrow></mrow></math> <math xmlns= ><mrow><msup><mi>f</mi><mn>2 </mn></msup><mo>=</mo><mrow><mfrac><mn>1</mn><mn>4</mn></mfrac><mo>&in visibletimes;</mo><mfrac><msub><mi>f</mi><mi>t</mi></msub><mrow><msup> <mi>l</mi><mn>2</mn></msup><mo>&invisibletimes;</mo><mi>μ</mi></mro w></mfrac></mrow></mrow></math> > Import(code); f 2 = 1 4 F T L 2 µ Toelichting: Van een gegeven formule wordt met ExportPresentation uit het MathMLpakket de MathML-code gemaakt. Het valt misschien op dat de code tussen dubbele quotes staat en dat deze code dus eigenlijk een string is. Maple kan daar wel mee omgaan en deze code kan als string geïmporteerd worden (met Import uit het MathML-pakket) om er weer een formule van te maken. Echter andere programma s hebben liever de code niet als string, dus zonder quotes. Om de quotes van een string te strippen kan met printf gewerkt worden. Dit commando werkt ook buiten het MathML-pakket en kan dus in allerlei situaties op strings worden toegepast. Zie ook paragraaf 4.12 voor meer informatie over strings. Als een MathML-code ergens vandaan wordt gekopieerd naar het klembord en met paste in een Maple-sessie wordt geplaatst, wordt deze code door het programma herkend en kan als code geplaatst worden in een sessie óf als formule (zie figuur 6.3). Het is handig om als het in een ander programma moeilijk is de code te bewerken, dat via Maple te doen.
138 126 Handleiding Maple 10 Figuur 6.3 Voorbeeld 6.18 MathML binnen MapleTA Als er een formule in een toetsvraag gecommuniceerd moet worden op het scherm, kan de MathML-code als variabele van tevoren worden voorbereid. In het toetsprogramma MapleTA kan de code niet als string gebruikt worden, dus moet er niet vergeten worden de quotes, die ontstaan bij het genereren van de code, te strippen. Uitgaande van voorbeeld 6.16, waarin al een aantal variabelen gedefinieerd was, kan een variabele gedefinieerd worden die aangeroepen kan worden voor gebruik in de tekst van de toetsvraag. $displayformule=maple("printf(mathml[exportpresentation]($formule))"); Toelichting: Op deze manier wordt er dus binnen het MapleTA-programma van de functionaliteit van Maple gebruikgemaakt. Het scheelt dus een hoop werk als er in de tekst van de vraag alleen maar hoeft te staan: Schrijf de formule als één breuk: $displayformule. De code wordt dus aangeroepen in de vorm van een variabele.
139 7 Formulemanipulatie 7.1 Inleiding In dit hoofdstuk komt een aantal mogelijkheden aan de orde om formules in de gedaante te krijgen die je graag wilt. Vooral met het oog op het maken van verslagen en documenten is het belangrijk dat je zo duidelijk mogelijk de resultaten van berekeningen presenteert in de gewenste vorm. Echter voor de berekeningen zelf is dat niet noodzakelijk. In de vorige hoofdstukken heb je al een aantal soorten formules leren kennen. Deze formules kunnen polynomen, breuken, gonioformules, vergelijkingen en combinaties van dit alles zijn. Verwacht echter niet teveel van het herleiden van formules en concentreer je hier niet teveel op, want het belang van het herleiden is eigenlijk niet meer zo groot als in het verleden wel geweest is. Maple rekent namelijk met het grootste gemak met formules die niet mooi uitkomen, terwijl de noodzaak in het verleden erg groot was om de formules op ieder moment zo mooi mogelijk te herleiden; het handwerk zou anders te ingewikkeld worden, met kans op fouten. Het aantal commando s dat gebruikt wordt om formules te manipuleren is vrij klein en overzichtelijk. Vaak is het commando simplify wel genoeg, hoewel er nog vele opties bij dit commando zijn om nog wat bij te sturen. In dit hoofdstuk wordt slechts een beperkt aantal voorbeelden gegeven, eigenlijk meer een aanzet om zelf verder te proberen. Op de website bij dit boek zijn hierop nog aanvullingen te vinden. In dit hoofdstuk past ook de manipulatie met stelsels polynomen om een Gröbner-basis te vormen. Verder wordt in dit hoofdstuk aandacht besteed aan het optimaliseren van functies van meer variabelen waaronder ook het lineair programmeren. 7.2 Vereenvoudigen en herleiden In hoofdstuk 3 staan bij de basisvaardigheden ook al een aantal voorbeelden waarin herleidingen aan de orde komen. Zonodig kun je deze paragraaf 3.2 met formulemanipulatie aan het volgende vooraf laten gaan Polynomen herleiden Voorbeeld 7.1 Volgorde van de machten in een polynoom Het is je misschien wel eens opgevallen dat Maple de volgorde van de termen automatisch rangschikt naar dalende machten van de variabele nadat ze in willekeurige volgorde zijn ingetikt. Dat kan ook anders. Bij de machtreeks bijvoorbeeld zag je dat de machten naar opklimmende grootte gerangschikt waren. We zijn er echter aan gewend dat de hoogste macht voorop staat. Dit is met behulp van het commandosort gemakkelijk te verwezenlijken. > restart; polynoom:=convert(series(sin(x),x=0,8),polynom); polynoom := x 1 6 x x x7 > sort(polynoom);
140 128 Handleiding Maple x x5 1 6 x3 + x Toelichting: Zie voor machtreeksen paragraaf 5.8. Verder kan er nog een optie meegegeven worden als de formule meer letters bevat. Er kan bijvoorbeeld op a gesorteerd worden als de formule ook vormen met a zou bevatten. De volgorde van de machten van a zouden dan gesorteerd kunnen worden van hoog naar laag, maar eventueel ook andersom. Zie voor meer informatie in de helpfunctie bij?sort. Voorbeeld 7.2 Factoriseren van polynomen Polynomen kunnen gefactoriseerd worden met het commando factor, zoals we al gezien hebben in paragraaf Er zijn bij dit commando verschillende opties mogelijk, zoals real. Deze optie zorgt ervoor dat Maple numeriek gaat rekenen. Je had ook de polynoom met decimale punt kunnen opgeven en dan had Maple met het commando factor zonder opties ook al numeriek gerekend. Zie voorbeeld 3.6. Met de optiecomplex gaan we nog een stapje verder: behalve dat er met deze optie numeriek gerekend wordt, kunnen nu ook complexe getallen toegelaten worden. Een polynoom van de graad n wordt dan altijd in n lineaire factoren in de variabele ontbonden. De ontbinding gaat op deze manier zo ver mogelijk. > restart; interface(displayprecision=3): p:=7.1*x^3-8.3*x^2+5.1*x-1; > factor(p,complex); > expand(%); > fnormal(%); > simplify(%,zero); > convert(%,fraction); p := 7.100x x x (x 0.313)(x I)(x I) 7.100x x I x 7.100x x I x 7.100x x x x x x 1 Toelichting: Je ziet dat er bij het factoriseren in totaal drie lineaire factoren ontstaan in x. Dat ligt ook wel in de lijn want van de wiskundetheorie is bekend dat een derdegraads polynoom drie nulpunten heeft in de verzameling van de complexe getallen C. Het tegenovergestelde van de ontbinding in factoren is het haakjes wegwerken (expanderen) met behulp van het commando expand. Pas je nu op de bovenstaande (numeriek) ontbonden vorm het commando expand toe, dan zou je verwachten dat de oorspronkelijke polynoom weer tevoorschijn komt. Echter houd er rekening mee dat bij het numeriek rekenen afrondingen plaatsvinden! Deze afrondingen zijn er de oorzaak van dat er opeens complexe getallen in de polynoom verschijnen, te herkennen aan de I. Echter als je goed kijkt, blijken deze complexe getallen maar heel erg klein te zijn en vinden hun oorzaak in de afrondingen die onderweg gedaan zijn. Wil je deze zogenoemde fuzzy zero s weer weghalen, dan gaat dit heel gemakkelijk met het commando fnormal. Je kunt zelfs met het meegeven van een extra optie het aantal significante cijfers van de afronding beïnvloeden. (Kijk echter wel uit hiermee, het kan zijn dat de afrondingen te grof worden.) Er blijft echter soms een complex getal over dat weliswaar gelijk is aan 0 maar dat misschien
141 7 Formulemanipulatie 129 toch wat storend is in de uitvoer. Dit kan weggehaald worden met simplify(%,zero). Er kan echter gewoon mee gerekend worden als je het niet zou weghalen. Bij het plotten bijvoorbeeld, wordt een dergelijk klein complex getal verwaarloosd (vanaf versie 8). Eventueel overgaan naar een exacte schrijfwijze zonder decimale punt, behoort ook tot de mogelijkheden metconvert(%,fraction). Voorbeeld 7.3 Termen samennemen In dit voorbeeld nemen we termen samen die bij elkaar horen. Ga uit van de uitdrukking: g = (a+3)(2xa 1)(x+5). Dit is een kwadratische vorm zowel in a als in x. > restart; g:=(a+3)*(2*x*a-1)*(x+5); > kw_a:=collect(g,a); g := (a+3)(2xa 1)(x+5) kw a := 2x(x+5)a 2 +(6x 1)(x+5)a 3x 15 Met expand kunnen alle haakjes weggewerkt worden, maar met het commando sort zul je niet veel kunnen doen om de termen zó te rangschikken dat de kwadratische vorm in a tevoorschijn komt of de kwadratische vorm in x. Met het commandocollect lukt dat wel. Voor nog een andere manier van schrijven van een specifiek kwadratische vorm: het kwadraat afsplitsen, wordt verwezen naar Breuken herleiden Het manipuleren met breuken is al besproken in hoofdstuk 3 paragraaf Daar zag je dat er verscheidene breuken samengevoegd kunnen worden met behulp van het commando normal en simplify. Eigenlijk is het commando normal speciaal bedoeld voor breuken maar metsimplify zijn meer opties mogelijk. Voor het breuksplitsen komt er in het volgende voorbeeld nog een extra optie bij om ook met complexe getallen te kunnen werken. Voorbeeld 7.4 Breuken herleiden Ga uit van de volgende uitdrukking b die bestaat uit twee breuken die samengevoegd dienen te worden waarna het resultaat vervolgens weer gesplitst wordt. b = 4 x+5 + 2x x Het resultaat kan in verschillende gedaanten geschreven worden waarbij de Maple-sessie voor zich spreekt. > restart; b:=4/(x+5)+2*x/(x^2+1); b := 4 1 x x x > vereenvoudig_b:=normal(b); vereenvoudig b := 2 3x x (x+5)(x 2 + 1) > factoriseer_b:=factor(b); factoriseer b := 2 (x+1)(3x+2) (x+5)(x 2 + 1) > werk_haakjes_weg_van_b:=normal(b,expanded); werk haakjes weg van b := 6x x x 3 + x+5x 2 + 5
142 130 Handleiding Maple 10 > expand(%); 6 x 3 + x+5x x 3 + x+5x x x 3 + x+5x > convert(b,parfrac,x,complex); 1 4 x x+1.000i x 1.I > convert(%,fraction); 1 x I + 1 x+i + 4 x+5 x 2 Toelichting: Bij de laatste opdracht van bovenstaande sessie is te zien dat je met de optie complex bij het breuksplitsen bereikt, dat het maximale aantal kleine breuken verwezenlijkt kan worden met allemaal lineaire vormen in de noemers. Zie voor meer voorbeelden over breuksplitsen paragraaf Wortelvormen herleiden In paragraaf staat bij de basisvaardigheden al iets genoemd over wortelvormen en het factoriseren daarvan. Soms kunnen wortelvormen nog verder herleid worden als we dat symbolisch doen en geen rekening houden met de beperkingen van het domein van de wortelfunctie; het komt er dus op neer dat we in feite x 2 tot x vereenvoudigen. Voorbeeld 7.5 Wortelvormen symbolisch vereenvoudigen Hiervoor is het commando simplify(...,symbolic) vaak succesvol. In voorbeeld 8.4 staat een toepassing hiervan. > restart; sqrt(x^2+2*x+1): %=simplify(%,symbolic); (1+x) 2 = 1+x Het is meestal een kwestie van oefening, omdat met weinig ervaring de resultaten niet altijd voorspelbaar zijn. Raadpleeg de helpfunctie?simplify met de voorbeelden daarin. Op de website bij dit boek is in het bestand Tips en trucs meer aandacht besteed aan het herleiden van wortelvormen. Aan de hand van de voorbeelden krijg je binnen korte tijd vrij veel ervaring Omzettingen en combinaties Enkele omzettingen zijn handig in vele situaties. Er zijn nogal wat verschillende opties bij het omzetcommando mogelijk. Raadpleeg eventueel de helpfunctie voor de mogelijkheden van deze opties met?convert. Ook in de index van dit boek wordt verwezen naar mogelijkheden van dit commando. Met het commando combine kunnen interessante combinaties gemaakt worden. Voorbeeld 7.6 Omzetting In dit voorbeeld wordt de sinushyperbolicus in exponentvorm geschreven en vervolgens herleid met het commando combine. Van de omzetting met convert(..,exp) is in paragraaf een toepassing te zien. > convert(sinh(x),exp); > sinh(x)=combine(%,exp); 1 2 ex e x
143 7 Formulemanipulatie 131 sinh(x) = 1 2 ex 1 2 e( x) Voorbeeld 7.7 Combinatie De uitdrukking f wordt uit elkaar getrokken en vervolgens wordt deze weer in de oorspronkelijke notatie gebracht. > restart; f:=sin(2*x+y); > expand(f):%=combine(%); f := sin(2x+y) 2cos(y)sin(x)cos(x)+2sin(y)cos(x) 2 sin(y) = sin(2x+y) Zoals je ziet, is de tegenhanger van het commando expand hier dus niet factor maar combine. Voorbeeld 7.8 Een vorm bevriezen Het commando expand kan ervoor zorgen dat uitdrukkingen uit elkaar getrokken worden. Als je juist niet wilt dat bepaalde vormen uit elkaar getrokken worden en andere wel, kan er ook bij wijze van spreken een deel bevroren worden met het commando freeze en eventueel na expand weer ontdooid worden met thaw. Zie ook de website bij dit boek voor meer tips en trucs. > restart; f:=sin(2*x)+cos(x+y); > f1:=subs(2*x=freeze(2*x),f); > expand(f1); > thaw(%); f := sin(2x)+cos(x+y) f1 := sin(freeze/r0)+cos(x+y) sin(freeze/r0) + cos(x) cos(y) sin(x) sin(y) sin(2x)+cos(x)cos(y) sin(x)sin(y) 7.3 Herleiden met gebruik van vergelijkingen Bij het herleiden van ingewikkelde formules wil het gebruik van bekende identiteiten die bijvoorbeeld in de goniometrie vaak voorkomen, nog weleens helpen. De vergelijking sin 2 x+cos 2 x = 1 kan vaak gebruikt worden om een goniometrische formule die er ingewikkeld uitziet, een stuk transparanter maken. Maple gaat bij zo n vereenvoudiging te werk vanuit de concepten van de theorie van de Gröbner-basis die behandeld wordt in paragraaf 7.4. Bij het commando simplify moet in dat geval een verzameling of een lijst vergelijkingen worden opgegeven. Er kunnen dus meer vergelijkingen opgegeven worden. Voorbeeld 7.9 Goniometrische vorm De uitdrukking f, hierna gedefinieerd, wordt vereenvoudigd met gebruikmaking van de identiteit sin 2 x+cos 2 x = 1: > restart; f:=sin(x)^4+sin(x)^2*cos(x)^2-sin(x)^2*cos(x)-cos(x)^3: > f=simplify(f,{sin(x)^2+cos(x)^2=1},[sin(x),cos(x)]); sin(x) 4 + sin(x) 2 cos(x) 2 sin(x) 2 cos(x) cos(x) 3 = cos(x) cos(x) Toelichting: Er wordt in een verzameling (kan ook met een lijst) opgegeven welke vergelijking(en) als extra gegeven gebruikt moet(en) worden en als optie bij dit commando
144 132 Handleiding Maple 10 kan er nog extra een lijst aan toegevoegd worden waarin je kunt aangeven welke vorm een voorkeursbehandeling moet ondergaan. Deze laatste optie is niet altijd nodig maar in dit geval was dat achtereenvolgens de sinus en daarna de cosinus, zodat er hier in de uitvoer alleen cosinusvormen voor zullen komen (wat niet altijd lukt). Voorbeeld 7.10 Wiskunde Olympiade-vraagstuk Een bekend voorbeeld dat een keer als opgave op de Wiskunde Olympiade is geweest: het berekenen (vereenvoudigen) van: a 4 + b 4 + c 4 met als gegeven het stelsel: a+b+c = 3 stelsel = a 2 + b 2 + c 2 = 9 a 3 + b 3 + c 3 = 24 > restart; stelsel:={a+b+c=3,a^2+b^2+c^2=9,a^3+b^3+c^3=24}; stelsel := {a+b+c = 3, a 2 + b 2 + c 2 = 9, a 3 + b 3 + c 3 = 24} > (a^4+b^4+c^4)[ stelsel ]=simplify(a^4+b^4+c^4,stelsel); (a 4 + b 4 + c 4 ) stelsel = 69 Toelichting: Het stelsel vergelijkingen wordt als verzameling ingevoerd. De vorm a 4 + b 4 + c 4 is vereenvoudigd en heeft dus de waarde 69 onder de voorwaarden van het gegeven stelsel vergelijkingen. Merk op hoe je de uitvoer van Maple kunt beïnvloeden, zodat je een duidelijke presentatie krijgt. Zie voor het gebruik van quotes paragraaf 6.3 en voor indices paragraaf 6.2. Ook als het minder goed uitkomt of als je numeriek rekent, is zo n vereenvoudiging geen probleem. Verander maar eens iets aan de invoer van je sessie zonder alles opnieuw in te tikken en probeer ook decimale getallen. Aan dit systeem van vereenvoudiging met een gegeven stelsel vergelijkingen ligt het vormen van een Gröbner-basis ten grondslag. Dit systeem wordt in paragraaf 7.4 toegelicht. In paragraaf kun je bestuderen hoe je een functie kunt maximaliseren of minimaliseren onder de voorwaarden van een stelsel ongelijkheden. Als de functie en de vergelijkingen lineair zijn, wordt er gesproken van lineaire optimalisering. De manier van doen is ongeveer hetzelfde als een vorm vereenvoudigen met een stelsel vergelijkingen. 7.4 De Gröbner-basis In het kort komt het vormen van een Gröbner-basis neer op het vegen van een stelsel polynomen. Het geveegde stelsel wordt een Gröbner-basis genoemd en is gelijkwaardig met het oorspronkelijke stelsel polynomen. Het voordeel van het geveegde stelsel is dat er in ieder geval één polynoom met slechts één variabele ontstaat. Het is dan mogelijk om een beter inzicht te krijgen in de mogelijke oplossingen van het oorspronkelijke stelsel vergelijkingen. Het idee is hetzelfde als het met de hand vegen van een stelsel vergelijkingen. { { { x 2 + y 2 4 = 0 (1 y) 2 + y 2 4 = 0 2y 2 2y 3 = 0 x+y 1 = 0 x+y 1 = 0 x+y 1 = 0
145 7 Formulemanipulatie 133 Over het geveegde stelsel is nu op te merken dat in ieder geval één van de vergelijkingen slechts één variabele bevat. Dat was ook het doel van het vegen. Dit vegen kan door de computer worden gedaan. Hiervoor is het commando Basis uit het Gröbner-pakket nodig. Dit pakket kan geactiveerd worden met with(groebner). Het enige verschil met het werken met pen en papier is dat Gröbner niet op vergelijkingen maar op polynomen werkt! Dit hoeft echter geen bezwaar te zijn. We laten gewoon het rechterlid van de vergelijking weg. Dit moet dan wel gelijk 0 zijn. Voorbeeld 7.11 Een stelsel vergelijkingen vegen met behulp van Gröbner { x gegeven stelsel 2 + y 2 4 = 0 x+y 1 = 0 > restart; with(groebner): polynomen:=[x^2+y^2-4,x+y-1]; > Basis(polynomen,plex(x,y)); > Basis(polynomen,plex(y,x)); polynomen := [x 2 + y 2 4, x+y 1] [2y 2 2y 3, x+y 1] [2x 2 2x 3, x+y 1] Toelichting: Geef het stelsel polynomen op met een lijst (het mag ook met een verzameling, er wordt tóch altijd een lijst gegenereerd) en geef de volgorde van voorkeursbehandeling van de variabelen aan met de optie plex(x,y) of plex(y,x) (pure lexografic order) en bekijk het verschil. Het resultaat is een nieuw stelsel polynomen in de vorm van een lijst dat gelijkwaardig is aan het oorspronkelijke stelsel. We maken er nu een geveegd stelsel vergelijkingen van: { 2x geveegd stelsel : 2 2x 3 = 0 x+y 1 = 0 Voorbeeld 7.12 Wiskunde Olympiade-vraagstuk met Gröbner Neem nu precies hetzelfde probleem als in voorbeeld Als we het veegsysteem van Gröbner gebruiken, is het beter om van dit stelsel vergelijkingen direct een verzameling van polynomen te maken. Dit stelsel was echter al eerder ingevoerd. In dat geval is het handig om gebruik te maken van de commando s map, zie paragraaf 4.4, en lhs en rhs (left hand side en right hand side). > restart; stelsel:={a+b+c=3,a^2+b^2+c^2=9,a^3+b^3+c^3=24}: stelsel1:=map(lhs-rhs,stelsel); stelsel1 := {a+b+c 3, a 2 + b 2 + c 2 9, a 3 + b 3 + c 3 24} > olymp:=stelsel1 union {a^4+b^4+c^4-d}; olymp := {a+b+c 3, a 2 + b 2 + c 2 9, a 3 + b 3 + c 3 24, a 4 + b 4 + c 4 d} > with(groebner): Basis(olymp,plex(a,b,c,d)); [d 69, c 3 3c 2 + 1, b 2 + cb 3c 3b+c 2, a+b+c 3] Toelichting: Van elke vergelijking van de verzameling moet het verschil van linkerlid en rechterlid genomen worden. Als vierde vergelijking kun je erbij voegen: a 4 + b 4 + c 4 = d.
146 134 Handleiding Maple 10 Het gebruik van verzamelingen is hier handig, omdat dan de twee verzamelingen verenigd kunnen worden met union en dat kan met lijsten niet zo gemakkelijk. Na het vegen wordt er standaard toch altijd een lijst geleverd. Het rekenen met verzamelingen is uiteengezet in paragraaf 4.8, bijvoorbeeld de vereniging (union) van twee verzamelingen. Er kan dus nu een verzameling (een lijst mag ook) polynomen opgesteld worden waarop we Gröbner los kunnen laten, zodat er een eleganter systeem van polynomen ontstaat. Let wel op dat het Gröbner-pakket geactiveerd wordt met with(groebner) voordat Maple het commando Basis kan gebruiken. In één oogopslag zie je na het vegen dat de waarde van d dus 69 oplevert. (Immers d 69 = 0 a 4 + b 4 + c 4 d = 0.) Dus het antwoord op de vraag is: a 4 + b 4 + c 4 = 69. Voorbeeld 7.13 Uitgebreid voorbeeld: stelsel van drie vergelijkingen met drie onbekenden oplossen met Gröbner Gegeven een stelsel van drie vergelijkingen (van hogere graad) met de verzameling onbekenden {x, y, z}. x 2 2xz+5 = 0 3y 2 8z 3 = 0 xy 2 + yz 3 = 0 Dit stelsel vergelijkingen moet opgelost worden, waarbij vermeld wordt dat z in ieder geval tussen 10 en 11 ligt. Dit is typisch zo n geval waarbij er gebruikgemaakt zou kunnen worden van een Gröbner-basis om op onderzoek uit te gaan en een oplossing te formuleren. Misschien zijn er meer oplossingen mogelijk onder deze voorwaarde voor z. Als het een lineair stelsel zou zijn, lag het meer in de lijn van de methoden van de lineaire algebra en was het veegsysteem van Gauss geschikt geweest om het stelsel te onderzoeken (zie paragraaf 8.5.3). Het is onhandig om in dit geval met het commando solve te werken, dus met solve({...},{...}). (Bij het commando solve worden trouwens automatisch de meegegeven polynomen gelijk aan 0 verondersteld, zodat het niet beslist noodzakelijk is om vergelijkingen op te geven.) In het geval dat er op fysische gronden bekend is in welke intervallen de variabelen ongeveer liggen, kan er gewerkt worden met fsolve met opgaaf van deze intervallen, zie blz. 65. In dit geval is er echter te weinig informatie over de variabelen: alleen het interval van de variabele z is bekend. > restart; poly:={x^2-2*x*z+5,3*y^2-8*z^3,x*y^2+y*z^3}; > fsolve(poly,{x,y,z},{z=10..11}); poly := {3y 2 8z 3, xy 2 + yz 3, x 2 2xz+5} fsolve({3y 2 8z 3, xy 2 + yz 3, x 2 2xz+5}, {x, z, y}, {z = }) Dit werkt dus niet, de invoer wordt zoals je ziet teruggegeven na de opdracht metfsolve. We activeren het Gröbner-pakket en met het commando IsProper komen we er achter of dit stelsel eigenlijk wel een oplossing heeft! > with(groebner): IsProper(poly); true Dat blijkt wél het geval te zijn. Het is dus de moeite waard om op zoek te gaan naar mogelijke oplossingen van het stelsel onder de gegeven voorwaarde. Van het stelsel polynomen wordt eerst een Gröbner-basis gemaakt.
147 7 Formulemanipulatie 135 > nieuw:=basis(poly,plex(x,y,z)); nieuw := [9z 9 96z z z 3, 3z z 7 40z z 3 y, 8z 3 + 3y 2, 9z 8 96z z xz 3, x 2 2xz+5] Let op de volgorde van elimineren met plex, zodat je in ieder geval één polynoom krijgt met alleen de variabele z erin. Het kan zijn dat er met Basis een lijst polynomen wordt gegenereerd die meer polynomen bevat dan de verzameling of lijst waarmee je begon zoals hier het geval is. Kies nu de polynoom waarin maar één variabele voorkomt: hier is dat de eerste van de lijst nieuw. Deze polynoom is van de negende graad in z. Er zijn dus theoretisch in C negen nulpunten te bepalen van deze polynoom (probeer met factor(nieuw[1],complex)). Je kunt ook een grafiek maken van deze polynoom in z en het (reële) nulpunt numeriek bepalen dat in het gegeven interval ligt. Onderzoek de polynoom grafisch (zie figuur 7.1). > plot(nieuw[1],z=8..12); 6e+09 5e+09 4e+09 3e+09 2e+09 1e z Figuur 7.1 > z1:=fsolve(nieuw[1],z=10..11); subs(z=z1,nieuw[2]); z1 := y Op deze wijze ben je aan het terugsubstitueren. Kies steeds de meest geschikte polynoom totdat alle variabelen bekend zijn. Vervolgens kan de oplossing geformuleerd worden. In dit voorbeeld is er slechts één oplossing onder de voorwaarde dat z [10, 11]. > y1:=solve(%=0,y); subs(z=z1,nieuw[4]); > x1:=solve(%=0,x); > [x,y,z]=[x1,y1,z1]; y1 := x x1 := [x, y, z] = [ , , ] Als er op fysische gronden wél genoeg informatie zou zijn over alle onbekenden, had je het met fsolve kunnen proberen. > fsolve(poly,{x,y,z},{z=10..11,x=20..21,y= }); {x = , y = , z = }
148 136 Handleiding Maple Optimaliseren Optimaliseren algemeen Er is een geheel nieuw pakket gekomen vanaf Maple 9.5 voor het optimaliseren van allerlei functies, die in dit verband ook wel doelfuncties genoemd worden. Eventuele extra voorwaarden in de vorm van ongelijkheden waaraan de beslissingsvariabelen moeten voldoen (restricties of constraints) of beperkingen (bounds) van het domein van de variabelen kunnen meegegeven worden. Ook kan het programma naar lokale extrema zoeken van zo n doelfunctie. Met commando s uit dit Optimization-pakket, activeren met with(optimization), kan ook het een en ander gevisualiseerd worden. Het rekenen gaat overigens geheel numeriek met hardware float die niet te beïnvloeden is met Digits. Met evalf kan een uitkomst eventueel afgerond worden naar een kleiner aantal significante cijfers en met displayprecision (zie blz. 7) is het aantal decimalen dat op het scherm verschijnt, in te stellen. Er kan binnen dit pakket gekozen worden voor verschillende numerieke methoden. Meestal is uitstekend te werken met de standaardmethode die automatisch door het programma zelf gekozen wordt naar aanleiding van de soort doelfunctie die geoptimaliseerd moet worden. Zo hebben we in de voorbeelden 5.6 en 5.7 een (niet lineaire) functie van twee variabelen bestudeerd en daarvan het minimum gezocht. Met behulp van Minimize en Maximize uit het Optimization-paket is snel een en ander te berekenen en eventueel te visualiseren, waarbij automatisch de methode aangeroepen wordt voor bijvoorbeeld niet-lineaire problemen of andersoortige problemen (zie paragraaf 7.5.2). Ook kunnen lineaire problemen (paragraaf 7.5.3) herkend worden en daarop wordt automatisch de geëigende methode toegepast (lineair programmeren). Het resultaat is in één keer te verkrijgen. Als je informatie wilt hebben over de procedures die onderweg gehanteerd worden en over de methode die gebruikt is, kan deze informatie verkregen worden door het informatieniveau op maximaal 5 te zetten voor de commando s in dit pakket met infolevel[optimization]:=5;. Voorbeeld 7.14 Het minimaliseren van de doelfunctie f(x,y) = x 3 + y 3 6xy > restart;with(optimization):interface(displayprecision=3): infolevel[optimization]:=5: f:=(x,y)->x^3+y^3-6*x*y; Minimize(f(x,y)); f := (x, y) x 3 + y 3 6xy [ 8.000, [x = 2.000, y = 2.000]] Toelichting: Je kunt dus binnen het Optimization-pakket direct naar het minimum van de functie vragen met Minimize en als je er niets bij vermeldt, krijg je het lokale minimum van deze doelfunctie samen met het punt waar het minimum plaatsvindt. Daarbij krijg je de nodige informatie over de gebruikte methode (hier niet afgedrukt) als je gekozen had voor de waarde 5 bij het instellen van infolevel. (NLP betekent bijvoorbeeld: Niet Lineair Probleem.) De berekeningen worden gedaan met hardware float en daarom is het wel handig om met displayprecision het aantal decimalen die op het scherm verschijnt wat te beperken. Voorbeeld 7.15 Het minimaliseren van een functie met een Maplet > restart;f:=(x,y)->x^3+y^3-6*x*y; Optimization:-Interactive(f(x,y)); In het Maplet dat er ongeveer uit komt te zien zoals de figuur in voorbeeld 7.16, is het mogelijk om allerlei instellingen te doen, zoals het invoeren van vergelijkingen of intervallen voor de variabelen waarbinnen je wilt gaan zoeken. Het kiezen van een methode is niet beslist noodzakelijk: je kunt ook door middel van het aanklikken van default het programma de
149 7 Formulemanipulatie 137 methode laten bepalen. Als er geen beginwaarden opgegeven worden, zoekt het programma zelf een geschikte beginwaarde. Je kunt ook naar een maximum zoeken. Verder kan gekozen worden voor verschillende uitvoeren die in het werkblad als uitkomst komen te staan van de acties in het Maplet. De uitvoer kan in de vorm van een grafiek, de oplossing van het probleem of het commando om tot de oplossing te komen, worden gegeven Optimalisatie-methodes De methodes die gebruikt worden binnen het Optimization-pakket voor het minimaliseren of maximaliseren van een doelfunctie (objective function) worden bij het gebruik van Maximize en Minimize door het programma zelf gekozen naar aanleiding van de aangeboden doelfunctie en de gegeven restricties. De methode kan echter ook zelf door de gebruiker gekozen worden. Er bestaat dus de methode van de NLP-solver voor niet lineaire problemen zoals voorbeeld Verder is er de LP-solver voor Lineair Programmeren. Zie daarvoor uitgebreide voorbeelden paragraaf Voor het overige is er nog de QP-solver die speciaal bedoeld is voor kwadratische doelfuncties. Bij het minimaliseren van bijvoorbeeld de functie 2 x + 5y + 3x 2 + 3xy + 2y 2 onder de voorwaarde x y 2 wordt bij Minimize automatisch deze methode aangeroepen. Je kunt echter ook metéén intikken: > Optimization:-QPSolve(2*x+5*y+3*x^2+3*x*y+2*y^2,{x-y>=2}); Zonder verdere opties wordt het minimum van de doelfunctie berekend onder de gegeven voorwaarde. Een andere mogelijkheid is met een Maplet met het aanklikken van de kwadratische methode: > Optimization:-Interactive(2*x+5*y+3*x^2+3*x*y+2*y^2,{x-y>=2}); Het voordeel hiervan is dat je nog de beschikking hebt over een grafische visualisatie van dit probleem en eventuele andere instellingen. Ten slotte is er nog de methode van de kleinste kwadraten (LeastSquare): de LS-solver. Zie daarvoor in de helpfunctie bij?lssolve Lineair programmeren Bij het lineair programmeren is er sprake van een doelfunctie die lineair is in een aantal beslissingsvariabelen. Deze functie moet maximaal of minimaal zijn, mede afhankelijk van het definitiegebied dat beschreven wordt door een aantal voorwaarden (restricties) in de vorm van lineaire ongelijkheden. Voor het lineair programmeren kun je het simplex-pakket gebruiken (activeren met with(simplex)) met daarin een aantal handige commando s die specifiek voor het lineair programmeren geschikt zijn zoals het werken met slack-variabelen en het simplex-tableau. Binnen dit pakket kan er ook analytisch gerekend worden. Echter met de mogelijkheden van het nieuwe Optimization-pakket wordt voor het simplex-pakket verwezen naar de cd-rom en verder naar de website behorende bij dit boek. Voor de voorbeelden van Lineair Programmeren wordt hier bij voorkeur gewerkt binnen het Optimization-pakket. Voorbeeld 7.16 Doelfunctie met twee beslissingsvariabelen met een Maplet We nemen als voorbeeld de doelfunctie van twee beslissingsvariabelen f(x,y) = x+y. De voorwaarden worden gegeven door de lineaire ongelijkheden 4x+3y 5 en 3x+4y 4 en de doelfunctie f(x, y) moet gemaximaliseerd worden. De verzameling ongelijkheden
150 138 Handleiding Maple 10 wordt in de volgende Maple-sessie C genoemd en voor de berekeningen moeten deze altijd ingevoerd worden met een van de tekens of die je met >= en <= typt, dus géén < of >-teken. > restart; with(optimization): interface(displayprecision=3): f:=x+y; C:={4*x+3*y<=5, 3*x+4*y<=4}; > Interactive(f,C); f := x+y C := {4x+3y 5, 3x+4y 4} [1.286, [x = 1.143, y = 0.143]] Toelichting: Na het opgeven van de doelfunctie f en de verzameling van de ongelijkheden kun je beschikken over een Maplet waar een en ander is in te stellen. Je kunt bijvoorbeeld de methode (lineair) instellen en dat het om een maximum gaat. Standaard is het minimum altijd ingesteld. Het spreekt vanzelf dat visualisatie uiteindelijk alleen mogelijk is als er sprake is van twee variabelen. In het Maplet moet dan wel eerst de oplossing geformuleerd worden voordat de grafiek op te vragen is. In de figuur van het Maplet Interactive is voor de instelling gekozen dat de lineaire ongelijkheden als verticale vlakken in de ruimte weergegeven worden. De doelfunctie is hier dus een hellend vlak in de ruimte waarvan de functiewaarde gezocht moet worden die zo groot mogelijk is binnen de restricties van de ongelijkheden. Een en ander is ook gevisualiseerd in paragraaf Als je het Maplet verlaat, kan gekozen worden voor een bepaalde uitvoer. Hier is gekozen voor oplossing als uitvoer. Het maximum van f : (1.286) treedt dus op in het punt (x, y) = (1.143, 0.143). De instellingen van displayprecision hebben geen effect binnen het Maplet maar wel in de uitvoer van de sessie. Voorbeeld 7.17 Doelfunctie met twee beslissingsvariabelen Er zijn twee manieren om hetzelfde uit te rekenen als in voorbeeld Begin weer, zoals in dat voorbeeld, met het opgeven van de doelfunctie en de verzameling ongelijkheden. > with(optimization): LPSolve(f,C,maximize); Met deze Lineair Programmeren-solver komt hetzelfde antwoord als bij voorbeeld Er moet met een optie wel opgegeven worden dat het om maximaliseren gaat. Standaard wordt anders naar het minimum gezocht. Als de infolevel[optimization] hoger gezet wordt: maximaal 5, komt er meer informatie vrij over de gevolgde methodes en procedures.
151 7 Formulemanipulatie 139 > infolevel[optimization]:=5: Maximize(f,C); Hierbij komt behalve de extra informatie ook weer dezelfde uitvoer als bijlpsolve. Om een idee te krijgen wat je nu eigenlijk gedaan hebt, kan dit probleem geïllustreerd worden met figuur 7.2 die je zelf kunt maken met behulp van onder andere het commando inequal uit het plotpakket. Zie verder paragraaf Voorbeeld 7.18 Lineair programmeren met vier beslissingsvariabelen De doelfunctie x 1 + 2x 2 2x 3 + x 4 met de vier restricties: x 1 + x 2 + x 3 + x 4 12 x 1 + 2x 2 + 2x 3 + 2x 4 4 x 1 + 3x 2 x 3 20 x 3 + x 4 3 > restart; with(optimization): doel:=x[1]+2*x[2]-2.0*x[3]+x[4]; doel := x 1 + 2x 2 2.0x 3 + x 4 > restricties:=[12>=x[1]+x[2]+x[3]+x[4],x[1]+2.0*x[2]+2*x[3]+2*x[4] >= 4, x[1]+3*x[2]-x[3] <= 20,3 <= -x[3]+x[4]]; restricties := [x 1 + x 2 + x 3 + x 4 12, 4 x x 2 + 2x 3 + 2x 4, x 1 + 3x 2 x 3 20, 3 x 3 + x 4 ] > evalf[4](minimize(doel,restricties,assume=nonnegative)) ; [ 1.500, [x 1 = 0., x 2 = 0., x 3 = 4.500, x 4 = 7.500]] Toelichting: De doelfunctie is een lineaire functie van vier variabelen. De restricties worden ingevoerd als een lijst (mag ook met een verzameling). Omdat er numeriek gerekend wordt met hardware float wordt metéén de benadering met 4 significante cijfers opgevraagd door middel van evalf[4]. Verder is het voor dit probleem belangrijk dat alle variabelen groter dan 0 zijn en daarom kan er in één keer een optie assume=nonnegative worden meegegeven. Het zal duidelijk zijn dat een visualisatie niet tot de mogelijkheden behoort De grafiek van het toelatingsgebied bij lineair programmeren De grafiek van het toelatingsgebied kan met behulp van het commando inequal uit het plotpakket worden gemaakt als de verzameling of lijst van de ongelijkheden gegeven is. Het plotpakket moet dan wel eerst geactiveerd worden. Houd er rekening mee dat Interactive ook in het plotpakket voorkomt en daar een andere betekenis heeft. Voorbeeld 7.19 Gebaseerd op voorbeeld 7.16 maken we nu de volgende grafiek die aangeeft hoe het werkt met lineair programmeren. > restart: with(plots): f:=x+y: C:={4*x+3*y<=5, 3*x+4*y<=4}: p1:=inequal(c,x=-4..4,y=-4..4,optionsfeasible=(color=white), optionsexcluded=(color=gray),optionsclosed=(color=blue,thickness=4)): p2:=inequal({f=-2,f=-1,f=0,f=1,f=2},x=-4..4,y=-4..4, optionsclosed=(linestyle=3)): p3:=textplot({[-3.25,1,"f=-2"],[-3.1,1.9,"f=-1"],[-1.9,1.7,"f=0"], [-1.7,2.8,"f=1"],[1.5,0.6,"f=2"]},font=[TIMES,ITALIC,14]): display({p1,p2,p3},title="lineair programmeren"); Zie figuur 7.2.
152 140 Handleiding Maple 10 f = 1 f = 2 lineair programmeren 4 f = 1 f = 0 2 f = Figuur Toelichting: In één grafiek zijn de twee lijnen die het gebied (ongekleurd) begrenzen waarin de ongelijkheden geldig zijn vet aangegeven. We noemen dit gebied ook wel feasible area of toelatingsgebied. Bovendien is in dezelfde figuur een aantal niveaulijnen getekend, die de verschillende waarden van f aangeven. Deze zijn als evenwijdige lijnen gestippeld in de figuur te zien. Naarmate de lineaire doelfunctie f(x,y) = x + y een grotere waarde krijgt, komt de niveaulijn steeds hoger (meer naar rechts) te liggen. (Je zou f(x,y) ook nog in een driedimensionale grafiek kunnen tekenen, zoals te zien is in de visualisatie van het Maplet uit voorbeeld 7.16.) Uiteindelijk is de grootste waarde die f kan aannemen dus 1.286, als de niveaulijn nog juist door het snijpunt van de twee vetgedrukte lijnen gaat die het toelatingsgebied begrenzen. Voor de opties van het toelatingsgebied (optionsfeasible) is gekozen voor de kleur wit. Voor de opties van het uitsluitingsgebied (optionsexcluded) is gekozen voor de kleur grijs. Voor de grenzen (optionsclosed) kan een speciale lijnstijl, dikte en kleur gekozen worden, hier blauw en vet. Ten slotte is apart een aantal niveaulijnen (ook met optionsclosed omdat het vergelijkingen zijn) met een gestippelde lijnstijl aangemaakt. Alles nu in één figuur met het bekende plotcommando display uit het plotpakket (paragraaf 2.10). Probeer ook eens het Maplet uit het Student-subpakket Precalculus: > Student:-Precalculus:-LinearInequalitiesTutor(C); Figuur 7.3
153 8 Lineaire algebra 8.1 Inleiding De introductie van de vectoren en matrices brengt je in een geheel ander gebied van de wiskunde dan dat waarin je tot nu toe voornamelijk hebt gewerkt, namelijk in de lineaire algebra. Een korte introductie van de vectoren vind je in paragraaf 4.9 en van de matrices in paragraaf Daarin staat ook informatie over de exportmogelijkheden van matrices en vectoren en vooral ook de compatibiliteit met andere applicaties zoals Excel en MatLab. In Maple zijn de commando s die betrekking hebben op het gebied van de lineaire algebra in een groot pakket bijeengebracht met de naam LinearAlgebra. Steeds als je gebruik wilt maken van deze commando s (die met hoofdletter beginnen), moet dit pakket geactiveerd worden. Als je with(linearalgebra); met een puntkomma afsluit, worden alle beschikbare commando s in dit pakket getoond. Een groot aantal zul je in dit hoofdstuk leren kennen en van de overige commando s kan altijd nog informatie opgevraagd worden met de bekende methode met het vraagteken (zie paragraaf 1.8). Een paar algemene dingen kunnen zonder commando met het rechtermuisknopmenu gedaan worden, maar om reden van reprodueerbaarheid van het werkblad wordt er zo weinig mogelijk op deze manier gedaan. Laat je niet van de wijs brengen door eventuele waarschuwingsmeldingen bij het activeren van dit pakket. Sommige commando s hebben namelijk binnen een bepaald pakket een andere betekenis dan daarbuiten. De waarschuwingen kunnen eventueel uitgezet worden door middel van interface(warnlevel=0). Zoals we zullen zien, worden de berekeningen met matrices en vectoren in het LinearAlgebrapakket met hardware float gedaan. Er zijn dan veel meer significante cijfers waarmee gerekend wordt dan normaal (met 10). Deze hardware float is ongevoelig voor het aantal significante cijfers dat met Digits ingesteld kan worden. Het is echter wel voorwaarde om met hardware float te rekenen, dat er bij het opgeven van de matrix of vector waarmee gerekend wordt géén variabelen of parameters gebruikt worden en dat er minstens ergens een decimaal getal wordt ingevoerd. Na simplify wordt er overgegaan op software float en kan daarna het aantal decimalen weer ingesteld worden naar wens met evalf. Wordt er echter toch een variabele opgegeven bij het invoeren van de matrix, dan rekent Maple met sofware float die weer in te stellen is met Digits. In de eindberekening zullen we zien dat altijd overgegaan kan worden op een in te stellen aantal significante cijfers met behulp van evalf of fnormal eventueel na simplify. Om nu in één keer van dat grote aantal decimalen af te zijn is het in sommige gevallen aan te raden om aan het begin van de sessie de instellingen te doen voor het aantal decimalen met interface(displayprecision=4) (zie ook blz. 7). Ook is het goed om te weten dat er altijd gerekend wordt in de complexe getallen. Dat is het duidelijkst merkbaar bij het dotproduct (paragraaf 8.2.2). In dit hoofdstuk wordt de basiskennis bijgebracht om te werken met vectoren en matrices. Dit gebeurt in het kort en in de vorm van voorbeelden. Voor meer informatie over dit onderwerp zie de website bij dit boek bij Aanvullingen op de Handleiding Maple en bij informatie over nieuwe versies.
154 142 Handleiding Maple 10 Vanaf Maple 8 is er nog een nieuw pakket geïntroduceerd (VectorCalculus) voor specifieke berekeningen met vectoren. Van dat nieuwe pakket is in paragraaf al een korte introductie gegeven. Een paar belangrijke zaken daarover worden in dit hoofdstuk meegenomen plus een paar voorbeelden die juist eenvoudiger zijn geworden binnen dit nieuwe pakket. Op de website bij dit boek zullen de meer geavanceerde berekeningen en toepassingen met vectoren die binnen dat pakket mogelijk zijn getoond worden. 8.2 Bewerkingen met vectoren Vectoren kunnen op twee manieren worden ingevoerd. Met het commando Vector([..,..,..]), met <..,..,..> of met behulp van paletten (zie afbeelding 1.2). Kies bij het vectorpalet dan voor kolomvector. Deze laatste manier, met het vectorpalet, geeft een invoer die trouwens ook ingetikt kan worden met <..,..,..>. De verschillende manieren kunnen door elkaar gebruikt worden. De vierkante haakjes van het commando Vector zijn ervoor om de volgorde van de kentallen te waarborgen. In paragraaf 4.9 is reeds aangeduid dat beperkte berekeningen buiten het LinearAlgebrapakket gedaan kunnen worden. Echter in dit hoofdstuk zullen we wat uitgebreidere berekeningen met vectoren doen en dan is het handig dat het LinearAlgebra-pakket of het VectorCalculus-pakket reeds geactiveerd is. Geavanceerdere berekeningen met het pakket VectorCalculus vallen buiten het bestek van dit boek, maar worden op de website wel aangestipt bij Aanvullingen op de Handleiding Maple Lineaire bewerkingen Het spreekt vanzelf dat bij het optellen en aftrekken van vectoren, deze van gelijke dimensie moeten zijn. Dat wil zeggen: een gelijk aantal kentallen. Voorbeeld 8.1 Lineaire bewerkingen met vectoren Voor eenvoudige lineaire bewerkingen hoeft er geen pakket geactiveerd te worden (maar dat mag natuurlijk wel). > restart;interface(displayprecision=2): u,v:=vector([1,1,0]),vector([3.2,-2,1]); u, v := 1, > u+2*v+3.5*a*u =u+2*v+3.5*a*u; a u+2v+3.50au= a Toelichting: In bovenstaande sessie is te zien dat in het begin, direct na restart, de instellingen gedaan zijn voor het aantal decimalen die op het scherm getoond worden. Er wordt namelijk bij de berekeningen met vectoren met hardware float gewerkt en dan worden er wel 18 significante cijfers in de uitvoer getoond wat niet erg overzichtelijk is. De vectoren zijn toegekend door middel van een meervoudige toekenning. Dat is gedaan om ruimte te sparen in het werkblad. In dit hoofdstuk zal daarvan wel meer gebruikgemaakt worden. Verder is te zien dat er ten behoeve van een elegante uitvoer gebruik is gemaakt van 2.00
155 8 Lineaire algebra 143 het intikken van een vergelijking en van quotes die de evaluatie vertragen. Zie voor meer informatie over quotes paragraaf Het inwendig product (dotproduct) De begrippen inproduct (DotProduct of met de dot-operator), lengte (Norm), hoek (VectorAngle) en eenheidsvector hebben in elke dimensie betekenis! Het is niet beslist noodzakelijk om hiervoor alleen vectoren die in de R 2 of R 3 gedefinieerd zijn te gebruiken; meer dimensies kan net zo goed! Als er parameters gebruikt worden in de vectoren, is het handig om te weten dat er in de complexe getallen gerekend wordt! Het is misschien belangrijk om in sommige gevallen het programma te laten weten dat de parameters opgevat dienen te worden als reële getallen zoals in het volgende voorbeeld. Voorbeeld 8.2 Inwendig product van twee vectoren > restart;a,b,c,d:=vector([4,-1,1]),vector([2,2,0]),vector([0,1,1]), Vector([p,q,r]); p a, b, c, d := 1, 2, 1, q > a.b =a.b; a.c =a.c; > d.a; 1 0 a. b = 6 a. c = 0 4 p q+ r > d.a assuming p::real, q::real, r::real; 4 p q+r Andere mogelijkheden om het programma te laten weten dat het hier om reële parameters gaat zijn: > LinearAlgebra:-DotProduct(d,a,conjugate=false); > evalc(d.a); > VectorCalculus:-DotProduct(d,a); Toelichting: Het inwendig product van vectoren werkt in alle dimensies en levert altijd een getal op. De notatie van het inproduct van vectoren is a b met een stip ertussen (dot). In sommige boeken zie je (a, b) en in mechanicaboeken a b. In de tekst zou je het inproduct als volgt kunnen noteren. 4 2 a b = 1 2 = = In eenvoudige situaties kan gebruikgemaakt worden van de dot-operator waarvoor géén pakket geactiveerd hoeft te worden. De vectoren a en c staan loodrecht op elkaar, want het inproduct is gelijk aan 0. Bij gebruik van parameters doet het dotproduct iets met de complex geconjugeerde (met een streepje erboven) van deze parameters, terwijl we meestal bedoelen dat parameters in vectoren reële getallen voorstellen. Als we niets te maken willen hebben met complexe 1 r
156 144 Handleiding Maple 10 parameters, moeten we dat het programma laten weten. Binnen het LinearAlgebra-pakket kunnen we dat uitzetten met conjugate=false als optie bij het officiële commando DotProduct. Als je toch met de dot-operator wilt werken, kan een en ander geregeld worden met assume (zie paragraaf 6.4.2) of met evalc (zie paragraaf ). Bij gebruik van vectoren binnen het VectorCalculus-pakket is er geen probleem, want binnen dat pakket gaat het toch over het rekenen met vectoren in de reële getallen. Zie voor het VectorCalculuspakket paragraaf Lengte van een vector De lengte van een vector (met dimensie n) wordt aangeduid met modulusstrepen en berekend met behulp van de tweedemachtswortel uit de som van de kwadraten van de kentallen van de vector. Dit is een hele mond vol, maar eigenlijk is het gewoon de stelling van Pythagoras. Merk op dat de lengte van een vector eigenlijk hetzelfde is als de wortel uit het inproduct van de vector met zichzelf. a = a a a2 n = a a Voorbeeld 8.3 Op twee manieren de lengte van een vector berekenen > restart; a:=vector([4,-1,1]); with(linearalgebra): Norm(a,2); sqrt(a.a); Toelichting: Het commando voor de lengte van een vector is Norm(...,2). Dit commando bevindt zich in het LinearAlgebra-pakket. Het mag ook metnorm(...,euclidean) of met VectorNorm(...,2). Het is de Euclidische norm. De twee duidt op de tweedemachtswortel en op de kwadraten. (Er is namelijk ook nog bijvoorbeeld een 3-norm in de wiskunde. Deze betekent de som van de derde machten en daaruit de derdemachtswortel.) Als met behulp van het menu, dat verkregen wordt door met de rechtermuisknop op de uitvoer van een vector te klikken, gekozen wordt voor Norm, kies dan de Euclidische norm. Op de achtergrond wordt dan automatisch het LinearAlgebra-pakket gebruikt. Werk je echter binnen het VectorCalculus-pakket, dan is het commando ook Norm, maar je hoeft dan niet op te geven welke norm je bedoelt omdat dan automatisch uitgegaan wordt van de Euclidische norm. Zie voorbeeld 8.6 voor een toepassing van dit commando Hoek tussen twee vectoren Zoals bekend is de uitkomst van het inproduct van twee vectoren een getal waarin opgesloten de lengtes van de vectoren en de cosinus van de hoek ϕ die de vectoren met elkaar maken. a b = a b cos(ϕ) cos(ϕ) = a b a b ϕ = arccos( a b a b ) Voorbeeld 8.4 De hoek tussen twee vectoren De hoek tussen de vectoren a en b en tussen a en d. > restart; a,b,d:=vector([4,-1,1]),vector([2,2,0]),vector([p,q,r]); 4 2 p a, b, d := 1, 2, q 1 0 r
157 8 Lineaire algebra 145 > with(linearalgebra):hoek[ab]= VectorAngle(a,b); > convert(vectorangle(a,b),degrees); hoek ab = π 3 60 degrees > hoek[ad]=simplify(vectorangle(a,d),symbolic); hoek ad = arccos( (4 p q+r) 2 6 p 2 + q 2 + r 2) Toelichting: De hoek tussen twee vectoren is gemakkelijk met één commando te berekenen, namelijk metvectorangle uit het LinearAlgebra-pakket. Als je binnen het VectorCalculus-pakket werkt, kun je zonder het LinearAlgebra-pakket te activeren tóch van dit commando gebruikmaken door LinearAlgebra:-VectorAngle als commando te nemen. Echter, de coördinaten moeten dan wel beslíst Carthesiaans zijn. Zo niet, dan moeten ze nog met MapToBasis omgezet worden naar de Carthesiaanse coördinaten zie voorbeeld Soms geeft Maple een antwoord dat anders is dan hier staat afgedrukt, maar dat kan te maken hebben met de gelijkheid arccos(x) = π arccos( x). Houd er echter wel rekening mee dat de hoek in radialen wordt berekend! Eventuele omzetting naar graden is soms gewenst als er in de reële ruimte wordt gerekend, zoals in de R 2 en in de R Eenheidsvector Een eenheidsvector heeft per definitie de lengte 1. De bekende standaard eenheidsvectoren kunnen gemakkelijk worden ingevoerd. Bijvoorbeeld in de R 5 wordt de eenheidsvector e 4 ingevoerd met UnitVector(4,5) van het LinearAlgebra-pakket. Als je bijvoorbeeld een eenheidsvector wilt hebben die dezelfde richting heeft als vector a 0, is niets eenvoudiger dan de vector a te delen door zijn eigen lengte a. Geef de naam a 1 aan deze eenheidsvector in de richting van a. a 1 = a a = = Met Maple gaat het op dezelfde manier en je kunt de kentallen eventueel gaan benaderen. In het LinearAlgebra-pakket is hiervoor het snelle commandonormalize(...,2). Voorbeeld 8.5 De eenheidsvector in de richting van a > restart;with(linearalgebra):interface(displayprecision=4): a:=vector([4.0,-1,1]); a := 1 > a1:=normalize(a,2); a1 :=
158 146 Handleiding Maple 10 Toelichting: De vector is ingevoerd met minstens ergens een decimaal getal. Het rekenen met hardware float bij vectoren is ongevoelig voor de instelling met Digits. Daarom is direct na restart het aantal decimalen die in de uitvoer getoond worden, vastgesteld met displayprecision. TIP: binnen het VectorCalculus-pakket gaat het met hetzelfde commando, maar daar hoeft de optie 2 vanwege de twee-norm er niet beslist bij. Zie ook bij Norm, de lengte van een vector paragraaf Vectorfunctie Het begrip vectorfunctie is al geïntroduceerd in paragraaf 2.6. Het is een vector waarbij de kentallen afhankelijk zijn van één variabele. Voor dit soort functies is het handig om in het VectorCalculus-pakket te werken. Je kunt bijvoorbeeld een plaatsvector s definiëren die in de tijd t verandert. Op ieder moment geeft de vector s de plaats aan waar een stoffelijk punt zich bevindt. Voorbeeld 8.6 Vectorfunctie binnen het VectorCalculus-pakket Gegeven is de vectorfunctie s(t) = [t 2,3t, 5 t ]. In dit geval leent het probleem zich ervoor om in het VectorCalculus-pakket te werken. De vectorfunctie kan tevens als echte functie ingevoerd worden met de pijltjesnotatie, zodat daarvan alle voordelen (zie paragraaf 1.5.6) uitgebuit kunnen worden. > restart: interface(warnlevel=0): with(vectorcalculus): s:=t->vector([t^2,3*t,5/t]): v,a:=d(s),d(d(s)): snelheid:=norm(v(t)); versnelling:=norm(a(t)); snelheid := 9+4t t 4 versnelling := t 6 > plot([snelheid,versnelling],t=1..10,thickness=[2,1],color=black, legend=["snelheid","versnelling"]); Zie figuur t snelheid versnelling Figuur 8.1 > t1:=fsolve(diff(snelheid,t)=0,t,0..2); t1 := Het minimum van de baansnelheid treedt dus op bij tijdstip t = Vergis je niet! Het is namelijk geen rechtlijnige beweging; de versnellingsvector hoeft dan dus niet gelijk aan
159 8 Lineaire algebra 147 de nulvector te zijn. Immers de versnelling kan ook in een andere richting werken dan de richting van de baan! Stel dat op tijdstip t = 2 het punt zich in punt P van de baan bevindt. > sp,vp,ap:=s(2),v(2),a(2); sp, vp, ap := 4e x + 6e y e z, 4e x + 3e y 5 4 e z, 2e x e z > with(plots):baan:=spacecurve(s(t),t=1..5,thickness=3,color=black, axes=boxed,orientation=[166,80],labels=["x"," Y","Z"]): pijl_s:=arrow(sp, color=blue,shape=arrow): pijl_v:=arrow(sp,vp,color=black,shape=arrow,thickness=3,linestyle=2): pijl_a:=arrow(sp,ap,color=red,shape=arrow,thickness=2): tekst:=textplot3d({[sp[1],sp[2],sp[3],"p"],[(sp+vp)[1],(sp+vp)[2], (sp+vp)[3],"snelheid"],[(sp+ap)[1],(sp+ap)[2],(sp+ap)[3],"versnelling"] },color=black,align={right,below},font=[times,italic,14]): display({baan,pijl_s,pijl_v,pijl_a,tekst},title="vectorfunctie met plaatsvector, snelheidsvector en versnellingsvector"); Zie figuur 8.2. VECTORFUNCTIE met plaatsvector, snelheidsvector en versnellingsvector Z X versnelling P snelheid Y 0 Figuur 8.2 Toelichting: De uitvoer van de toekenning van de vectorfunctie s(t) in pijltjesnotatie is niet afgedrukt. Deze verschijnt namelijk als gecodeerde procedure op het scherm evenals de afgeleiden v(t) en a(t) die daarna gedeclareerd worden met behulp van de D-operator. Dit alles gaat prima in het VectorCalculus-pakket! Gemakkelijk is de lengte van de snelheidsvector (baansnelheid) en die van de versnellingsvector te bepalen met Norm. Let daarbij wel op dat de functies aangeroepen worden met s(t) en v(t) en a(t), omdat s met de pijltjesnotatie is ingevoerd en de andere functies zijn verkregen door te werken met de D-operator. Je krijgt dan ook weer echte functies!. De baansnelheid v(t) is een gewone functie van t en je kunt in een grafiek zien hoe de groottes van baansnelheid en versnelling a(t) = dv(t) verlopen als functie van t. Om bijvoorbeeld het minimum van de absolute dt snelheid (baansnelheid) te weten te komen moet echter opgelost worden: d v(t) dt = 0 en dat is iets anders dan dat de versnelling gelijk is aan 0. Dus op tijdstip t = t 1 = is de snelheid minimaal. De versnellingsvector die er dan nog wel is en niet gelijk aan de nulvector, zorgt
160 148 Handleiding Maple 10 dus niet voor toe- of afname van de baansnelheid op dat moment maar zorgt ervoor dat het punt dat de baan beschrijft door de bocht komt. De baan wordt gepresenteerd in de grafiek van figuur 8.2 met behulp van spacecurve (zie paragraaf 2.6.2). TIP: voor een titel van de figuur die meer dan één regel beslaat, ga je in de invoer met Shift-Enter naar een nieuwe regel. Verder worden er nog in het punt P, waarvoor geldt t = 2 de plaatsvector, de snelheidsvector (gestippeld) en de versnellingsvector (vet) getekend. Omdat de vectorfunctie als functie met de pijltjesnotatie is ingevoerd, zijn deze vectoren in P gemakkelijk te genereren. Zie voor het tekenen van vectoren paragraaf 2.13 en voorbeeld Voor een vervolg hierop om de afgelegde weg langs de kromme te berekenen met integratie, zie voorbeeld Vectorveld Een vectorveld (vector field) is, zoals de naam al voorspelt, een veld met vectoren in het platte vlak of in de ruimte. De kentallen van een vectorveld in het platte vlak zijn functies van twee variabelen en de kentallen van een vectorveld in de ruimte zijn allen functies van drie variabelen. VF 2d = ( f 1 (x,y) f 2 (x,y) ) f 1 (x,y,z) VF 3d = f 2 (x,y,z) f 3 (x,y,z) Voorbeeld 8.7 Vectorveld in het platte vlak Het vectorveld in het platte vlak kan gevisualiseerd worden met het commandofieldplot uit het plotpakket. (Voor vectorvelden in de ruimte met fieldplot3d.) De betekenis is dat in ieder punt (x, ( y) van het ) platte vlak een vector getekend kan worden. x+y Neem bijvoorbeeld het vectorveld, dan is er bijvoorbeeld in punt (4,2) een pijl 4x+y ( ) ( ) 6 2 te teken en in bijvoorbeeld punt ( 1, 1) is de pijl te tekenen, enzovoort Op deze manier krijg je een heel veld van ongelijke pijlen. > restart; with(plots): fieldplot([x+y,4*x+y],x=-5..5,y=-5..5, arrows=slim,title="vectorveld in platte vlak"); Zie figuur 8.3. vectorveld in platte vlak y x Figuur 8.3
161 8 Lineaire algebra 149 Toelichting: Voor het commando fieldplot van het gewone plotpakket is een vector nodig, maar een lijst die de vector representeert, kan ook. Een toepassing van een vectorveld is te vinden in voorbeeld TIP: een aardige tutor over vectorvelden (zowel in het platte vlak als in de ruimte) in de vorm van een Maplet is te bereiken via > Student[VectorCalculus][VectorFieldTutor](); Zie ook voorbeeld 11.5 voor een toepassing van vectorvelden Het uitwendig product (crossproduct) Het uitproduct (uitwendig product of crossproduct) is, evenals het inproduct (dotproduct), het product van twee vectoren. Maar er is een groot verschil met het inproduct! Het uitproduct kan alleen maar in de R 3. Bovendien is de uitkomst van dit uitproduct weer een vector in de R 3 en wel een vector die loodrecht staat op de vectoren waarmee je begon. De notatie is a b (met een kruisje). In sommige boeken zie je de notatie a b. Bij Maple is er het commando CrossProduct om snel het uitproduct te berekenen van twee vectoren in de R 3. Nog sneller is het teken &x voor het uitproduct. Tik dan wel aan weerszijden van dit teken een spatie! Beide manieren werken zowel in het LinearAlgebra-pakket als in het VectorCalculus-pakket. (Mocht je je vergissen in de dimensies, dan krijg je een duidelijke waarschuwing: error: both Vectors must have dimension 3.) Nog een verschil met het inproduct is dat de volgorde nu wel van belang is: a b b a. Verder wordt bij het uitproduct het getal 0 niet als een vector opgevat, terwijl dat bij het inproduct wél het geval is! Denk eraan dat CrossProduct dus alleen werkt op vectoren uit de R 3. Bekend is de definitie voor het uitproduct (crossproduct) met betrekking tot de kentallen van de vectoren a en b: a b = a 1 a 2 a 3 b 1 b 2 b 3 a 2 b 3 a 3 b 2 = a 3 b 1 a 1 b 3 a 1 b 2 a 2 b 1 Bekend is ook de eigenschap van de lengte van het uitproduct: a b = a b sinϕ Voorbeeld 8.8 Het uitproduct en loodrechte stand > restart; with(linearalgebra): a,b:=vector([3,-1,1]),vector([2,2,0]); 3 2 a, b := 1, 2 > c:=crossproduct(a,b); > vlak:=alpha*a+beta*b; 1 2 c := 2 3α+2β vlak := α+2β 8 α 0
162 150 Handleiding Maple 10 > with(plots): pijl_a:=arrow(a,color=blue):pijl_b:=arrow(b,color=blue): pijl_c:=arrow(c,color=black,shape=arrow): vlak_ab:=plot3d(vlak,alpha=-1..1,beta=-1..1,color=gray,style=patchnogrid): display({vlak_ab,pijl_a,pijl_b,pijl_c},axes=boxed,labels=[x,y,z], scaling=constrained,orientation=[-10,60], title="het uitproduct c staat loodrecht op het vlak door a en b"); Zie figuur 8.4. Figuur 8.4 Het uitproduct c staat loodrecht op het vlak door a en b 8 6 z x y Toelichting: In dit voorbeeld kun je de berekening a b = c met de hand eventueel controleren. Merk ook op dat het uitproduct loodrecht staat op de vector a én loodrecht op de vector b. Deze controle kan gemakkelijk met het inproduct uit het hoofd gedaan worden. Als het inproduct gelijk is aan 0, heb je te maken met loodrechte stand. Controleer ook eens de eigenschap dat a b = a b sin ϕ met de commando s uit de vorige paragrafen. Het vlak door a en b is geformuleerd met een parametervoorstelling van een vlak door de oorsprong met a en b als richtingsvectoren: vlak ab = αa+βb = [3α+ 2β, α+ 2β,α] Deze parametervoorstelling met twee parameters die er lineair in zitten, kan met plot3d in een grafiek worden gemaakt. Voor het tekenen van pijlen zie paragraaf 2.13 en Verder is in figuur 8.4 gezorgd voor scaling=constrained, zodat de assen 1:1 zijn en daardoor goed te zien is dat vector c loodrecht staat op het vlak door a en b. Deze gehele sessie kan onveranderd ook binnen VectorCalculus gedaan worden met dezelfde commando s. TIP: kijk ook eens in het subpakket LinearAgebra van het Student-pakket en geef het commando: > Student:-LinearAlgebra:-CrossProductPlot(a,b); Je krijgt dan een soortgelijke figuur als 8.4. Zie verdere informatie over het Student-pakket op de website bij dit boek. Het pakket is nog in ontwikkeling maar bevat tal van goede en snelwerkende visualisaties.
163 8 Lineaire algebra Bewerkingen met matrices Het werken met matrices (meervoud van matrix) vereist het activeren van het LinearAlgebrapakket. Echter sommige eenvoudige berekeningen met matrices kunnen ook buiten dit pakket gedaan worden. Het LinearAlgebra-pakket wordt geactiveerd met with(linearalgebra): zoals aangegeven aan het begin van dit hoofdstuk. In dit pakket bevinden zich tal van handige commando s om het werken met matrices gemakkelijk te maken. De lastige berekeningen om bijvoorbeeld de inverse van een matrix te bepalen zijn nu met één commando verleden tijd geworden. Het is zelfs mogelijk om matrices met parameters te inverteren! In enkele gevallen zal verwezen worden naar het LinearAlgebra-subpakket binnen het Student-pakket, omdat daarin een aantal goede visualisaties en handige tools te gebruiken zijn. Verder is dat subpakket nog in ontwikkeling en op de website bij dit boek staat daarover meer informatie. In hoofdstuk 4 paragraaf 4.10 is al een introductie gegeven van de matrix en hoe deze ingevoerd kan worden. Ook met het werken met matrices geldt weer: voer je numerieke getallen in, dan gaat Maple ogenblikkelijk over op de numerieke rekenwijze met floating point. De berekeningen gaan meestal met hardware float die na simplify wel weer terug te voeren is tot een kleiner aantal significante cijfers met evalf of fnormal. Handiger is het om met displayprecision te werken (zie blz. 7). Als er sprake is van parameters, wordt er trouwens níet met hardware float gerekend maar met software float. Ook moet er rekening gehouden worden met het feit dat er binnen Maple in de complexe getallen gerekend wordt. Binnen het LinearAlgebra-subpakket van het Student-pakket is het instelbaar dat alle letters als reële getallen opgevat worden Combineren van matrices Heb je grotere matrices nodig, dan kun je een aantal kleine matrices aan elkaar koppelen. Het snelst gaat dat met gebruikmaking van het matrixpalet (zie blz. 9), maar kan ook gewoon ingetikt worden. Het is ook mogelijk een aantal vectoren te combineren tot een matrix of bepaalde kolommen van een matrix eruit te halen en er apart mee verder te werken. Zie voor meer voorbeelden paragraaf 8.4. Voorbeeld 8.9 Matrices combineren Let op het naast elkaar en het onder elkaar plaatsen van matrixes met behulp van het matrixpalet. > restart; with(linearalgebra): A:=Matrix([[2.0, 0, a], [1, 0, 0], [a, 6.0, 3]]); a A := a > B:=<<A A>>;C:=<<A, A>>; B := a a a a 6.0 3
164 152 Handleiding Maple a a C := a a Eén of meer kolommen van een matrix apart declareren: > k1,k2:=column(b,[3,4]); a 2.0 k1, k2 := 0, 1 > whattype(k1); 3 Vector column Het blijkt dus dat deze kolommen als vector opgevat kunnen worden en er kan als zodanig verder mee gewerkt worden. Zie ook voorbeeld 8.18 en voorbeeld a Getransponeerde matrix, determinant en inverse matrix Als je de rijen en kolommen van de matrix wilt omwisselen, gebruik je het commando Transpose. Om de inverse van A te berekenen, gebruik je het commando MatrixInverse. (Deze kan ook met A ( 1) berekend worden.) Alleen van vierkante matrices kan de inverse bepaald worden en dan bovendien nog van reguliere matrices (dus niet van singuliere matrices). Als een vierkante matrix regulier is, is de determinant ongelijk aan nul! Voorbeeld 8.10 Manipulaties met een matrix > restart; with(linearalgebra):interface(displayprecision=4): A:=Matrix([[2, 0, a], [1, 0, 0], [a, 6, 3]]); 2 0 a A := > Transpose(A); > Determinant(A); > A_inv:=MatrixInverse(A); A inv := a a a 0 3 6a a2 1 2a 6a a a
165 8 Lineaire algebra 153 > subs(a=2.1,a_inv); > MatrixInverse(%); Toelichting: Verstandig is het om eerst het LinearAlgebra-pakket te activeren voordat er met matrices gerekend gaat worden. Eerst worden de rijen en kolommen omgewisseld met Transpose. Na een controle van de determinant met Determinant, wordt de inverse matrix van A exact berekend met MatrixInverse. Het zal duidelijk zijn dat a dan ongelijk aan nul moet zijn. Als de vierkante matrix regulier is, dan is de determinant ongelijk aan 0 en kan de inverse zelfs exact bepaald worden als er geen decimale getallen opgegeven worden. Er kan ook een parameter voorkomen in de matrix. Zodra er voor de parameter een waarde wordt ingevuld met decimale punt en er wordt daarna een berekening gedaan, rekent Maple met hardware float (veel meer significante cijfers en weinig last van afrondingen). Om te voorkomen dat de uitvoer onoverzichtelijk wordt, is in het begin dedisplayprecision op 4 gezet. Omdat er in totaal twee keer geïnverteerd is, levert de laatste matrix van deze sessie weer de matrix A met de waarde van a = 2.1 ingevuld Matrixoptelling, -vermenigvuldiging en eenheidsmatrix In het volgende voorbeeld bekijken we een paar berekeningen met toelichting. Voorbeeld 8.11 Berekeningen met matrices Gegeven twee matrices A en B. Het spreekt vanzelf dat de matrices van gelijke dimensies moeten zijn bij lineaire bewerkingen. Er wordt wel voor gewaarschuwd mocht dat niet het geval zijn. > restart; with(linearalgebra): A,B:=Matrix([[1,2],[3,4]]),Matrix([[b,6.5],[8.1,-2]]); [ ] [ ] A, B := 1 2 b 6.5, > A+c*B; [ ] 1+cb 2+6.5c > subs(c=2,b=3,%); > A. B; B. A; [ [ 3+8.1c [ 4 2c ] b ] 3b ] b b
166 154 Handleiding Maple 10 Toelichting: De lineaire bewerking A + c B gebeurt op volkomen natuurlijke wijze evenals de substitutie. Voor het vermenigvuldigen van matrices kan de dot-operator gebruikt worden, net als bij het inproduct van vectoren. Voor lineaire bewerkingen is het niet beslist nodig dat het LinearAlgebra-pakket wordt geactiveerd, maar hier is dat wel gedaan. Bij matrixvermenigvuldiging moeten de dimensies, net als bij de optelling, aan bepaalde voorwaarden voldoen (hoewel deze voorwaarden niet met elkaar overeenkomen). Bovendien is de vermenigvuldiging in tegenstelling tot de optelling niet commutatief. Dat wil zeggen dat in het algemeen A B B A (uitzonderingen daar gelaten). Er is een speciaal teken voor de matrixvermenigvuldiging en dat is de dot-operator. Typ aan weerskanten een spatie van de stip, vooral als je met getallen werkt, om verwarring met de decimale punt te voorkomen. Voorbeeld 8.12 De eenheidsmatrix Zoals bekend levert de matrixvermenigvuldiging A A 1 = A 1 A de eenheidsmatrix. Een gemakkelijke manier om de eenheidsmatrix te krijgen is gewoon een vierkante matrix die je al hebt (van de gewenste dimensies), vermenigvuldigen met zijn inverse. (Noem deze eenheidsmatrix natuurlijk niet I.) Je kunt ook gewoon het getal 1 typen, dan wordt deze bij de berekening wel opgevat als de eenheidsmatrix in de vereiste dimensies. Een vier bij vier eenheidsmatrix kan op de volgende twee manieren gemaakt worden: > Matrix(4,4,shape=identity); > IdentityMatrix(4); Voorbeeld 8.13 Vermenigvuldigen en optellen Ga zelf na wat het effect is van de getallen 0, 1 en 2 bij matrixvermenigvuldiging en -optelling. De uitwerkingen zijn hier niet afgedrukt. > restart; with(linearalgebra): A:=Matrix([[1, 2], [3, 4]]); > A+1; A+2; 2. A; A. A; A^2; A-A; TIP: ga ook eens na of (A+1) 2 = A 2 + 2A Matrices en vectoren Matrices worden vaak in verband gebracht met vectoren. De kolommen van een matrix kunnen bijvoorbeeld opgevat worden als vectoren. Je kunt een matrix opbouwen met behulp van vectoren. Eigenvectoren van een matrix kunnen bepaald worden. Een matrix kun je toepassen op een vector. Allemaal voorbeelden van het feit dat matrices en vectoren iets met elkaar te maken hebben. Zoals je hebt gezien in paragraaf 8.3 en 4.10 kun je een matrix rechtstreeks intikken, (eventueel met behulp van het matrixpalet), maar je kunt ook de matrix opbouwen met behulp van reeds ingevoerde matrices of vectoren. Als er eerst vectoren worden gedefinieerd, kunnen de kolommen van de matrix daarmee worden opgebouwd. Zie daarvoor voorbeeld Er kunnen op deze manier zelfs kolommen aan een matrix worden toegevoegd. Je kunt de aaneenschakeling zo lang maken als je wilt. Als je handig bent met het bouwen van matrices, kan dat heel wat tikwerk besparen. Houd wel rekening met de dimensies van de koppelelementen. Voorbeeld 8.14 Matrices en vectoren Gegeven zijn de vectoren a, b en c. Deze eerste vormen de kolommen van de matrix M = matrix(a b). Zo n koppeling leidt altijd tot een matrixstructuur van het resultaat, ook al zijn de bouwstenen niet altijd matrices.
167 8 Lineaire algebra 155 > restart; with(linearalgebra): a,b,c:=vector([p,q,r]),vector([3,0,0]),vector([2,4]); p 3 [ ] 2 a, b, c := q, 0, 4 r 0 > M:=<<a b>>; p 3 M := q 0 r 0 > M,maal,c = M. c; p 3 q 0 r 0, maal, [ 2 4 ] = 2 p+12 2q 2r Toelichting: Van de twee vectoren a en b is een matrix M gemaakt. De vermenigvuldiging van de matrix M met de vector c, dus M c, kan alleen in deze volgorde. De dot-operator is niet commutatief. Er is een trucje toegepast voor de lay-out met het intikken van een rij, zodat je de matrix en de vector naast elkaar in de uitvoer ziet met maal ertussen en achter het isgelijkteken het resultaat van de vermenigvuldiging. Als je de vermenigvuldiging omgekeerd zou doen dus c M, wordt er in een error-melding uitgelegd dat de structuren van de objecten niet overeenkomen met deze vermenigvuldiging, maar dat het wel kan als c een rij-vector zou zijn. In dit voorbeeld is ook te zien dat de dimensies van de matrix en de vector voor de vermenigvuldiging zó moet zijn dat het aantal kolommen in de matrix overeen moet komen met het aantal kentallen van de vector Het blokproduct Het blokproduct is als volgt gedefinieerd. (a b) c = det(a b c) De oppervlakte van het parallellogram, opgespannen door de vectoren a en b, is gelijk aan a b en als je het inwendig product neemt van a b (het uitproduct staat loodrecht op het vlak door a en b) met de vector c, dan projecteer je in feite c hierop, dus dan krijg je de hoogte van het blok. Het komt op hetzelfde neer als je de determinant van de matrix berekent waarbij de kolommen gevormd worden door de vectoren a, b en c. De absolute waarde van deze determinant is de inhoud van het (scheve) blok dat opgespannen wordt door de drie vectoren in de R 3 : a, b en c. Zie ook figuur 8.5. a 1 a 2 a 3 Volume = b 1 b 2 b 3 = det(a b c) c 1 c 2 c 3 Voorbeeld 8.15 Blokproduct We zullen de formule (a b) c = det(a b c) verifiëren en het volume van het (scheve) blok, opgespannen door drie vectoren in de R 3 berekenen. Ten slotte wordt dit geïllustreerd in figuur 8.5 waarvan het script op de cd-rom staat.
168 156 Handleiding Maple 10 > restart; with(linearalgebra): interface(displayprecision=2): a,b,c:=vector([1.1,2,7]),vector([3,0,0]),vector([2,3.5,4.1]); a, b, c := 2, 0, 3.50 > DotProduct(CrossProduct(a,b),c); > Determinant(<<a b c>>); het blokproduct Figuur Raakvlak aan een functievlak De vectorvoorstelling van het raakvlak aan een functievlak van een functie van twee variabelen is gemakkelijk te maken met het commando TangentPlane uit het VectorCaluluspakket. De achtergrond hiervan is het maken van de vectorvoorstelling van een vlak met een steunvector en twee richtingsvectoren en de parameters s en t. De steunvector is natuurlijk het punt [a, b, f(a, b)] waar het vlak aan het functievlak moet raken en de twee richtingsvectoren zullen met differentiëren achterhaald kunnen worden (zie ook paragraaf 5.3 en voorbeeld 9.10): raakvlak = a b f(a,b) +s 0 1 f y +t Het functievlak kan in deze situatie ook als vectorvoorstelling gegeven worden: [x,y, f(x,y)] en voor de inzichtelijkheid is dat hier misschien wel beter. Voorbeeld 8.16 Raakvlak aan een functievlak in een bepaald punt van het oppervlak Dit voorbeeld is gerelateerd aan voorbeeld 9.10 waar het draait om de oppervlaktebepaling van een gebogen oppervlak. > restart;interface(warnlevel=0):with(vectorcalculus):with(plots): f:=(x,y)->x^2+y; f := (x, y) x 2 + y 1 0 f x
169 8 Lineaire algebra 157 > raakvlak:=vectorcalculus:-tangentplane( <s,t,f(s,t)>, s=1, t=1 ); raakvlak := (1+s)ex+(1+ t)ey+(2+2s+t)ez > p1:=plot3d(<x,y,f(x,y)>,x=-1..3,y=-1..3): p2:=plot3d(raakvlak,s=-2..2,t=-2..2,style=patchnogrid): display({p1,p2},axes=boxed, title="functievlak met raakvlak"); Zie figuur 8.6. functievlak met raakvlak Figuur 8.6 Toelichting: De functie is voor deze keer ingevoerd met behulp van de pijltjesnotatie, dus als echte functie. (Dat is overigens niet beslist noodzakelijk voor deze situatie.) Verder willen we in het punt [x, y, f(x, y)] = [1, 1, f(1, 1)] het raakvlak bepalen aan het functievlak. We nemen hier bij voorkeur voor de parameters van het raakvlak niet x en y maar s en t om verwarring te voorkomen. In de uiteindelijke parametervoorstelling van het raakvlak zit je dan voor s = 0 en t = 0 precies in het raakpunt (steunvector). Om de beide grafieken van het functievlak en het raakvlak te kunnen plotten, worden deze hier voor de inzichtelijkheid in het plotcommando plot3d aangeboden als vectorvoorstellingen. Immers het raakvlak wordt ook als vectorvoorstelling gegenereerd door het commando TangentPlane en het snelst is deze dan ook op die manier te gebruiken. De grafiek van het functievlak had ook met plot3d(f(x,y),x=-1..3,y=-1..3) gemaakt kunnen worden (zie paragraaf 2.9) Eigenwaarden en eigenvectoren Algemeen: als voor een matrix A en een vectorx geldt: Ax = t x, is deze vector x een eigenvector met bijbehorende eigenwaarde t. Het zoeken is dus naar een vector die in ieder geval op zijn eigen verlengde wordt afgebeeld en korter of langer is dan de oorspronkelijke vector of gelijke lengte heeft. Voorbeeld 8.17 Door het beeld van de vector u te maken onder de afbeelding A zien we dat ( )( ) ( ) ( ) Au = = = 7 = Au = 7u Hieruit kan men concluderen dat u een eigenvector is van A met eigenwaarde 7. Alle vectoren die een veelvoud zijn van de vector u = ( 1 1), zijn eigenvectoren van de matrix A met dezelfde bijbehorende eigenwaarde 7. In dit voorbeeld was min of meer gegeven wat één van de
170 158 Handleiding Maple 10 eigenvectoren van de matrix zou kunnen zijn. Maar misschien zijn er ook méér eigenvectoren behorend bij deze matrix en hebben deze dan andere eigenwaarden? Het antwoord op deze vraag ligt in de theorie van het oplossen van hogeregraads vergelijkingen. Zie paragraaf > restart; with(linearalgebra): A:=Matrix([[5,2],[3,4]]); [ ] 5 2 A := 3 4 > Eigenvalues(A); > Eigenvectors(A,output=list); [ ] 1 [7, 1, { }], 2, 1, 1 [ 7 2 ] Toelichting: Er zijn twee eigenwaarden gevonden, namelijk 7 en 2. Met het commando Eigenvalues uit het LinearAlgebra-pakket worden deze in een vector aangeleverd, maar als je de optie output=list meegeeft, worden deze als lijst weergegeven. Met het opvragen van de eigenvectoren krijg je elke eigenwaarde met de bijbehorende eigenvector erbij als je de optieoutput=list bij het commandoeigenvectors geeft. Ook is de multipliciteit van de eigenwaarde er dan bij vermeld. Bij de eigenwaarde 2 die van multipliciteit 1 is, hoort dus de eigenvector [ 2, 3]. Meestal hebben we liever gehele getallen in de eigenvector. Immers alle vectoren( die een) veelvoud ( zijn ) van de eigenvector, zijn zelf ook weer eigenvector. 2 4 Ga na dat A = Berekening van de eigenwaarden De berekening van eigenwaarden en eigenvectoren zal in de praktijk niet met de hand worden gedaan. Komt het echter mooi uit en is de berekening niet al te uitvoerig, dan kan zo n berekening voor het begrip ook nog wel instructief zijn. In het subpakket LinearAlgebra van het Student-pakket zit een tutor in de vorm van een Maplet, waarmee je zelf stap voor stap de berekening zoals hieronder kunt oefenen. > Student:-LinearAlgebra:-EigenvaluesTutor(); > Student:-LinearAlgebra:-EigenvectorsTutor(); Voor een eigenvector x van afbeelding A met bijbehorende eigenwaarde t moet gelden dat het beeld van de vector x door de afbeelding A op zijn eigen verlengde wordt afgebeeld (op een vector met dezelfde dimensie) en t keer zo lang wordt: Ax = t x. Hiervoor kan men ook schrijven Ax = t Id x waarbij Id de identieke afbeelding is (die elke vector op zijn plaats laat). Deze schrijfwijze heeft als voordeel dat de vectorvergelijking Ax = t Id x op (de) nul(vector) herleid kan worden: Ax = t x = Ax = t Id x Deze vectorvergelijking op nul herleiden geeft: Ax t Id x = 0 = (A t Id)x = 0
171 8 Lineaire algebra 159 Neem nu de matrix uit voorbeeld 8.17, dan kan de volgende herleiding gemaakt worden: ( )( ) ( ) 5 2 x 1 x = t 1 = 3 4 x 2 x 2 ( )( ) ( )( ) 5 2 x x = t 1 = 3 4 x x 2 ( )( ) ( )( ) 5 2 x 1 t 0 x = 1 = 3 4 x 2 0 t x 2 (( ) ( ))( ) ( ) 5 2 t 0 x 1 0 = = t x 2 0 ( )( ) ( ) 5 t 2 x 1 0 = 3 4 t x 2 0 ( ) 5 t 2 De herleide matrix (A t Id) = is een bijzondere vierkante matrix! In deze 3 4 t matrix liggen namelijk alle gegevens opgesloten voor de berekening van alle mogelijkheden voor de eigenwaarden van de oorspronkelijke afbeeldingsmatrix A. Het is een singuliere matrix, wat te concluderen is uit het feit dat (A t Id)x = 0. De nulvector wordt met een lineaire afbeelding altijd op de nulvector afgebeeld, maar als x niet de nulvector is, worden er immers méér vectoren op de nulvector afgebeeld (meer originelen op één beeld!). De vierkante matrix (A t Id) is daarom niet inverteerbaar (singulier) en dat houdt in dat de determinant van de vierkante matrix (A t Id) gelijk is aan nul! Uit de vergelijking det(a t Id) = 0 met t als enige onbekende, kunnen alle mogelijke eigenwaarden t van de matrix A berekend worden. Als de eigenwaarden berekend zijn, kan door invullen de bijbehorende eigenvector gevonden worden. ( ) 5 t 2 det(a t Id) = 0 = det = 0 = 3 4 t (5 t)(4 t) 6 = 0 = t 2 9t + 14 = 0 = (t 2)(t 7) = 0 = t = 2 t = 7 Er volgt dus dat de verzameling eigenwaarden van matrix A gelijk is aan {2,7}. De vergelijking det(a t Id) = 0 heet de karakteristieke vergelijking van matrix A. De karakteristieke polynoom det(a t Id) kun je binnen het LinearAlgebra-pakket direct opvragen metcharacteristicpolynomial(a,t) als de matrix A is ingevoerd. Van een 2 2 matrix is de karakteristieke vergelijking van de tweede graad met maximaal 2 reële mogelijkheden voor t. Van een n n matrix is de karakteristieke vergelijking van de graad n met maximaal n reële mogelijkheden voor t. Matrices die niet vierkant zijn, hebben geen eigenvectoren en dus ook geen eigenwaarden. Het bepalen van eigenwaarden en eigenvectoren van een matrix wordt in de volgende voorbeelden getoond. Er zijn verschillende opties mogelijk voor de presentatie van de output. Voorbeeld 8.18 Numerieke berekeningen van eigenwaarden en eigenvectoren Voor numerieke berekeningen is het handig om ten minste één matrixelement als decimaal getal op te geven en dan meteen ook dedisplayprecision wat laag te zetten.
172 160 Handleiding Maple 10 > restart; with(linearalgebra):interface(displayprecision=3): A:=Matrix([[1, 1, 0], [2, -2.0, 0], [-1, 1, 2]]); A := Bij het opvragen van de eigenvectoren krijg je meteen ook een kolom met de eigenwaarden gepresenteerd. Het is dan handig om meteen de meervoudige toekenning te doen om eventueel verder te kunnen werken met deze output. Hier is gekozen voor EW voor de kolom met eigenwaarden (die komt eerst) en EV voor de matrix met eigenvectoren. > EW,EV:=(Eigenvectors(A)); I EW, EV := I, I I I I I I I I I I Er wordt hier bij het berekenen van de eigenwaarden numeriek gerekend en daardoor kunnen er imaginaire delen ontstaan (die in dit geval gelijk zijn aan 0). Deze kunnen eventueel weggehaald worden met simplify met optie zero. Verder zijn er ook nog een paar elementen van de matrix die bijna gelijk zijn aan 0. Met fnormal kunnen deze fuzzy zero s worden weggehaald. Voor het gebruik van map zie paragraaf 4.4. > EWaarden:=simplify(EW,zero); EVect:=map(fnormal,simplify(EV,zero)); EWaarden := EVect := De eigenwaarden staan nu in een kolomvector gepresenteerd en in een matrix vormen de kolommen de eigenvectoren. De eigenvectoren kun je ook in een rijtje vectoren presenteren metcolumn. > EigenVectoren:=Column(EVect,[1,2,3]); EigenVectoren := 0.929, 0.369, Het blijkt dat bij numerieke rekenwijze de eigenvectoren als eenheidsvectoren worden gegeven. Vergeet niet de optie 2 te geven bijnorm (zie paragraaf 8.2.3). > Norm(EigenVectoren[2],2); Hier werd de lengte van de tweede eigenvector berekend. Op deze manier kunnen ook de andere vectoren gecheckt worden.
173 8 Lineaire algebra Stelsels vergelijkingen Vectorvergelijkingen algemeen Een vectorvergelijking is, zoals het woord al zegt, een vergelijking met vectoren. Links en rechts van het isgelijkteken zijn de overeenkomstige kentallen van de vectoren aan elkaar gelijk. Als deze vectorvergelijking lineair is in de onbekenden, hebben we een goed stuk gereedschap aan de lineaire algebra om deze vectorvergelijking te kunnen onderzoeken en op te lossen. Het is echter mogelijk dat de vectorvergelijking niet lineair is in de onbekenden. In dat geval kun je van de vectorvergelijking een stelsel vergelijkingen maken in de vorm van een verzameling of een lijst naar keuze en dit stelsel te lijf gaan met solve of andere middelen, zoals eventueel met het Gröbner-pakket, zie paragraaf 7.4. Hier volgt een voorbeeld van een vectorvergelijking waarvan een verzameling vergelijkingen gemaakt wordt. Voorbeeld 8.19 Vectorvergelijking omzetten naar een verzameling vergelijkingen a 2 + b 1 b 2 c = 2 b c 3 Deze vectorvergelijking impliceert een verzameling vergelijkingen. We willen hiervan de reële oplossing hebben. > restart; interface(displayprecision=3): u,v:=vector([a^2+b,b^2-c,b/c]),vector([1.0,2,3]); a 2 + b u, v := b 2 c b, 2 3 c > verzameling:={seq(u[i]=v[i],i=1..nops(u))}; verzameling := {a 2 + b = 1.000, b 2 c = 2, b c = 3} > use RealDomain in solve(verzameling,{a,b,c}) end; {b = 1.257, a = 1.502, c = 0.419}, {b = 1.257, c = 0.419, a = 1.502} Toelichting: Het activeren van het LinearAlgebra-pakket is voor dit voorbeeld niet nodig. Je ziet dat je met één handomdraai het stelsel vergelijkingen kunt maken in de vorm van een verzameling met accolades (of eventueel een lijst met vierkante haken). Zie voor het maken van een rij met seq in paragraaf 4.6 en nops(u) betekent het aantal operanden (kentallen) van de vector u (zie paragraaf 4.4). In het begin van de sessie is dedisplayprecision (zie blz. 7) wat lager gezet met het oog op de numerieke benadering van de oplossing en de overzichtelijkheid op het scherm. Omdat we wellicht alleen geïnteresseerd zijn in de reële oplossingen van het stelsel vergelijkingen, is het hier interessant om in het Reële domein het commando solve te laten werken met RealDomain (zie ook paragraaf 6.6). De oplossing in R 3 van deze vectorvergelijking is dus S = {( 1.502, 1.257, 0.419), (1.502, 1.257, 0.419)}. De mogelijkheden met eventuele complexe oplossingen worden op deze manier weggelaten.
174 162 Handleiding Maple Lineaire vergelijkingen Als de vectorvergelijking lineair is in de onbekenden, kan er met matrixrekening gewerkt worden. De vergelijking Ax = b is in feite een vectorvergelijking. Hierbij stelt A een matrix voor, x is de onbekende vector en b is de rechterlidvector. In feite kan A als een lineaire afbeelding opgevat worden waarbij x op de vector b wordt afgebeeld Verschillende gedaanten van een stelsel lineaire vergelijkingen Je kunt een stelsel lineaire vergelijkingen in verschillende gedaanten invoeren en presenteren en eventueel omzetten van de ene naar de andere vorm. Voorbeeld 8.20 Van een stelsel vergelijkingen naar een matrix en omgekeerd Je kunt beginnen met het opgeven van een stelsel vergelijkingen, maar je kunt ook uitgaan van een coëfficiëntenmatrix en een rechterlid-vector. > restart; with(linearalgebra): A,b:=Matrix([[2,0,1],[p,1,1],[4,p,0]]),Vector([0,3,8]); A, b := p 1 1, 3 4 p 0 8 > VectorVerg:=A. <x1,x2,x3> =b; 2x1+x3 0 VectorVerg := px1+x2+ x3 = 3 4x1+ px2 8 TIP: tik een spatie tussen > =, anders wordt dit teken verkeerd opgevat! > StelselVerg:=GenerateEquations(A,[x1,x2,x3],b); StelselVerg := [2x1+x3 = 0, px1+x2+ x3 = 3, 4x1+ px2 = 8] > A1,b1:=GenerateMatrix(StelselVerg,[x1,x2,x3]); A1, b1 := p 1 1, 3 4 p 0 > Ab:=GenerateMatrix(StelselVerg,[x1,x2,x3],augmented=true); Ab := p p 0 8 Toelichting: De coëfficiëntenmatrix A en de rechterlid-vector b worden door middel van een meervoudige toekenning ingevoerd waarna de vectorvergelijking gepresenteerd kan worden. MetGenerateEquations uit het LinearAlgebra-pakket kan het stelsel vergelijkingen in de vorm van een lijst verkregen worden uit A en b. Wel moet daarbij de lijst met variabelen [x 1,x 2,x 3 ] opgegeven worden in de gewenste volgorde. Het werken met lijsten garandeert het handhaven van de volgorde! Op deze lijst van vergelijkingen kan eventueel het commando solve (dat tegenwoordig ook op lijsten werkt) worden losgelaten, zodat direct het stelsel vergelijkingen opgelost kan worden. Andersom: uitgaande van een stelsel vergelijkingen (in de vorm van een lijst of verzameling) kan in één keer de coëfficiëntenmatrix worden gegenereerd, samen met de rechterlid-vector 8
175 8 Lineaire algebra 163 met het commando GenerateMatrix. Dit commando is bijzonder krachtig en handig in het geval de vergelijkingen met de variabelen door elkaar ingevoerd zijn! Doe dan metéén de tweevoudige toekenning om coëfficiëntenmatrix en rechterlid-verctor te krijgen (hier A1 en B1 genoemd). Met behulp van de optie augmented=true krijg je als uitvoer de aangevulde matrix die belangrijk kan zijn voor eventueel verdere bewerking. Zie paragraaf met de Gauss-eliminatie en ook voor het werken met de Maplets, zie onder andere voorbeeld Voorbeeld 8.21 Met een Maplet de aangevulde matrix maken Ten slotte kun je met de Matrix Builder in de vorm van een Maplet de aangevulde matrix én het stelsel vergelijkingen naast elkaar zien en eventueel aanpassen. > Student:-LinearAlgebra:-MatrixBuilder(Ab); Zie figuur 8.7. Figuur 8.7 Bij het afsluiten van dit Maplet komt de aangevulde matrix in het werkblad te staan, klaar voor verdere berekeningen Oplossen met de inverse matrixmethode De vectorvergelijking in matrixvorm kan in bepaalde omstandigheden gemakkelijk opgelost worden met de inverse matrixmethode. Dat houdt het volgende in: Ax = b x = A 1 b Deze methode werkt vanzelfsprekend alleen maar als de inverse matrix bestaat. Dat wil zeggen dat A in ieder geval vierkant moet zijn en ook nog regulier (determinant 0). Voorbeeld 8.22 Oplossen van een stelsel lineaire vergelijkingen (inverse matrixmethode) Neem de vectorvergelijking in matrixvorm van voorbeeld 8.20 en maak de matrix A en de rechterlid-vector b eerst actief. Met de inverse matrixmethode kan deze vergelijking vervolgens opgelost worden. > Vector([x1,x2,x3])=simplify(MatrixInverse(A).b); 3 p 8 2 p+ p x1 2 4 x2 = 4( 7+2 p) 2 p+ p 2 4 x3 2(3 p 8) 2 p+ p 2 4
176 164 Handleiding Maple 10 Toelichting: Met de inverse matrixmethode kan metéén de oplossingsvector gegenereerd worden. De breuken worden herleid met simplify dat tegenwoordig ook direct op het gehele object (vector) kan worden toegepast. Als er eventueel nog andere manipulaties met de kentallen van een vector gedaan moeten worden, kun je met map proberen. Elk element van de vector x afzonderlijk, kan daarmee in één keer nog behandeld worden. Zie voor het commando map paragraaf Afhankelijke, onafhankelijke en strijdige stelsels lineaire vergelijkingen Aan de hand van enkele voorbeelden wordt een aantal mogelijkheden getoond hoe te handelen in verschillende omstandigheden. Voorbeeld 8.23 Onafhankelijk stelsel vergelijkingen Gegeven is het stelsel vergelijkingen: x 1 + 3x 2 + 7x 3 = 15 x 1 + 4x 2 + x 3 = 20 x 1 + 2x 2 + 3x 3 = 10 Voer deze vergelijkingen stuk voor stuk in en controleer ze. De vergelijkingen mogen ook in andere volgorde ingevoerd worden met de variabelen door elkaar, het matrixsysteem brengt er automatisch ordening in! > restart: with(linearalgebra): verg1:=x1+3*x2+7*x3=15; verg2:=x1+4*x2+x3=20; verg3:=x1+2*x2+3*x3=10; verg1 := x1+3x2+ 7x3 = 15 verg2 := x1+4x2+ x3 = 20 verg3 := x1+2x2+ 3x3 = 10 > A,b:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3]); A, b := 1 4 1, Met de coëfficiëntenmatrix is meteen de oplossing te genereren met de inverse matrixmethode: Ax = b x = A 1 b. > Vector([x1,x2,x3])=MatrixInverse(A).b; x1 0 x2 = 5 x3 0 Met de aangevulde matrix kun je op verschillende manieren op onderzoek uitgaan: > Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); Ab := > Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); figuur 8.8 geeft in het Maplet van de LinearSystemPlotTutor een visualisatie van het lineaire systeem: de drie lineaire vergelijkingen met drie variabelen stellen drie vlakken in
177 8 Lineaire algebra 165 de ruimte voor en wellicht is te zien dat inderdaad deze vlakken door één punt gaan: het punt (0,5,0). Figuur 8.8 > Determinant(A); 10 > solve({verg1,verg2,verg3},{x1,x2,x3}); {x1 = 0, x3 = 0, x2 = 5} Wellicht ten overvloede is te zien dat de determinant van de coëfficiëntenmatrix ongelijk is aan 0 en dat ook direct een oplossing met solve gevonden had kunnen worden, omdat we te maken hadden met een onafhankelijk stelsel vergelijkingen. De aangevulde matrix Ab geeft goede mogelijkheden om op onderzoek te gaan. In het Maplet kan verder onderzocht worden wat het effect is van het veranderen van een van de coëfficiënten van de matrix. Voorbeeld 8.24 Afhankelijk stelsel vergelijkingen Gegeven is het stelsel vergelijkingen: 2x 1 + 3x 2 + 7x 3 = 15 x 1 + 4x 2 + x 3 = 20 x 1 + 2x 2 + 3x 3 = 10 Dit stelsel is bijna hetzelfde als van voorbeeld Alleen in de eerste vergelijking is de coëfficiënt van x 1 veranderd. In het Maplet kan het stelsel veranderd worden en het effect kan meteen zichtbaar gemaakt worden in de grafiek van de drie vlakken die nu niet meer door één punt gaan, maar een snijlijn hebben. figuur 8.9 laat zien wat het effect kan zijn van een kleine verandering aan een van de coëfficiënten. Er zijn in dit geval dus oneindig veel oplossingen die allemaal op de snijlijn liggen van de drie vlakken. > restart: with(linearalgebra): verg1:=2*x1+3*x2+7*x3=15: verg2:=x1+4*x2+x3=20: verg3:=x1+2*x2+3*x3=10: A,b:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3]): Determinant(A); > solve({verg1,verg2,verg3},{x1,x2,x3}); 0 {x2 = 5+x3, x1 = 5x3, x3 = x3}
178 166 Handleiding Maple 10 Figuur 8.9 Toelichting: De inverse matrixmethode werkt nu niet, want de determinant van de vierkante matrix is gelijk aan 0 (singuliere matrix). Aan de oplossing van het stelsel (verkregen met solve) is te zien dat er geen eenduidige oplossing is. Immers x 3 is vrij te kiezen en x 1 en x 2 zijn uitgedrukt in x 3. Dit is een voorbeeld van een afhankelijk stelsel lineaire vergelijkingen. Omdat er één variabele vrij te kiezen is, heeft dit stelsel dus één vrijheidsgraad en kun je bijvoorbeeld x 3 = λ stellen. De oplossing (vergelijking van de snijlijn) kan in de vorm van een vectorvoorstelling geschreven worden: x= 0 1 informatie over deze stelsels bij de Eliminatie van Gauss paragraaf λ 1. Zie voor meer Voorbeeld 8.25 Strijdig stelsel vergelijkingen Het volgende stelsel vergelijkingen is een strijdig stelsel. In vergelijking met het stelsel van voorbeeld 8.24 is er in de rechterlid-vector het tweede kental veranderd. Je kunt in de LinearSystemPlotTutor wijzigingen aanbrengen en meteen het effect zien in de visualisatie. Zie figuur > restart: with(linearalgebra): verg1:=2*x1+3*x2+7*x3=15; verg2:=x1+4*x2+x3=22; verg3:=x1+2*x2+3*x3=10; Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); solve({verg1,verg2,verg3},{x1,x2,x3}); Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); Zie figuur Toelichting: Het blijkt dat als je met solve werkt, dat er dan geen enkele oplossing komt. Met de aangevulde matrix Ab kan onderzocht worden wat er aan de hand is. Het blijkt dat de vlakken elkaar twee aan twee snijden volgens lijnen die evenwijdig zijn. Er is dus geen punt aan te wijzen dat op alle drie vlakken ligt; het stelsel is dan ook een strijdig stelsel Eliminatiemethode van Gauss De eliminatiemethode van Gauss is een systeem om rijen van een matrix te manipuleren (veegmethode) zodat er een nieuwe matrix ontstaat die gelijkwaardig is aan de oude matrix. Zoals in de vorige voorbeelden reeds aan de orde is gekomen, representeren de rijen van de aangevulde coëfficiëntenmatrix de vergelijkingen inclusief het rechterlid.
179 8 Lineaire algebra 167 Figuur 8.10 Het vegen van een matrix met pen en papier kan getraind worden met een Maplet, LinearSolveTutor uit het subpakket LinearAlgebra van het Student-pakket. > Student:-LinearAlgebra:-LinearSolveTutor(); De eliminatiemethode van Gauss kan ook numeriek uitgevoerd worden. Zet in dat geval de displayprecision wat lager (zie blz. 7). Een waarschuwing is hier dan wel op zijn plaats: als de coëfficiëntenmatrix gelijk aan 0 is of bijna gelijk aan 0, hebben we te maken met een slecht geconditioneerd stelsel. Er hoeft dan maar een kleine numerieke afronding plaats te vinden waardoor de oplossing zeer onbetrouwbaar kan worden. Immers bij een afhankelijk stelsel zoals in voorbeeld 8.24, kan een kleine storing in de coëfficiënten van de matrix ervoor zorgen dat een van de vlakken een beetje kantelt en de vlakken elkaar wél in één punt snijden. In de volgende voorbeelden wordt getoond welke informatie je krijgt als de Eliminatiemethode van Gauss wordt toegepast. Voorbeeld 8.26 Onafhankelijk stelsel met Gauss Het stelsel vergelijkingen van voorbeeld 8.23 wordt opgelost met de Eliminatiemethode van Gauss. > restart; with(linearalgebra): verg1:=x1+3*x2+7*x3=15: verg2:=x1+4*x2+x3=20:verg3:=x1+2*x2+3*x3=10: Ab:=GenerateMatrix([verg1,verg2,verg3],[x1,x2,x3],augmented=true); Ab := Op de aangevulde matrix Ab wordt nu het veegsysteem van Gauss toegepast. Het komt er eigenlijk op neer dat je met de vergelijkingen manipuleert door middel van lineaire bewerkingen. > AbGauss:=GaussianElimination(Ab); AbGauss := Na het vegen heeft de onderste rij nu de meeste nullen en het ziet er allemaal wat schoner uit. Het stelsel vergelijkingen dat hiermee overeenkomt, is gelijkwaardig aan het oorspronkelijke
180 168 Handleiding Maple 10 stelsel maar nu gemakkelijker (uit het hoofd) op te lossen. Voor de duidelijkheid wordt dit geveegde stelsel op het scherm gepresenteerd met GenerateEquations. > GenerateEquations(AbGauss,[x1,x2,x3]); [x1+3x2+ 7x3 = 15, x2 6x3 = 5, 10x3 = 0] Duidelijk is te zien dat je van achter naar voor nu uit het hoofd de vergelijkingen achtereenvolgens kunt oplossen en kunt beschikken over de waarden van de onbekenden. Dit achterwaarts substitueren (terugsubstitutie) kan metbackwardsubstitute dat werkt op de aangevulde matrix, die inmiddels geveegd is met de Gauss-methode. > Vector([x1,x2,x3])=BackwardSubstitute(AbGauss); x1 0 x2 = 5 x3 Als je wilt, kun je nog drastischer verder gaan vegen tot er allemaal nullen en enen in de aangevulde matrix staan met het commando ReducedRowEchelonForm. Dit wordt de GaussJordan-methode genoemd. > AbGaussJordan:=ReducedRowEchelonForm(Ab); AbGaussJordan := Hierna is zelfs heel gemakkelijk uit het hoofd de oplossing van het stelsel vergelijkingen te maken. > GenerateEquations(AbGaussJordan,[x1,x2,x3]); [x1 = 0, x2 = 5, x3 = 0] TIP: met de Tutor in de vorm van een Maplet is de veegmethode met pen en papier te oefenen. > Student:-LinearAlgebra:-LinearSolveTutor(); Voorbeeld 8.27 Afhankelijk en strijdig stelsel met Gauss Los het stelsel vergelijkingen van voorbeeld 8.24 (afhankelijk stelsel) en 8.25 (strijdig stelsel) op met de Gauss-eliminatiemethode. Werk níet numeriek in het geval dat de determinant van de coëfficiëntenmatrix gelijk is aan 0, want dan kan het zijn dat het stelsel niet meer afhankelijk of strijdig is door numerieke afrondingen die kunnen ontstaan. Na het vegen met Gauss van de aangevulde coëfficiëntenmatrix van het afhankelijke stelsel krijg je één nulrij. Je zult zien dat je nu inderdaad één variabele (x 3 ) vrij kunt kiezen, (één vrijheidsgraad) net als bij de methode met solve. Maple stelt deze parameter gelijk aan t 1. De uitvoer is hier niet afgedrukt. Bij het strijdige stelsel zal bij de geveegde matrix opvallen dat de onderste rij uit nullen bestaat behalve het laatste element van die rij. Dit duidt op een strijdige vergelijking waarmee het hele stelsel dus strijdig is. Het voordeel van de Gauss-eliminatie is dat er een onderzoek kan plaatsvinden over het aantal onafhankelijke vergelijkingen in een stelsel en er kan iets gezegd worden over het aantal vrijheidsgraden van de oplossing.
181 8 Lineaire algebra Kleinste kwadratenmethode Voorbeeld 8.28 Een overbepaald stelsel vergelijkingen Gegeven is het overbepaalde stelsel vergelijkingen. x y = 2 x + 2y = 2 8x + y = 14 Dit stelsel vergelijkingen (drie lijnen in het platte vlak) is niet op te lossen met solve en ook niet met de eliminatiemethode van Gauss. Er zijn namelijk meer vergelijkingen dan onbekenden! De coëfficiëntenmatrix is niet vierkant en de inverse matrixmethode werkt dan ook niet. Van dit stelsel wil je met de kleinste kwadratenmethode een zo goed mogelijke oplossing hebben. Vorm daartoe de coëfficiëntenmatrix A en de rechterlid-vector b. Met het commando LeastSquares is een oplossing van het stelsel te formuleren waaraan ten grondslag ligt dat A x b minimaal moet zijn. > restart; with(linearalgebra):interface(displayprecision=3): verg1,verg2,verg3:=x-y=2.0,x+2*y=2,8*x+y=14; verg1, verg2, verg3 := x y = 2.000, x+2y = 2, 8x+y = 14 > A,b:=GenerateMatrix([verg1,verg2,verg3],[x,y]); A, b := 1 2, 2 > LeastSquares(A,b); 8 1 [ > Ab:=GenerateMatrix([verg1,verg2,verg3],[x,y],augmented=true): Student:-LinearAlgebra:-LinearSystemPlotTutor( Ab ); ] 14 Figuur 8.11 Toelichting: Er is een ander commando met dezelfde naam LeastSquares in het Curve fitting-pakket. Zorg dat niet beide pakketten tegelijk geactiveerd moeten worden, anders kan het van belang zijn welk pakket het eerst geopend wordt. Zie paragraaf Als het stelsel vergelijkingen is ingevoerd, kan de matrix A en de rechterlid-vector b worden gegenereerd.
182 170 Handleiding Maple 10 Met de LinearSystemPlotTutor (die werkt met de aangevulde matrix Ab) is in figuur 8.11 te zien dat ergens in het driehoekje, gevormd door de drie lijnen, de oplossing (1.752, 0.038) ligt.
183 9 Integreren 9.1 Inleiding In hoofdstuk 3 is reeds aandacht besteed aan de integraal. In dit hoofdstuk, specifiek over integralen, worden nog enkele extra voorbeelden toegelicht om op veel situaties in de praktijk voorbereid te zijn. Ook komen de meervoudige integralen in dit hoofdstuk aan bod. Er wordt in voorkomende gevallen verwezen naar de website van dit boek waar vele voorbeelden van toepassingen te vinden zijn. Enkele belangrijke visualisaties die in de nieuwste versies van Maple gekomen zijn, worden hier ook toegelicht. Belangrijk is wel, juist bij het integreren, dat je weet wat je aan het doen bent. Aan het opstellen van de integraal in de toepassingen moet genoeg tijd besteed worden vóórdat er gerekend gaat worden. Wees je ervan bewust dat de integraal niet altijd berekend kán worden. Duurt de berekening langer dan een paar tellen, klik dan snel op de rode stopknop in de knoppenbalk, anders kan het geheugen van de computer gaan vollopen. Gebeurt dit meerdere malen, sla je werkblad dan tijdig op. Er is een instelling mogelijk om het werkblad automatisch te bewaren met behulp van de instellingen die met File, Preferences op het tabblad General te bereiken zijn (zie blz. 3). In sommige gevallen komt er bij het berekenen van de integraal een onbegrijpelijke uitvoer of de integraal kan onverrichterzake worden teruggegeven. Er kan in die gevallen in bepaalde omstandigheden overgegaan worden op de numerieke benadering. Een waarschuwing is op zijn plaats bij het berekenen van integralen met parameters. Zo kan het gebeuren dat de integraal niet berekend kan worden als er niet bepaalde aannames gedaan worden voor de parameter. In paragraaf is daarvan al een voorbeeld te zien geweest. Definieer altijd eerst de functie zodat deze gecontroleerd kan worden alvorens de integraal te berekenen. Met het inerte commando Int krijg je de integraal op het scherm zonder dat er nog gerekend wordt. Als Int(...):%=value(%); niet lukt of je hebt het idee dat er dan niet het goede antwoord komt, probeer dan Int(...):%=evalf(%);. Ten slotte kun je het ook direct proberen met int(...) of evalf(int(...)). Maak in probleemsituaties een grafiek van de integand om op onderzoek uit te gaan. In geval van parameters kun je enkele grafieken bekijken. De mogelijkheid om reeds bij de invoer decimale getallen op te geven, kan van pas komen (zie paragraaf 1.3.4). Wees in ieder geval op je hoede als iemand je een integraal geeft om met Maple te berekenen. Achterhaal dan zo mogelijk wat de betekenis van de integraal is, waar deze integraal vandaan komt en waarom je deze wilt berekenen. Doe eventueel een onderzoekje. Let ook op wanneer de integrand van teken verandert op het integratietraject. Voor het oplossen van differentiaalvergelijkingen wordt er bijvoorkeur NIET gebruikgemaakt van integreren maar van dsolve. Zie voor het oplossen van differentiaalvergelijkingen hoofdstuk 11. Verder wordt er in dit hoofdstuk nog aandacht besteed aan de Laplace-integraal en de Fourier-analyse waarbij het integreren op de achtergrond speelt.
184 172 Handleiding Maple Oneigenlijke integralen Oneigenlijke integralen zijn integralen waarbij de integrand discontinu is, of waarbij het integratietraject oneindig is of allebei. Aardig is het om in de volgende voorbeelden de trucs te zien die gebruikt worden om een onderzoekje te doen en om een mooie uitvoer op het scherm te krijgen die geschikt is voor de presentatie in een verslag. Na een dubbele punt komt het resultaat van de berekening niet op het scherm te staan. Je kunt echter zelf wel met de puntkomma afsluiten om de invoer te controleren, zoals je gewend bent (maar niet bij het namen geven van grafieken, ter voorbereiding van display, zie paragraaf 2.10). Ook worden door middel van enkele voorbeelden wat tips aangereikt om je te redden, in de meeste gevallen als iets niet direct lukt Integreren van functies in stukken (piecewise) Op zich kan een discontinue functie zonder probleem geïntegreerd worden. Met de piecewisefunctie kan in het algemeen goed gerekend worden. Maar Maple rekent beter met een functie die beschreven is met behulp van de Heaviside stapfunctie. Ook absolute waardefuncties kun je met convert(..,heaviside) omzetten naar deze stapfunctie zodat er vervolgens goed mee gerekend kan worden. Voorbeeld 9.1 Integreren van een functie in stukken x 1 x < 0 f(x) = x < x < 2 ln(x) x > 2 Gevraagd wordt de oppervlakte van het gearceerde vlakdeel van de figuur (9.1) die gevormd wordt door de grafiek van f(x). > restart; f:=piecewise([x-1,x<0],[x^2+1,x<2],[ln(x),x>2]); with(plots): plaat1:=plot(f,x=-4..4,discont=true,color=black): plaat2:=plot(f,x=-4..4,color=gray,filled=true, title="integraal van een discontinue functie" ): display({plaat1,plaat2}); Zie figuur 9.1. integraal van een discontinue functie x Figuur 9.1
185 9 Integreren 173 > f:=convert(f,heaviside); f := x xheaviside(x) 1+2Heaviside(x)+x 2 Heaviside(x) x 2 Heaviside( 2+x) Heaviside( 2+x)+ln(x)Heaviside( 2+x) > Int( abs(f),x=-4..4):%:%%=value(%); Z 4 f dx = 6ln(2) > Int( abs(f),x=-4..4):%:%%=evalf[5](%); Z 4 4 f dx = Toelichting: Er kan dus gewoon over sprongdiscontinuïteiten geïntegreerd worden. Maple neemt inwendig de limiet bij de plaats van de sprongen. De functie is voor de berekening geconverteerd naar een functie beschreven met Heaviside. (Dat is niet altijd nodig.) Voor meer informatie over de quotes die in dit geval de evaluatie vertragen ten behoeve van een eenvoudige uitvoer, zie paragraaf 6.3. Er zijn hier twee mogelijkheden gegeven voor berekening van de bedoelde oppervlakte: metvalue voor de analytische en metevalf voor de numerieke berekening Oneindige discontinuïteit van de integrand Zoals in het voorgaande, is het geen probleem om over een discontinuïteit te integreren. Inwendig wordt de limiet genomen bij de plaats van de sprongdiscontinuïteit. Voorbeeld 9.2 Integreren van een functie met verticale asymptoot Bereken de bepaalde integraal R (x 1) 3 dx eerst eens met pen en papier en vervolgens met Maple. Je zult zien dat er een melding ongedefineerd komt. Toch moet het mogelijk zijn deze te berekenen. Er is een oneindige discontinuïteit van de integrand voor x = 1 binnen het integratietraject: er moet dus een limiet genomen worden voor a nadert van beide kanten tot 1. Z a lim a (x 1) 3 dx+lim a 1 Z 3 a 1 dx = =??? (x 1) 3 > restart; f:=1/(x-1)^3; Int(f,x=0..3):%=value(%); Z 3 1 dx = undefined 0 (x 1) 3 > with(plots):plaat1:=plot(f,x=0..3,y= ,discont=true,color=black): plaat2:=plot(f,x=0..3,y= ,filled=true,color=gray, title="integraal van een functie met een oneindige discontinuteit"): display({plaat1,plaat2}); In figuur 9.2 is de grafiek van de integrand te zien. > Int(f,x=0..3)=int(f,x=0..3,CauchyPrincipalValue); Z (x 1) 3 dx = 3 8 > Int(f,x=2..3):%=value(%); Z (x 1) 3 dx = 3 8
186 174 Handleiding Maple 10 y integraal van een functie met een oneindige discontinuïteit x Figuur 9.2 Toelichting: De waarde van de integraal is niet de totale oppervlakte die gearceerd is, want de oppervlakken onder en boven de x-as heffen elkaar gedeeltelijk op. Met de optie CauchyPrincipalValue wordt aan het programma duidelijk gemaakt dat de linker- en de rechterlimiet links en rechts van de discontinuïteit x = 1 op dezelfde manier genomen moeten worden. Je kunt ten slotte de integraal op het traject [2, 3] berekenen en zien dat de integralen R 1 0 f dx en R 2 1 f dx elkaar precies opheffen. Met de berekening van de integraal over het gehele traject is dus níet de oppervlakte berekend van het grijsgearceerde gebied Oneigenlijke integraal met parameter Soms is het voor de analytische berekening van de integraal belangrijk om aan te geven of de gebruikte parameter ook beperkingen kent, zoals in het volgende voorbeeld. Een eerder voorbeeld zagen we al in paragraaf Voorbeeld 9.3 Oneindige integrand op het integratietraject Gevraagd wordt de volgende integraal te berekenen. De integrand wordt oneindig groot voor x = R, dus zonder meer kun je niet zeggen wat dit zal opleveren. Een onderzoekje is dan ook op zijn plaats hierbij. Z R x2 R 2 x 2 dx > restart; f:=sqrt(1+4*x^2/(r^2-x^2)); assume(r>0); Int(f,x=0..R):%=value(%); evalf(%); Z R 1+ 4x2 0 R 2 x 2 dx = REllipticE( 3I) Z R x2 0. R 2 dx = ( I)R 1.x2 Na een paar keer proberen met de verschillende mogelijkheden, zoals: > Int(f,x=0..R):%=value(%);Int(f,x=0..R):%=evalf(%);int(f,x=0..R):%=evalf(%); zal de integraal steeds weer terugkomen. Omdat het integratietraject dat suggereert, kunnen we met assume aannemen dat R > 0. We zien ten slotte, eventueel na symplify(%,zero) waarmee het imaginaire deel (dat toch gelijk is aan 0) weggehaald kan worden (zie voorbeeld 7.2), dat de berekening een uitdrukking oplevert die lineair is in R. (Als er een tilde ( ) boven
187 9 Integreren 175 de R verschijnt, zie dan meer informatie over assume paragraaf ) Analytisch is dat de eliptische integraal, maar wij hebben belang bij de numerieke waarde ervan. Er volgt nog een visualisatie voor verschillende waarden van R. > with(plots): t:=textplot({[0.7,10,"r=1"],[1.75,9.5,"r=2"], [2.7,10,"R=3"],[3.7,9.5,"R=4"],[4.7,10,"R=5"]}): p1:=seq(plot(subs(r=i,f),x=0..5,0..12,linestyle=i,color=black),i=1..5): p2:=seq(plot(subs(r=i,f),x=0..5,0..12,color=gray,filled=true),i=1..5): display([p1,p2,t],title="functie f(x) met parameter R, Het grijze gebied is de waarde van de integraal",labels=["",""]); Hier wordt in figuur 9.3 het verloop van de functie gegeven voor verschillende waarden van R met het grijze gebied dat de waarde van de integraal aangeeft bij elke waarde van R. functie f(x) met parameter R, Het grijze gebied is de waarde van de integraal R=1 R=2 R=3 R=4 R= Figuur 9.3 Toelichting: In de grafiek van figuur 9.3 kun je al zien op welk interval de functie steeds bestaat en wat er gebeurt bij x = R. Als x R gaat de integrand namelijk naar oneindig en de lijnen x = R zijn dus verticale asymptoten van de integrand. De oppervlakken onder de grafiek in figuur 9.3 worden steeds groter naarmate R toeneemt; dit blijkt lineair te zijn. Er is een rij p gemaakt van grafieken met verschillende lijnstijlen waarbij steeds een andere waarde voor R werd ingevuld. Deze rij wordt in een lijst gezet (met vierkante haken eromheen) in het commando display dat behalve verzamelingen ook lijsten accepteert. (Het had ook een verzameling kunnen zijn.) Verder bestaat de titel uit meer regels. Om naar de volgende regel te gaan kan in de input met Shift Enter gewerkt worden De normale verdeling Bij de kansberekening in geval van een normale verdeling wordt ook gebruikgemaakt van integraalrekening. Hierbij kan het integratietraject naar oneindig gaan. Voorbeeld 9.4 Kansdichtheidsfunctie en integraalvergelijking Gegeven de formule van de kansdichtheid van de normale verdeling waarin µ = 50 het gemiddelde is en σ = 2 de standaarddeviatie. f(x) = 1 σ 2π e 1 2( x µ σ ) 2
188 176 Handleiding Maple 10 We kunnen laten zien dat R f(x)dx = 1 en verder kunnen we de grenswaarde g berekenen, waarvoor geldt dat de kans dat de kansvariabele x kleiner is dan deze grenswaarde gelijk is aan 80 %. Zie figuur 9.4. Er moet dus gelden: P(x < g) = > restart; Norm_verd:=1/(sigma*sqrt(2*Pi))*exp(-1/2*(x-mu)^2/sigma^2): assume(sigma>0); Int(Norm_verd,x=-infinity..infinity):%=value(%); Z ( 1 (x µ)2 2e 2σ 2 ) 2 σ dx = 1 π > g:=solve(int(norm_verd,x=-infinity..xg)=0.80,xg); g := > with(plots):p1:=plot(norm_verd,x=40..g,filled=true,color=gray): p2:=plot(norm_verd,x=40..60,color=black,thickness=2): p3:=textplot([50,0.08,"80 %"]): display({p1,p2,p3}, labels=["x","kansdichtheid"],labeldirections=[horizontal,vertical], title="normaalverdeling met mu = 50 en sigma = 2"); Zie figuur Normaalverdeling met mu = 50 en sigma = kansdichtheid % x Figuur 9.4 Toelichting: In de berekening van de integraal moet aangenomen worden dat σ > 0. Om een eventuele tilde ( ) in de uitvoer weg te krijgen bij gebruik vanassume, zie de instructie paragraaf Dat de totale oppervlakte onder de grafiek gelijk is aan 1 is de definitie van de kans. Alle kansen bij elkaar opgeteld zijn immers gelijk aan 1. Het grijze oppervlak onder de kromme representeert een kans van 80 % dat x de waarde kleiner of gelijk aan aanneemt. Het is een integraalvergelijking met de onbekende g in de bovengrens van de integraal: Z g f(x) = 0.8 De berekende waarde wordt g genoemd en gebruikt bij de plotcommando s. Voor het plotcommando is hier nog een aardig voorbeeld van labeldirections als plotoptie. 9.3 Enkele toepassingen In deze paragraaf wordt slechts een fractie van mogelijke toepassingen belicht die met integraalrekening mogelijk zijn. Het onderwerp booglengte krijgt hier speciaal aandacht in
189 9 Integreren 177 de verschillende situaties. Verder wordt er verwezen naar de website behorende bij dit boek met een bestand speciaal over toepassingen van integratie. TIP: probeer ook eens de tutoren uit het subpakket Calculus1 van het Student-pakket, dat je activeert met with(student[calculus1]). > FunctionAverageTutor(); voor de gemiddelde waarde van een functie op een bepaald interval. > SurfaceOfRevolutionTutor(); voor de oppervlakte van een omwentelingslichaam. > VolumeOfRevolutionTutor(); voor de inhoud van een omwentelingslichaam Booglengte Een snel commando om de booglengte te berekenen van een stuk van een kromme in het platte vlak is met ArcLength uit het subpakket Calculus1 van het Student-pakket. De integraal die opgesteld moet worden, wordt automatisch gegenereerd. Alleen de functie én het traject hoeven opgegeven te worden. Het heeft allemaal te maken met de schuine zijde van een rechthoekige driehoek! Wat er in feite gebeurt, is dat er stukjes ds worden opgeteld, waarbij het stukje ds de schuine zijde is van een rechthoekige driehoek. ds = ( ) dy 2 ( ) dx 2 + dy 2 = 1+ dx = 1+( f dx ) dx = 1+ 2 dx x Zie ook figuur 9.5. Booglengte van een grafie k met een stukje booglengte ds ds dy dx x Figuur 9.5 Voorbeeld 9.5 Booglengte van een stuk van de grafiek van een functie Neem het stuk van de grafiek van functie f(x) = x waarbij x loopt van 0 tot 3: > restart; f:=sqrt(x); Student:-Calculus1:-ArcLength(f,x=0..3,output=integral):%=evalf(%); Z 3 0 f := x 1+4x x 2 dx = Toelichting: Met output=value bij het commando ArcLength uit het subpakket Calculus1 van het Student-pakket krijg je de waarde van deze integraal. Echter het kan zijn, vooral
190 178 Handleiding Maple 10 omdat er een wortel in de integrand komt, dat de berekening slecht uitkomt. Met de optie output=integral beschik je dan over de integraal die metevalf benaderd kan worden. Met output=plot, wordt een grafiek verkregen met, behalve de grafiek van de functie f daarin tegelijk ook de grafiek van de integrand. TIP: het is ook mogelijk met een Maplet te werken en eigen instellingen te doen: > Student:-Calculus1:-ArcLengthTutor(); Voorbeeld 9.6 Booglengte van een ruimtekromme Ga uit van voorbeeld 8.6 waar het gaat over een vectorfunctie s(t) en activeer deze sessie waarop als aanvulling het volgende gedaan kan worden: > Int(snelheid,t=1..5):%=evalf(%); Z 5 9+4t dt = t4 Dit laatste kan ook direct metarclength(s(t),t=1..5):%=evalf(%); Toelichting: De berekening van de booglengte van een deel van de kromme kan met (afstand = snelheid tijd) de afgelegde weg langs de baan berekend worden, waarbij t bijvoorbeeld het interval [1, 5] doorloopt. Binnen het VectorCalculus-pakket is daarvoor het commando ArcLength(s(t),t=1..5) dat zonder verdere voorbereiding gebruikt kan worden. Automatisch wordt dan de lengte van de snelheidsvector genomen en er wordt geïntegreerd over het bedoelde traject. Deze integraal kan vanwege de wortel niet analytisch berekend worden, daarom is hier de waarde numeriek benaderd met behulp van evalf. Z 5 booglengte = 1 dx dt 2 + dy dt 2 + dz 2 Z 5 dt = v(t) dt = dt 1 TIP: deze methode met de vector kan natuurlijk ook in de R 2 gehanteerd worden. Voorbeeld 9.7 Booglengte met poolcoördinaten Met poolcoördinaten is het berekenen van de booglengte van een kromme precies hetzelfde als met een kromme in het x,y-coördinatenstelsel. Er kan weer het commando ArcLength gebruikt worden met een optie coordinates=polar. (Dus niet coords=polar, zoals bij plotcommando s en animaties in voorbeeld 2.29.) Gegeven een functie in poolcoördinaten r 1 (ϕ) = 2 2cos(2ϕ) waarbij ϕ loopt van π 4 tot π 4 met de grafiek in figuur 9.6. (Zie voor het script van de figuur op de cd-rom.) > restart; r1:=2*sqrt(2*cos(2*phi)); Student:-Calculus1:-ArcLength(r1, -1/4*Pi..1/4*Pi, coordinates=polar,output=integral):%=evalf(%); r1 := 2 2 cos(2φ) Z π 4 π 2 sin(2φ) 2 + cos(2φ) 2 2 dφ = cos(2 φ) 4 Toelichting: De opbouw van de integraal komt weer voort uit het optellen van kleine stukjes ds waarbij ds de schuine zijde is van een rechthoekige driehoek maar nu in het raster van het poolcoördinatenstelsel. (dr1 ) 2 ds = dr1 2 +(r 1 dϕ) 2 = + r1 2 dϕ dϕ
191 9 Integreren 179 Booglengte van de grafiek met poolcoördinaten waarbij stukjes ds worden opgeteld 1.5 r.d(phi) dr ds x 1 Figuur 9.6 TIP: de invoer voor de berekening van de booglengte had dus ook kunnen luiden: > Int(sqrt(diff(r1,phi)^2+r1^2),phi=-Pi/4..Pi/4):%=evalf(%); met precies hetzelfde resultaat. 9.4 Meervoudige integratie Bij dubbelintegralen is het aan te raden om het gebied waarover geïntegreerd wordt voor jezelf even te schetsen! Lees de dubbelintegraal altijd van binnen naar buiten, zoals die eigenlijk ook ingevoerd wordt in het programma. Z Z Z ( Z ) f(x,y)dxdy = f(x,y)dx dy Inhoudsbepaling met de dubbelintegraal Voorbeeld 9.8 Inhoud onder een functievlak in de ruimte Bepaal de integraal van de functie f(x,y) = x 2 + y 3 over de rechthoek G waarvoor geldt dat x loopt van 0 tot 1 en y loopt van 0 tot 2. Wat je berekent met R G R f(x,y)dxdy is in feite de inhoud onder het functievlak van f boven de rechthoek G (zie figuur 9.7) An approximation of the integral of f(x, y) = x^2+y^3 over the region [0.. 2, 0.. 1] using a midpoint Riemann sum Actual value: Approximate value: y x Figuur 9.7
192 180 Handleiding Maple 10 > restart; f:=x^2+y^3; Int(Int(f,x=0..2),y=0..1): %=value(%); Z 1 Z f := x 2 + y 3 x 2 + y 3 dxdy = 19 6 Toelichting: Er is eerst over de variabele x geïntegreerd en daarna over de variabele y. Omdat de grenzen van de variabelen constant zijn, kan de integratie zonder problemen omgedraaid worden. R 2 R f(x,y)dydx levert dezelfde uitkomst. De numerieke benadering kan eventueel ook toegepast worden met behulp van decimale getallen in de invoer of met evalf in plaats vanvalue. Gemakkelijk is in te zien dat de integrand op het domein van het gegeven gebied G overal positief is! In het volgende voorbeeld treedt er tekenwisseling van de integrand op. TIP: de visualisatie van figuur 9.7 krijg je met behulp van: > with(student[multivariatecalculus]); ApproximateInt(f,x=0..2,y=0..1, output=plot); uit het MultivariateCalculus-subpakket van het Student-pakket. Als je hierbijoutput= animate geeft, krijg je een animatie te zien waarbij de verticale staafjes ter hoogte van het functievlak met lengte dx en breedte dy opgeteld de inhoud vormen. Voorbeeld 9.9 Inhoudsbepaling De grafiek van de functie f(x,y) = 5x 2y is een vlak dat zich op het domein van het vierkant, gevormd door de hoekpunten (0,0),(1,0), (1,1) en (0,1), afwisselend boven en onder het vlak z = 0 bevindt. Zie figuur 9.8. Gevraagd wordt de inhoud te bepalen van het volume tussen het functievlak f en het vlak z = 0 op het domein van het bedoelde vierkant. > restart; f:=5*x-2*y; Int(Int(abs(f),y=0..1),x=0..1):%=evalf(%); Z 1 Z f := 5x 2y 5x 2y dydx = Toelichting: De ruimtefiguur die hierbij hoort, is reeds in figuur 2.18 van hoofdstuk 2 voorbereid, maar met het commando ApproximateInt uit het MultivariateCalculussubpakket van het Student-pakket is deze integraal ook snel te visualiseren. > Student:-MultivariateCalculus:-ApproximateInt(f,x=0..1,y=0..1,output=plot): Zie figuur 9.8. Zoals gezegd, bevindt het functievlak zich voor een deel onder en boven het niveau z = 0. Voor de berekening van de werkelijke inhoud kan dan direct beter de absolute waarde van de integrand genomen worden. Met ApproximateInt of het Maplet van de ApproximateIntTutor kan een en ander gevisualiseerd worden. Hierbij wordt de waarde van de integraal berekend als er gekozen wordt voor output=value en niet de pure inhoud tussen grondvlak en functievlak. Je kunt ook kijken waar de tekenwisseling plaatsheeft. Dat is op de lijn y 1 = 2 5 x. Vervolgens kunnen de integralen apart uitgerekend worden. > y1:=solve(f=0,y);int(int( f,y=0..5*x/2),x=0..2/5)+int(int( f, y=0..1),x=2/5..1) -Int(Int( f,x=0..2*y/5),y=0..1):%=evalf[5](%); y1 := 5x 2
193 9 Integreren 181 Figuur 9.8 Z 2/5 0 Z 5x Z An approximation of the integral of f(x, y) = 5*x 2*y over the region [0.. 1, 0.. 1] using a midpoint Riemann sum Actual value: Approximate value: Y 0.2 Z 1 Z 1 f dydx+ f dydx 2/ X Z 1 0 Z 2y 5 f dxdy = Zie ook het gebied waarover geïntegreerd wordt in figuur 9.9. Er wordt gebruikgemaakt van het inerte commando Int met hoofdletter en met quotes om X Y Figuur 9.9 de integraal mooi op het scherm te krijgen. (Zie voor het werken met quotes paragraaf 6.3.) Met evalf kun je de integraal numeriek berekenen, eventueel met opgave van het aantal significante cijfers. Wat het snelst werkt in deze situatie is dus de absolute waarde van de integrand te nemen en vervolgens over het gehele gebied te integreren. Voor het maken van de grafiek met de snijlijn erin wordt verwezen naar hoofdstuk 2, figuur Oppervlaktebepaling met de dubbelintegraal Voorbeeld 9.10 Gebogen oppervlaktebepaling Met behulp van een handig commando uit het subpakket MultivariateCalculus van het Student-pakket is snel de oppervlakte van een gebogen vlak in de ruimte te bepalen. Het gaat hier over het functievlak f(x,y) = x 2 + y waarvan de oppervlakte van een deel van het gebogen functievlak wordt bepaald waarvoor geldt dat x en y beide van 0 tot 2 lopen. > restart; f:=x^2+y; f := x 2 + y > Student:-MultivariateCalculus:-SurfaceArea(f, x=0..2, y=0..2,
194 182 Handleiding Maple 10 output=integral):%=evalf[3](%); Z 2 Z 2 2+4x 2 dydx = Automatisch wordt met het commando SurfaceArea de integraal opgesteld en met evalf kan de numerieke waarde ervan benaderd worden. Je kunt ook direct vragen naar de waarde van deze integraal met de optieoutput=value, maar dat komt niet altijd mooi uit. > Student:-MultivariateCalculus:-SurfaceArea(f,x=0..2,y=0..2,output=value); Ook kan er met de optie output=plot een visualisatie van deze integraal gemaakt worden, zie figuur Alles dus met hetzelfde commandosurfacearea! (Het volledige script van de figuur staat op de cd-rom.) y Gebogen oppervlakte met oppervlakte-element do x Figuur 9.10 Toelichting: In figuur 9.10 is het gedeelte van het functievlak te zien waarvan de oppervlakte bepaald wordt met de integraal. Ook is de normaalvector te zien op een oppervlakje do dat zich in het punt (1,1, f(1,1)) bevindt. De normaal staat loodrecht op het raakvlak daar ter plaatse. Echter omdat de schaal langs de assen niet gelijk is, is de loodrechte stand in de figuur wat vertekend. Wat er in feite gebeurt bij het opstellen van de intergraal is het volgende. Alle elementaire oppervlakjes do op het gebogen functievlak worden opgeteld waarbij x en y de lopende variabelen zijn. Beschouw de parametervoorstelling (vectorvoorstelling) van het functievlak F = [x, y, f(x, y)]. De twee richtingsvectoren die het raakvlak opspannen, zijn dan F x en F y en de lengte van de normaal n = F x F y op dit raakvlak (het uitproduct van de twee richtingsvectoren) is dan tevens de grootte van het oppervlakje do. F do = y F x = 0 1 f y Met f(x,y) = x 2 + y is in dit geval f x 1 0 f x = f x f y 1 = 2 f + f x y 2 + f 2 y + 1 = (2x) = 4x Zie nu de integrand van de dubbelintegraal die gegenereerd is door het commando SurfaceArea. Merk op dat de projectie van de vector do op het x,y-vlak precies de
195 9 Integreren 183 vector is van de gradiënt van de functie f(x,y). Dat is de richting waarin de functie het meeste toeneemt! Zie voor richtingsafgeleide en gradiënt paragraaf en Voor het maken van de vectorvoorstelling van het raakvlak aan het functievlak wordt verwezen naar paragraaf De vectorvoorstelling van het raakvlak in het punt (1, 1, f(1, 1)) kan dan in één keer opgevraagd worden met TangentPlane van het VectorCalculus-pakket. Zie voor het uitproduct van twee vectoren paragraaf Dubbelintegraal met poolcoördinaten Bij de volgende twee voorbeelden gaat het om een functie in poolcoördinaten. Ter introductie is het misschien goed om eerst nog even paragraaf 2.7 te bestuderen voor meer voorbeelden van grafieken met poolcoördinaten. Voorbeeld 9.11 Oppervlaktebepaling met poolcoördinaten Gegeven is een functie in poolcoördinaten r 1 (ϕ) = 2 2cos(2ϕ) waarbij ϕ loopt van π 4 tot π 4 met de grafiek in figuur Met behulp van de dubbelintegraal wordt de oppervlakte van de lus, ingesloten door de grafiek, berekend. De opstelling van de integraal voor de oppervlakte is als volgt (zie figuur 9.11 voor het oppervlakte-element do = r dr dϕ): ZZ Opp = G do = Z π 4 Z r 1 π 4 0 r dr dϕ = 4 > restart; interface(displayprecision=4): r1:=2*sqrt(2*cos(2*phi)); r1 := 2 2 cos(2φ) > with(plots):polarplot([r1,phi,phi=-pi/4..pi/4],scaling=constrained, numpoints=200); Zie figuur 9.11 met het oppervlakte-element do = r dr dϕ erin getekend. Het volledige script van de figuur staat op de cd-rom Oppervlakte-elementen do optellen door middel van integreren r.d(phi) dr x Figuur 9.11
196 184 Handleiding Maple 10 > Int(Int(r,r=0..r1),phi=-Pi/4..Pi/4):%=value(%); Z π Z 2 2 cos(2φ) 4 π r dr dφ = De berekening is metvalue exact gedaan (omdat het mooi uitkomt). TIP: gebruik niet de letter r als naam voor de functie als je ook r als integratievariabele gebruikt! Voorbeeld 9.12 Traagheidsmoment met poolcoördinaten Activeer eerst voorbeeld Vervolgens kan het traagheidsmoment I x van hetzelfde oppervlak ten opzichte van de X-as berekend worden. Voor het traagheidsmoment I x van het oppervlak G ten opzichte van de X-as is de opstelling van de integraal als volgt met y = r sin(ϕ): ZZ I x = G ZZ y 2 do = G r 2 sin 2 (ϕ)do = Z π 4 Z r 1 π 4 0 r 3 sin 2 (ϕ)dr dϕ > Int(Int(r^3*sin(phi)^2,r=0..r1),phi=-Pi/4..Pi/4):%=evalf(%); Z π Z 2 2 cos(2φ) 4 π r 3 sin(φ) 2 dr dφ = Hier is de benadering van de integraal met evalf toegepast en omdat bij het begin van de sessie in voorbeeld 9.11 displayprecision wat omlaag gezet is, komen er slechts 4 decimalen op het scherm te staan, hoewel er wel met meer significante cijfers gerekend wordt (zie blz. 7). 9.5 Laplace-transformatie Voor deze paragraaf is de kennis van de eenheidsstapfunctie (Heaviside) en de eenheidspuls (Dirac) nodig. Bekijk eventueel daarvoor nog paragraaf en paragraaf De Laplacetransformatie van een signaal wordt gedefinieerd door de Laplace-integraal. Het gaat over een functie f(t) van de tijd, ook wel signaal genoemd. De Laplace-getransformeerde van deze tijdsfunctie is een functie van s en wordt genoteerd als L ( f(t)) = F(s). De variabele s kan ook complexe waarden aannemen. De operator L is de operator van Laplace. L ( f(t)) = F(s) = Z 0 f(t)e st dt Nu is het vrij eenvoudig om de Laplace-getransformeerde van een tijdsfunctie (signaal) te bepalen met Maple. Hiervoor is een gemakkelijk te onthouden commando nodig:laplace. Omdat de Laplace-getransformeerde een integraaltransformatie is, bevindt dit commando zich in het pakketinttrans. Als dit pakket nog niet geactiveerd is met with(inttrans), kent Maple dit commando niet, evenmin als het commando voor de inverse Laplace-getransformeerde: invlaplace. Kijk ook in paragraaf waar de Laplace-transformatie in verband gebracht wordt met differentiaalvergelijkingen.
197 9 Integreren Voorbeelden van Laplace-getransformeerde Voorbeeld 9.13 Gedempt signaal Het gedempte signaal f(t)=t 3 e 3t wordt Laplace-getransformeerd.Hierbij gaat de variabele t over in de variabele s en het signaal f(t) gaat over in de functie F(s). > restart; with(inttrans): ft:=t^3*exp(-2*t); Fs:=laplace(ft,t,s); ft := t 3 e ( 2t) 1 Fs := 6 (s+2) 4 Voorbeeld 9.14 Signaal gedefinieerd in stukken Maple kan geen piecewise-functies transformeren, maar dat is niet erg. Via een omzetting naar een beschrijving van de functie met behulp van Heaviside, kan er wel getransformeerd worden. Zie paragraaf 2.4. f(t) = { 0 t 1 e 2t+2 sin(t 1) t > 1 e s Laplace F(s) = s 2 + 4s+5 > restart; with(inttrans): ft:=piecewise([0,t<=1],[exp(-2*t+2)*sin(t-1),t>1]); Hft:=convert(ft,Heaviside); > Fs:=simplify(laplace(Hft,t,s)); Hft := e ( 2t+2) sin(t 1)Heaviside(t 1) Fs := De inverse Laplace-transformatie e ( s) s 2 + 4s+5 Bij de inverse transformatie wordt met het commando invlaplace teruggetransformeerd naar het tijdsdomein. De variabele s gaat daarbij over in de variabele t en de functie F(s) wordt daarmee teruggetransformeerd naar het signaal f(t). Voorbeeld 9.15 Laplace-inverse met breuksplitsen > restart; with(inttrans): Fs:=(6*s+36*s^4)/(s^4*(6+s)); ft:=invlaplace(fs,s,t); Fs := 6s+36s4 s 4 (6+s) ft := t e( 6t) t 6 TIP: de inverse transformatie is goed te herkennen als de functie F(s) in partiële breuken gesplitst wordt. Voor breuksplitsen zie paragraaf > convert(fs,parfrac,s); 1 s s (6+s) 1 6s 2 TIP: eventueel kan er met evalf nog een numerieke benadering worden gemaakt.
198 186 Handleiding Maple 10 Voorbeeld 9.16 Laplace-inverse met de stapfunctie (Heaviside) De stapfunctie is ook transformeerbaar met laplace en daarmee dus ook de functies die uit stukken bestaan (piecewise). Als resultaat van de inverse transformatie kun je dan ook tijdsfuncties verwachten die met behulp van de Heaviside-functie beschreven worden. { F(s) = e 2s s L 1 f(t) = 0 t sin(2t 4) t > 2 > restart:with(inttrans): Fs:=exp(-2*s)/(s^2+4);ft:=invlaplace(Fs,s,t); Fs := e( 2s) s ft := 1 Heaviside(t 2)sin(2t 4) 2 > Pft:=simplify(convert(ft,piecewise)); { 0 t sin(2t 4) t > 2 Eventueel kunnen deze functies omgezet worden naar een piecewise-notatie met convert (..,piecewise). Met de inverse Laplace-transformatie (L 1 ) is een piecewise-functie verkregen via de Heaviside-stapfunctie. Met de laatste opdracht krijg je de gesplitste vorm die dan ook meteen vereenvoudigd is met simplify. Voorbeeld 9.17 Laplace-inverse numeriek In de regeltechniek komt het werken met de Laplace-transformatie vaak neer op de inverse transformatie. Vaak moet dit numeriek gebeuren. Je kunt Maple direct al op het numerieke been zetten door de invoer in decimale getallen op te geven. Ga uit van een functie F(s), waarvan de inverse transformatie gevraagd wordt. Er wordt gezocht naar de tijdsfunctie f(t) en we zijn benieuwd naar het verloop van de tijdsfunctie die bij de functie F(s) hoort. Enkele handigheden worden in de volgende sessie getoond. > restart: with(inttrans): interface(displayprecision=2): Fs:=900/(s*(s^3+21.0*s^ *s+1000)); 900 Fs := s(s s s+1000) > invlaplace(fs,s,t): fnormal(%,4): ft:=simplify(%,zero); ft := 0.14e ( 18.41t) 0.76e ( 1.30t) cos(7.26t) 0.49e ( 1.30t) sin(7.26t)+0.90 > collect(ft,exp); 0.14e ( 18.41t) ( 0.76cos(7.26t) 0.49sin(7.26t))e ( 1.30t) > plot(ft,t=0..4); Zie figuur Toelichting: De inverse transformatie geeft een uitvoer die nogal uitgebreid is (hier niet afgedrukt). Er ontstaat een aantal heel kleine getallen (fuzzy zero s). Deze kun je weg krijgen met het commando fnormal waarbij je meteen opgeeft in hoeveel significante cijfers er afgerond moet worden. Zie voor het commando fnormal blz Als het imaginaire deel,
199 9 Integreren t Figuur 9.12 dat toch gelijk is aan 0, weggehaald moet worden, kan dat nog met simplify(..,zero), zie voor meer informatie daarover eveneens blz Daarna kan er eventueel nog wat met de formule gemanipuleerd worden: hier worden de termen met de exponenten bij elkaar genomen met collect. Zie voor het commando collect voorbeeld 7.3. Om de uitvoer wat beperkt te houden is in het begin de displayprecision wat laag gezet (zie blz. 7), maar op de achtergrond wordt er wel met veel decimalen gerekend. Ten slotte kan de tijdsfunctie waar gezocht werd, geschetst worden, zie figuur Fourier Voor deze paragraaf is de kennis van de eenheidsstapfunctie (Heaviside) en de eenheidspuls (Dirac) nodig. Bekijk eventueel daarvoor nog paragraaf en paragraaf In deze paragraaf komt eerst de Fourier-reeks aan de orde om te laten zien hoe een periodiek signaal geanalyseerd kan worden. Dit gaat met behulp van integralen. Daarna enkele voorbeelden van de Fourier-transformatie De Fourier-reeks Periodieke signalen kunnen vaak geschreven worden in de vorm van een Fourier-reeks: een som van sinusfuncties en cosinusfuncties en eventueel nog een constante term. Om kort te gaan ziet deze reeks er als volgt uit als de periode T = 2π ω 0 is: f(t) = a (a n cos(nω 0 t)+b n sin(nω 0 t)) n=1 Hierin zijn a 0, a n en b n de zogenoemde Fourier-coëfficiënten en ω 0 is de grondfrequentie, gerelateerd aan de periode T = ω 2π 0. Deze Fourier-coëfficiënten kunnen met behulp van integralen gevonden worden: Z a 0 = 2 T T a n = 2 Z T T f(t)dt f(t) cos(nω 0 t)dt b n = 2 T Z T f(t) sin(nω 0 t)dt Als je een periodieke functie f(t) voor één periode (van 0 tot T ) definieert, kan Maple deze integralen uitrekenen en de reeks maken. Het is natuurlijk ondoenlijk om een oneindig aantal termen te laten uitrekenen, maar als je n wilt laten lopen van 0 tot N, waarbij je de waarde van N zelf bepaalt, kun je al een indruk krijgen van de reeks die zal ontstaan. Je kunt zelf het aantal termen bepalen door N in te stellen. De periode T kun je ook definiëren en de functie
200 188 Handleiding Maple 10 f(t) beschrijven op dat interval. Als je de Fourier-analyse wat vaker dan één keer wilt doen, is het handig om een procedure te schrijven in plaats van alle integralen te berekenen en apart de som te laten bepalen. De procedure kun je bijvoorbeeld de naam myfour geven en opslaan als werkblad. In de procedure staan de opdrachten die achtereenvolgens gedaan moeten worden om de Fourier-coëfficiënten te berekenen en de som te maken. In het volgende voorbeeld wordt een dergelijke procedure opgesteld voor het analyseren van een periodiek signaal dat alleen op het interval [0,T] beschreven wordt. Voorbeeld 9.18 Procedure voor het maken van de Fourier-reeks Van een periodieke functie waarvan slechts één periode T beschreven is door middel van f(t), wordt de Fourier-reeks gevormd. Het aantal termen van de reeks stel je in met N. Na restart begint het schrijven van de procedure die je kunt opslaan en vaker kunt gebruiken om toe te passen op een willekeurige periodieke functie die beschreven is voor één periode. TIP: om naar de volgende regel te gaan zonder afsluitteken, gebruik je Shift-Enter. > restart; interface(displayprecision=2): myfour:=proc(f,t,n) local omega0,a,b,n: a:=array(0..n): b:=array(0..n): omega0:=2*pi/t: for n from 0 to N do a[n]:=2/t*int(f*cos(n*omega0*t),t=0..t): b[n]:=2/t*int(f*sin(n*omega0*t),t=0..t): end do: n:= n :fnormal(evalf(a[0]/2+sum(a[n]*cos(n*omega0*t)+ b[n]*sin(n*omega0*t),n=1..n)),6): end: De procedure is nu geschreven en kan worden toegepast op een functie f voor één periode. Vervolgens kan in het commando myfour(f,t,n) metéén de periode T en de waarde van N opgegeven worden. > f:=t-t*heaviside(t-2)+2*heaviside(t-2); f := t t Heaviside(t 2)+2Heaviside(t 2) > ReeksN4:=myfour(f,4,4);ReeksN5:=myfour(f,4,5):ReeksN6:=myfour(f,4,6): ReeksN4 := cos(1.57t) 0.64 sin(1.57t) 0.32 sin(3.14t) 0.05 cos(4.71t) 0.21 sin(4.71t) 0.16 sin(6.28t) > ReeksN20:=myfour(f,4,20):p1:=plot(ReeksN20,t=0..12,color=black): p2:=plot(f,t=0..4,thickness=3,title="fourier-reeks",color=black): with(plots): display({p1,p2}); De grafiek van de functie f (met periode T = 4) is in figuur 9.13 vet weergegeven. Toelichting: In de procedure worden de integralen en de termen van de reeks berekend. Alleen de reeks met N = 4 is hier afgedrukt. In figuur 9.13 is de grafiek van de reeks met N = 20 en de grafiek van de functie f (vet) getekend (de laatste alleen voor één periode). Merk ook op dat in deze procedure numeriek gerekend wordt met evalf en dat er gebruikgemaakt wordt van fnormal, waarbij het aantal significante cijfers voor de afronding op 6 gesteld is. Dit kun je zelf natuurlijk veranderen in de procedure. De displayprecision
201 9 Integreren Fourier-reeks t Figuur 9.13 is ten behoeve van de decimalen op het scherm wat laag gezet, maar dat heeft geen invloed op de nauwkeurigheid van de berekening. De functie f(t) kan zowel met behulp van de Heaviside-stapfunctie gedefinieerd worden als met piecewise. Als er problemen ontstaan met de functie die in piecewise-notatie is ingevoerd, kan altijd nog een conversie plaatsvinden en de formulering van de functie met behulp van Heaviside gemaakt worden (zie ook voorbeeld 2.4). Daarmee rekent Maple in ieder geval probleemloos bij het integreren. Hoe meer termen van de reeks worden meegenomen, des te meer gaat de grafiek van de reeks lijken op de grafiek van de oorspronkelijk gedefinieerde functie f(t). Voor andere voorbeelden kan steeds dezelfde procedure myfour gebruikt worden en op die manier kunnen ook andere periodieke signalen geanalyseerd worden. Zorg er wel voor dat bij deze procedure de functie f(t) steeds beschreven wordt voor de periode van t = 0 tot t = T De Fourier-transformatie De Fourier-transformatie F ( f(t)) van de functie f(t) wordt gedefinieerd met behulp van de Fourier-integraal: Z F ( f(t)) = f(t)e iωt dt Deze Fourier-transformatie is, evenals de Laplace-transformatie, te vinden in het integraaltransformatie-pakket te activeren met with(inttrans). Een aantal veelvoorkomende functies kun je nu Fourier-transformeren met het commando fourier. In het algemeen gaat de functie f(t) over in een functie van ω die we dan F(ω) zullen noemen. Bij het commando fourier moet opgegeven worden dat t overgaat in ω. De inverse Fourier-transformatie gaat met invfourier op dezelfde manier als de inverse Laplace-transformatie (zie paragraaf 9.5.2). { 1 x [ 1,1] Voorbeeld 9.19 Gegeven de blokfunctie f(t) =. 0 x / [ 1,1] Hiervan bepalen we de Fourier-getransformeerde. > restart:with(inttrans): ft:=heaviside(t+1)-heaviside(t-1); > F[omega]:=fourier(ft,t,omega); ft := Heaviside(t + 1) Heaviside(t 1) F ω := 2sin(ω) ω
202 190 Handleiding Maple 10 > with(plots): p1:=plot(ft,t=-2..2,thickness=2,color=black): p2:=plot(f[omega],omega=0..10,title="fourier-transformatie", labels=["omega",""],color=black): p3:=textplot({[1.20,-0.15,"t"], [7.20,-0.11,"omega"], [0.79,0.75,"signaal"],[1.72,1.58,"getransformeerde"]}, font=[times,italic,12],align={rigt,above}): display({p1,p2,p3},labels=[" "," "]); Zie figuur Fourier-transformatie 2 getransformeerde signaal t omega8 10 Figuur 9.14 Toelichting: In figuur 9.14 is te zien hoe in één figuur de blokfunctie en zijn Fouriergetransformeerde verenigd zijn. Technici kunnen hieraan betekenis ontlenen. Het heeft te maken met welke frequenties het sterkst vertegenwoordigd zijn bij het analyseren van een dergelijke blokfunctie. Bij dit textplotcommando nog een aardig voorbeeld hoe je met de optiefont= nog iets kunt doen aan de tekst in de lay-out van de grafiek.
203 10 Complexe getallen 10.1 Inleiding Dit hoofdstuk begint met de basisbewerkingen van het rekenen met complexe getallen. Maple rekent trouwens per definitie altijd in de complete getallenverzameling van de complexe getallen, maar dat is niet altijd direct merkbaar! De imaginaire eenheid heeft bij Maple de naam I. Zelf schrijven we meestal i en bij elektrotechniek wordt vaak de j gehanteerd. Het betekent allemaal hetzelfde. De imaginaire eenheid wordt gedefinieerd als i = 1 of ook wel als i 2 = 1. Voor het afspreken van een andere naam voor de imaginaire eenheid, bijvoorbeeld de j, voer je aan het begin van het werkblad in:interface(imaginaryunit=j), zoals dat ook gedaan is in voorbeeld Zie voor meer informatie over interface paragraaf 6.5. Al vaker zijn de complexe getallen aan de orde geweest, bijvoorbeeld bij het ontbinden van veeltermen in factoren. Zoals bekend, kan een polynoom van de graad n in de complexe getallenleer in n factoren ontbonden worden (ook als de coëfficiënten niet allemaal reëel zijn). Het is mogelijk om met een extra optie complex bij het commando factor ervoor te zorgen dat het programma overgaat op de numerieke berekening in de verzameling van de complexe getallen. Het is dan misschien ook handig om de displayprecision wat lager te zetten voor de overzichtelijkheid op het scherm (zie blz. 7). Ook is het mogelijk te ontbinden in de verzameling van de reële getallen. Dit gaat met de optie real bij het commando factor. Het is niet altijd geschikt om deze optie bij het commandofactor te gebruiken. In het geval er parameters in de polynoom staan, doen de opties real en complex niets. Zie ook voorbeeld 7.2 welke mogelijkheden er zijn. Voorbeeld 10.1 Mogelijkheden van het gebruik vanfactor > restart; interface(displayprecision=4): f:=x^4-3*x^3+2*x^2-x+1; > factor(f,real); > factor(f,complex); f := x 4 3x 3 + 2x 2 x+1 (x )(x )(x x ) (x i)(x I)(x )(x ) > use RealDomain in solve(f=0.0,x) end; , Toelichting: Bij het oplossen van vergelijkingen zie je vaak dat er complexe getallen op het scherm verschijnen, te herkennen aan de I. Dat is een teken dat het programma in feite áltijd met complexe getallen rekent. Zie paragraaf 3.3. Sommige reële functies hebben een beperkt domein: denk aan wortelfuncties en logaritmen. We moeten met de reële functies op het domein letten, maar Maple rekent inwendig altijd met de uitbreiding van de complexe getallen en kent deze beperkingen niet. > ln(-1) =ln(-1); ln( 1) = I π
204 192 Handleiding Maple 10 (Gebruik van quotes vertraagt de berekening, zie ook paragraaf 6.3.) Er is echter wel een mogelijkheid om te beperken en alleen te rekenen in de reële getallen (RealDomain). Het is mogelijk bij het oplossen van vergelijkingen als je alleen belangstelling hebt voor de reële oplossingen. Zie voorbeeld 8.19 en meer informatie paragraaf Basiskennis van de complexe getallen Complex geconjugeerde en basisbewerkingen Voorbeeld 10.2 Begin met een paar complexe getallen te definiëren: z 1 = 3+4i en z 2 = 1+3i. > restart; z1:=3+4*i; z2:=-1+3*i; z1 := 3+4I z2 := 1+3I De complex geconjugeerde van z 2 = 1+3i is z 2 = 1 3i. > conjugate( z2 )=conjugate(z2); > z1+z2 =z1+z2; > z1-z2 =z1-z2; > z1/z2 =z1/z2; > z1 * z2 =z1*z2; z2 = 1 3I z1+z2 = 2+7I z1 z2 = 4+I z1 z2 = I z1z2 = 15+5I Im-as 6 4 z2 2 z1+z2 Complexe vlak z1 z1-z Re-as 2 -z2 Figuur 10.1 Toelichting: Het rekenen (optellen en aftrekken, vermenigvuldigen en delen) met complexe getallen gaat vrij eenvoudig op een natuurlijke manier en het antwoord komt meestal in de vorm a + ib. Zie paragraaf 6.3 voor de elegante uitvoer in het werkblad met behulp van quotes. In figuur 10.1 wordt de optelling en de aftrekking gevisualiseerd in het Complexe Vlak met
205 10 Complexe getallen 193 behulp van vectoren. Het script van deze figuur staat op de cd-rom bij dit boek. Om zelf vectoren te tekenen zie paragraaf Het commando evalc Mocht het antwoord niet in de vorm a+ib op het scherm verschijnen, kan dat komen doordat er wellicht parameters in de vorm voorkomen waarvan het programma niet weet of dit complexe parameters zijn of niet. Immers Maple rekent per definitie in de complexe getallen! Met evalc rekenen impliceert de aanname dat de onbekende parameters reële getallen zijn! Voorbeeld 10.3 Het commandoevalc Je kunt met het commando evalc (evalueer met complexe getallen) bewerkstelligen dat er alsnog omgezet wordt in de vorm a+ib en dat de parameters als reële getallen worden opgevat. > z3:=2*p+i*q; z4:=3*r+p*i; > z3+z4=evalc(z3+z4); Reële deel en imaginaire deel z3 := 2 p+i q z4 := 3r+I p 2 p+iq+3r+i p = 2 p+3r+i(q+ p) Voorbeeld 10.4 Een andere letter voor de imaginaire eenheid Het is voor elektrotechnici van belang dat de formules in verslagen eruit komen te zien in herkenbare vorm. Het is wenselijk om overal de letter j te gebruiken als de imaginaire eenheid bedoeld wordt. Dit kan verwezenlijkt worden met aan het begin van de sessie een instelling interface(imaginaryunit=j); Zie paragraaf 6.5 voor meer informatie over interface. > restart; interface(imaginaryunit=j); z:=1/r+j*omega*c+1/(j*omega*c); > evalc(z); z := 1 R + j ωc j ωc 1 R + j(ωc 1 ωc ) > Re(z)=evalc(Re(z)); Im(z)=evalc(Im(z)); R( 1 R + j ωc j ωc ) = 1 R I( 1 R + j ωc j ωc ) = ωc 1 ωc Toelichting: Voor het reële deel en het imaginaire deel is er een mooie kalligrafische letter op het scherm te zien. Voor de berekening is het dus noodzakelijk, bij parameters in een formule, dat het commando evalc gebruikt wordt om het programma te laten weten dat de parameters staan voor reële getallen Modulus en argument De modulus en het argument (poolcoördinaten) van een complex getal zijn te krijgen met de commando sabs en argument. Bekend moet zijn dat de modulus a+ib = a 2 + b 2 en
206 194 Handleiding Maple 10 voor het argument geldt arg(a+ib) = arctan( b a ) als het complexe getal in het rechterhalfvlak ligt of er geldt arg(a+ib) = arctan( b a ) ± π als het complexe getal in het linkerhalfvlak ligt. Om in één keer beide poolcoördinaten te krijgen, is het omzetcommando convert (..,polar) zeer geschikt. Voor de volgende voorbeelden worden de complexe getallen z 2 en z 3 ingevoerd. Voorbeeld 10.5 Poolcoördinaten > restart; z2:=-1+3*i; r2:=abs(z2); phi2:=argument(z2); convert(z2,polar); z2 := 1+3I r2 := 10 φ2 := arctan(3)+π polar( 10, arctan(3)+π) > z3:=-2.45+i*3.4; r3:=abs(z3); phi3:=argument(z3); convert(z3,polar); z3 := I r3 := φ3 := polar( , ) Aan het argument van z 2 kun je zien dat dit complexe getal in het linkerhalfvlak van het complexe vlak ligt. Dat geldt ook voor z 3 : het argument is groter dan π 2. Voorbeeld 10.6 Vermenigvuldigen Als je numeriek wilt rekenen, kun je het commando evalf weer gebruiken of je voert de toekenningen in met decimale getallen waarna er vanzelf numeriek gerekend wordt. Vergelijk nu eens de poolcoördinaten van z 2, z 3, en z 2 z 3 met elkaar en zie voor de getallen z 2 en z 3 voorbeeld > restart; z2:=-1+3*i: r2:=abs(z2): phi2:=argument(z2): z3:=-2.45+i*3.4: r3:=abs(z3): phi3:=argument(z3): abs(z2*z3)=evalf(r2*r3); = > argument(z2*z3)=evalf(phi2+phi3-2*pi); > z2*conjugate(z2)=r2^2; = = 10 Toelichting: Ga in het bovenstaande na of het klopt dat: z 2 z 3 = z 2 z 3 arg(z 2 z 3 ) Het complexe vlak = arg(z 2 )+arg(z 3 ) (eventueel aangevuld met ± 2π voor de hoofdwaarde van het argument.) z 2 z 2 = z 2 2 Voorbeeld 10.7 Punten tekenen in het complexe vlak > restart;interface(warnlevel=0);with(plots):z1,z2:=3+4*i,-1+3*i;
207 10 Complexe getallen 195 z1, z2 := 3+4I, 1+3I > complexplot({0,z1,z2,z1+z2,z1-z2},style=point,labels= ["Re-as"," Im-as"], symbolsize=15,scaling=constrained); Zie figuur punten in het complexe vlak Im-as Re-as Figuur 10.2 Toelichting: Met het commandocomplexplot uit het plotpakket kun je een verzameling of een lijst complexe getallen ( C) in het complexe vlak weergeven. Er moet dan natuurlijk wel de optie style=point bij het plotcommando meegegeven worden, want standaard worden de punten altijd met elkaar verbonden. Handig is het hier om labels erbij op te geven en de verdeling van de eenheden op de assen gelijk te maken met de optie scaling=constrained. Horizontaal is de reële as (Re-as) en verticaal is de imaginaire as (Im-as). Ga na welke getallen bij welke punten horen en bekijk of je bijvoorbeeld van z 1, z 2 en z 1 + z 2 een parallellogram kunt maken. Met textplot of met een ander programma (zie paragraaf 2.13) kan het plaatje eventueel aangevuld worden. TIP: geef het getal 0 mee in complexplot. Je krijgt dan een assenstelsel met de oorsprong erbij De formule van Euler Met r*exp(i*phi): %=evalc(%); is het complexe getal met modulus r en argument ϕ ook te schrijven als het volgende, wat bekend staat als de formule van Euler. z = r e iϕ = r cosϕ+ ir sinϕ De vorm z = r e iϕ heeft veel voordelen boven de vorm a + ib. Er kan met de gedaante z = r e iϕ vaak beter handmatig en inzichtelijk gerekend worden als het om bijvoorbeeld vermenigvuldigen gaat. Ook delen, worteltrekken, logaritme nemen en nog vele andere berekeningen zijn transparanter met de exponentiële vorm door te kijken naar de modulus en het argument. Er is echter geen commando om van de vorm a+ib over te gaan naar de vorm r e iϕ. Je kunt hooguit de vorm omzetten naar poolcoördinaten. Met het commando evalc kan de vorm a + ib weer verkregen worden. Als er decimale getallen worden ingevoerd, rekent Maple alles zover mogelijk uit totdat de vorm a+ib weer tevoorschijn komt. Je kunt de vorm r e iϕ dan soms helemaal niet krijgen. Soms, als z beschreven wordt met cosinus- of sinusfuncties, kun je proberen om de omzetting naar de exponentiële vorm te krijgen met convert(..,exp).
208 196 Handleiding Maple 10 > cos(phi): %=convert(%,exp); 1 cos(φ) = 1 2 e(i φ) + 2 e (I φ) 10.3 Vergelijkingen oplossen in C Het oplossen van vergelijkingen met het commando solve gaat in principe altijd met complexe getallen. Als je de oplossingen in het complexe vlak wilt zien, kun je van de rij oplossingen een verzameling complexe getallen maken en deze door Maple laten tekenen in het complexe vlak met het commando complexplot uit het plotpakket, zoals ook in voorbeeld In principe kan dit met allerlei soorten vergelijkingen. Zie voor meer informatie over vergelijkingen paragraaf Binomiaalvergelijkingen Binomiaalvergelijkingen hebben een oplossingsverzameling met een bijzondere ligging in het complexe vlak. Meestal zit er zoveel systeem in dat ze vaak ook wel met pen en papier op te lossen zijn! Voorbeeld 10.8 Vierdegraads (binomiaal)vergelijking Ga uit van de vergelijking z 4 = i. Je bent misschien gewend om in dit soort gevallen de vergelijking om te werken tot: z 4 = i z 4 = e πi 2 +2kπi z = e πi k πi De variabele k doorloopt de verzameling van de gehele getallen Z. Bepaalde waarden van k leveren hetzelfde antwoord en daarna kun je hieruit de in totaal vier verschillende antwoorden destilleren en weergeven in het complexe vlak. > restart; verg1:=z^4=i; > punten1:={solve(verg1,z)}; verg1 := z 4 = I punten1 := {( 1) (1/8), ( 1) (5/8), ( 1) (1/8), ( 1) (5/8) } > with(plots): p1:=complexplot(punten1,style=point,symbol=circle, symbolsize=20, labels =["Re-as","Im-as"],scaling=constrained): p2:=implicitplot(x^2+y^2=1,x= ,y= ,linestyle=2): display({p1,p2}): Zie figuur 10.3 waar de vier oplossingen op de eenheidscirkel liggen, aangegeven met rondjes. Toelichting: Na solve wordt van de rij complexe getallen meteen een verzameling gemaakt en deze getallenverzameling kan als puntenverzameling in het complexe C-vlak gepresenteerd worden. Bovendien is bij het plotcommando ervoor gezorgd dat de eenheden van de assen gelijk zijn met de optie scaling=constrained (klik eventueel op 1:1). Je zult zien dat de vier oplossingen van de vierdegraads vergelijking mooi verdeeld op de eenheidscirkel liggen in het complexe vlak. In dezelfde figuur kan deze eenheidscirkel erbij getekend worden met implicitplot (zie paragraaf 2.8). In de praktijk wil je misschien liever de oplossingen numeriek berekenen. Dat kan het beste als de vergelijking ingevoerd wordt met behulp van decimale getallen.
209 10 Complexe getallen 197 Voorbeeld 10.9 Binomiaalvergelijking numeriek opgelost Een voorbeeld van een hogeregraads vergelijking: (z+2 i) 6 = 27i. Dit voorbeeld begint níet met restart maar volgt na voorbeeld 10.8, zodat de grafieken in één figuur gecombineerd kunnen worden. > interface(displayprecision=2): verg2:=(z+2.0-i)^6=27.0*i: punten2:=solve(verg2,z); punten2 := I, I, I, I, I, I > p3:=complexplot({punten2},style=point,symbol=cross,symbolsize=20, labels=["re-as","im-as"]): p4:=implicitplot((x+2)^2+(y-1)^2=3,x=-4..2,y=-1..3,scaling=constrained, linestyle=2): display({p1,p2,p3,p4}); Zie figuur Oplossingen van een binomiaalvergelijking liggen altijd op een cirkel in het complexe vlak Im-as Re-as Figuur 10.3 Toelichting: Omdat er numeriek gerekend wordt, is het handig om de displayprecision wat lager te zetten voor de overzichtelijkheid van de presentatie (zie ook blz. 7). De oplossingen liggen ook weer op een cirkel in figuur 10.3 weergegeven met kruisjes. Deze zesdegraads vergelijking kan eventueel met de hand opgelost worden en in het geval je dit wilt uitwerken met Maple, is het aardig om te zien dat alle zes oplossingen op de cirkel in het complexe vlak liggen. Uit het hoofd is te zien dat het middelpunt van deze cirkel ( 2,1) is, dat is dus het complexe getal 2+i. Verder is de straal van de cirkel gelijk aan 6 27 = 3. De vergelijking van deze cirkel luidt (x+2) 2 +(y 1) 2 = 3. Voer de complexe vergelijking dus in met decimale getallen! Voor het maken van de grafiek met bepaalde opties, zie hoofdstuk Grafieken van complexe functies Zoals je in de voorbeelden van paragraaf 10.3 en voorbeeld 10.7 hebt gezien, kun je complexe getallen als een verzameling punten in het complexe vlak tekenen. Met hetzelfde commando complexplot uit het plotpakket is het ook mogelijk om krommen in het complexe vlak te tekenen. Het gaat dan om de grafiek van een functie die een reëel getal ω op een complex getal F(ω) afbeeldt.
210 198 Handleiding Maple 10 TIP: als je Re-as en Im-as langs de assen in je grafiek van F(ω) wilt hebben, kun je een extra optielabels aan het commandocomplexplot meegeven Polair diagram Voorbeeld Complexe functie Ga uit van de complexe functie F(ω) van één variabele ω met ω reëel. F(ω) = 1 ( ω 2 )+5iω Hierin is i de imaginaire eenheid. De grafiek van F(ω) wordt in het complexe vlak weergegeven, het zogenoemd polair diagram. Hierbij worden de waarden van ω die corresponderen met punten van de grafiek in het complexe vlak aangegeven. > restart; F:=omega->1/(-0.3*omega^2+5*I*omega+800); 1 F := ω 0.3ω 2 + 5I ω+ 800 > with(plots): p0:=complexplot(f(omega),omega= , labels=["re-as","im-as"],labeldirections=[horizontal,vertical]): p1:=textplot({[re(f(0)),im(f(0)),"omega=0"], [Re(F(10)),Im(F(10)),"omega=10"],[Re(F(30)),Im(F(30)),"omega=30"], [Re(F(60)),Im(F(60)),"omega=60"],[Re(F(100)),Im(F(100)),"omega=100"], [Re(F(50)),Im(F(50)),"omega=50"]},align={RIGHT,BELOW}): p2:=complexplot({f(0),f(10),f(30),f(50),f(60),f(100)}, style=point,symbol=diamond,symbolsize=15,labels=["re-as"," Im-as"], labeldirections=[horizontal,vertical]): display({p0,p1,p2},scaling=constrained,title="complexe functie polair diagram"); Zie figuur complexe functie polair diagram Re-as omega=0 omega=100 omega=10 omega= omega= Im-as omega=50 Figuur 10.4 Toelichting: Er is in dit geval voor de invoer van de functie gebruikgemaakt van de pijltjesnotatie vanwege de grote voordelen daarvan (zie paragraaf 1.5.6). Het belangrijkste voordeel is om snel functiewaarden te berekenen. Zo kunnen ook nog extra punten aan de
211 10 Complexe getallen 199 grafiek worden toegevoegd. Het script voor het polaire diagram is zó geschreven dat het gemakkelijk is iets aan de functie F te veranderen, zodat dan alles van het plotcommando zich automatisch aanpast. Dat is een van de voordelen van het werken met de pijltjesnotatie bij het invoeren van een functie. TIP: het is handig om te weten hoe het verloop is van de grafiek voor verschillende waarden van ω. Probeer dan eens de volgende plotopdracht voor het maken van een animatie. Met animatecurve is mooi te zien hoe de grafiek wordt doorlopen bij toenemende waarde van ω. Kijk eventueel nog in paragraaf voor het maken van dit soort animaties. > animatecurve([re(f(omega)),im(f(omega)),omega=0..100],numpoints=500); Bode diagram Voor het bestuderen van het gedrag van hogere orde systemen in de regeltechniek kan het handig zijn om de fase van F(ω) (het argument van F(ω)) en de modulus (amplitude) van F(ω) logaritmisch in een grafiek weer te geven in het geval dat ω een groot interval beslaat. Het wil zeggen dat voor de horizontale as waarop ω wordt uitgezet een logaritmische schaal wordt gekozen. Als voor de verticale as een normale schaalverdeling genomen wordt, noemen we zo n plot eensemilogplot. Voorbeeld Fase als functie van ω met logaritmische schaal Zie voorbeeld voor het functievoorschrift van F(ω). Voor de grafiek in figuur 10.5 van het argument van F(ω) (de fase ϕ) wordt vaak een logaritmische schaal voor ω gebruikt als de waarden van ω vrij groot kunnen worden. Verticaal is de fase ϕ uitgezet (niet logaritmisch), eventueel omgerekend naar graden. Maple heeft hiervoor het commandosemilogplot uit het plotpakket. > restart; interface(warnlevel=0): with(plots): F:=omega->1/(-0.3*omega^2+5*I*omega+800): semilogplot(argument(f(omega))*180/pi,omega= ,labels= ["omega","fase"],axes=boxed,color=black,title="bodeplot van de fase"); Zie figuur Figuur 10.5 fase Bodeplot van de fase.1e e2.1e3.1e4 omega
212 200 Handleiding Maple 10 Toelichting: De functie ϕ(ω) is een reële functie. Het is immers het argument van de functie F(ω). Bij het gebruik vansemilogplot moet beslist het interval voor ω opgegeven worden met decimale getallen! Met dit commando uit het plotpakket krijg je een grafiek met langs de horizontale as de onafhankelijke variabele ω in een logaritmische schaal: dat wil zeggen de log 10 (ω). De grenzen voor ω moeten handig gekozen worden. De waarde ω = 0 kan bijvoorbeeld niet vanwege de logaritme. Neem voor het interval ω [0.01, 6000]. Op de horizontale as zien we dan ook.1e-1 staan wat 0.01 betekent en 01e4 betekent Bij de functie F(ω) zijn er alleen maar negatieve waarden voor het argument dat omgerekend is naar graden. De kromme in het polaire diagram van figuur 10.4 bevond zich immers geheel onder de reële as. Voorbeeld Modulus als functie van ω met dubbel-logaritmische schaal Voor de modulus van F(ω) (zie voorbeeld voor het functievoorschrift) wordt vaak een dubbel-logaritmische schaal gebruikt met het commando loglogplot uit het plotpakket. > restart; with(plots):f:=omega->1/(-0.3*omega^2+5*i*omega+800): loglogplot(abs(f(omega)),omega= ,labels=["omega","abs(f)"], axes=boxed,title="bodeplot van de amplitude"); Zie figuur e 2 Bodeplot van de amplitude.1e 3 abs(f) 1e 05 1e 06 Figuur e 07.1e e2.1e3.1e4 omega > fsolve(diff(evalc(abs(f(omega))),omega)=0,omega,20..80); Toelichting: In figuur 10.6 is verticaal de modulus van F(ω) uitgezet met een logaritmische schaal (log 10 ) en horizontaal is ω uitgezet, eveneens met een logaritmische schaal. De modulus F(ω) van F als functie van ω is een reële functie. In de grafiek kun je de piek van de resonantie zien. De modulus is het grootst als ω 50. De berekening daarvoor is met differentiëren gedaan. De afgeleide van de modulus F(ω) naar ω moet dan gelijk zijn aan 0. Vergeet dan niet in deze situatie evalc te gebruiken, omdat niet bekend is bij het programma dat ω een reëel getal is. Bij het plotten hoeft evalc niet gebruikt te worden, omdat bij het plotcommando achtereenvolgens voor ω numerieke reële getallen worden ingevuld in de functie. Dit soort diagrammen wordt wel een Bode diagram genoemd. TIP: als je alleen de verticale as logaritmisch wilt hebben, gebruik je logplot.
213 10 Complexe getallen Poolbanen (rootlocus) Poolbanen (rootlocus) komen voor in de regeltechniek. Het gaat daarbij over regelsystemen met een overdrachtsfunctie H die een functie is van s. Met de overdrachtsfunctie H(s) van Out put(s) een systeem ligt de verhouding Input(s) vast. De input van het systeem wordt ook wel storing genoemd en werkt op het energieloze systeem. De Output als functie van s hoeft dan alleen nog maar teruggetransformeerd te worden met Laplace om de tijdsfunctie van de output van het systeem te vinden. Zie voor de Laplace-transformatie paragraaf 9.5 en voor een toepassing voorbeeld 11.7 waarbij de storing (input) werkt op een energieloos gedempt massa-veersysteem. De variabele s staat voor een complex getal. Nu kan een regeltechnicus veel aflezen uit de plaatsen waar zich de polen van een systeem bevinden. Een poolplaats van een systeem is een waarde voor s (in het complexe vlak) waarbij de noemer van de overdrachtsfunctie gelijk is aan 0. Op de website bij dit boek staat een bestand dat gaat over signalen waarin ook een uitgebreide paragraaf over overdrachtsfuncties en poolbanen is opgenomen. Voorbeeld Eenvoudig overdrachtssysteem met een overdrachtsfunctie H 1 (s) H 1 (s) = 5 s (s+1)(s+5) Uit het hoofd is te zien dat de poolplaatsen van dit systeem de punten op de reële as zijn: s = 1 en s = 5. Een pool van een (complexe) functie is namelijk een nulpunt van de noemer. Zo n pool kunnen we zichtbaar maken bij het bestuderen van de absolute waarde van H 1 (s) afhankelijk van de plaats waar je zit in het complexe vlak. > restart; H1:=(5-s)/((s+1)*(s+5)); 5 s H1 := (s+1)(s+5) > H1xy:=subs(s=x+I*y,H1); 5 x Iy H1xy := (x+iy+1)(x+i y+5) > plot3d(abs(h1xy),x=-8..4,y=-8..4,axes=boxed, orientation=[-77,60], labels=["re-as","im-as"," abs(h1)"],view=[-8..4,-8..4,0..5]); Zie figuur Polen van H1 5 4 abs(h1) Re-as 5 0 Im-as Figuur 10.7
214 202 Handleiding Maple 10 Toelichting: In figuur 10.7 zien we dat de absolute waarde van de overdrachtsfunctie H 1 uitgezet is tegen de waarden van s in het complexe vlak (horizontaal). Daartoe stellen we s = x+iy en maken een gewone grafiek van H(x,y) in de R 3 met behulp van plot3d. Duidelijk zijn de pieken te zien die de polen visualiseren. Voor s = 1 en s = 5 heeft H 1 (s) dus polen. Voorbeeld Teruggekoppeld systeem Het open systeem H 1 = 5 s van voorbeeld krijgt een terugkoppeling met versterkingsfactor K. Het closed loop-systeem kan nu beschreven worden met de overdrachtsfunctie (s+1)(s+5) H waarvoor geldt: H = K H 1 K (5 s) = 1+KH 1 s 2 + 6s K s+ 5+5K Het zal duidelijk zijn dat dit teruggekoppelde (closed loop) systeem meer polen heeft afhankelijk van de versterkingsfactor K. De nulpunten van de noemer van de systeemfunctie H(s) zijn soms reëel en soms complex, afhankelijk van de waarde van de parameter K. Deze poolplaatsen kunnen we zichtbaar maken in het complexe vlak en we doen dat eerst met een animatie (zie paragraaf ) waarbij de parameter K loopt van 0 tot 40. > restart; with(plots): H,H1:=K*H1/(1+K*H1),(5-s)/((s+1)*(s+5)); H, H1 := K H1 1+KH1, 5 s (s+1)(s+5) > simplify(h); polen:=[solve(denom(%),s)]; K( 5+s) s 2 + 6s+5+5K K s polen := [ K K K + 16, K K K + 16 ] 2 Het script voor de animatie is: > polencomplex:=seq([re(polen[i]),im(polen[i]),k=0..50], i=1..nops(polen)): animatecurve({polencomplex},style=point,scaling=constrained,axes=normal); In één keer kan ook met rootlocus uit het plotpakket de verzameling poolplaatsen zichtbaar gemaakt worden: > rootlocus(h1,s,0..50,style=point,scaling=constrained, axes=normal,title="rootlocus van H"); Zie figuur Toelichting: Eerst formuleren we de systeemfunctie van het teruggekoppelde systeem H en met een meervoudige toekenning meteen ook de functie H 1 van het open loop-systeem. Vervolgens merken we op dat de noemer van H kwadratisch is in s. Er zullen dan voor iedere waarde van de parameter K steeds twéé poolplaatsen zijn (reëel of complex), namelijk wanneer de noemer van H gelijk is aan 0. Bij het samenstellen van de lijst met punten wordt gebruikgemaakt van nops om het aantal operanden van bijvoorbeeld een lijst aan te duiden (paragraaf 4.4). Het is handiger met nops te werken, omdat hetzelfde script dan ook gebruikt kan worden voor een andere functie die misschien meer dan twee polen heeft. Aan de hand van de lijst met polen zien we aan het wortelteken dat voor bepaalde waarden van K de vorm onder het wortelteken kleiner dan 0 zou kunnen zijn en dat de gevonden polen dan elkaars complex geconjugeerde zijn. Ook kunnen we zien dat voor K = 0 er twee polen zijn die precies dezelfde zijn als de polen van het open loop-systeem H 1 (s); dat zijn dan
215 10 Complexe getallen 203 rootlocus van H Figuur 10.8 de startpunten van de poolbaantakken. De twee poolbaantakken beginnen voor K = 0 dus in de twee punten s = 1 en s = 5 en bewegen naar elkaar toe tot het breakaway point, waarna ze hun weg vervolgen langs een cirkelvormige baan waarvan het middelpunt ligt in het nulpunt van de functie H 1, namelijk s = 5. In de animatie met animatecurve uit het plotpakket (zie paragraaf ) is prachtig te zien hoe voor toenemende waarden van K de poolbaantakken beschreven worden in het complexe vlak. Voor een bepaalde waarde van K, die je eventueel berekenen kunt, liggen de polen precies op de imaginaire as. Dat is een teken voor de regeltechnicus dat het systeem met deze versterking K instabiel wordt. Verder doorlopend langs de cirkelbaan met toenemende K ontmoeten de twee poolbaantakken elkaar weer in het entry point op de reële as. De ene tak zal dan naderen tot het nulpunt s = 5 en de andere tak beweegt zich naar oneindig. In de figuur doorloopt K het interval [0,40]. Deze poolbaan van H kan ook eenvoudig met het commando rootlocus uit het plotpakket gevisualiseerd worden. Met rootlocus krijgen de verschillende poolbaantakken automatisch verschillende kleuren. Het commando heeft in ieder geval de overdrachtsfunctie H 1 (s) van het open loop-systeem nodig als functie van s (of een andere letter) en verder het interval dat doorlopen wordt door de versterkingsfactor K die niet beslist een naam hoeft te hebben. TIP: het is soms wel handig om de eenheden op de assen gelijk te houden (constrained) en om de polen goed te zien in de grafiek, kies je voor style=point. Standaard is bij dit commando axes=boxed ingesteld, maar axes=normal is waarschijnlijk beter.
216
217 11 Differentiaalvergelijkingen 11.1 Inleiding Het onderwerp differentiaalvergelijkingen (DV s) heeft een zeer breed toepassingsgebied en het programma Maple leent zich er uitermate voor om een differentiaalvergelijking te onderzoeken en de oplossing van de differentiaalvergelijking zo mogelijk analytisch en anders numeriek te verkrijgen. Hoewel er een procedure aanwezig is om de analytische oplossing te vinden, wil dat niet zeggen dat het programma alle DV s op die manier aan kan. Niet iedere DV heeft namelijk een analytische oplossing. Er is immers ook niet voor iedere integraal een gesloten vorm te vinden. Vaak genoeg werd de integraal weer teruggegeven en moesten we onze toevlucht nemen tot een numerieke benadering. Omdat er bij het oplossen van differentiaalvergelijkingen in feite ook geïntegreerd wordt, ligt dat hier precies hetzelfde. Als er geen oplossing komt, is er geen analytische oplossing en moet men zijn toevlucht nemen tot een numerieke oplossing. Echter in dat geval is het wel van belang dat alle parameters een waarde hebben en dat er voldoende randvoorwaarden bekend zijn. Het gaat in dit hoofdstuk om gewone differentiaalvergelijkingen (voor functies van één variabele). Er hoeft geen speciaal pakket geactiveerd te worden; hooguit gebruiken we een enkel commando uit het DEtools-pakket voor het plotten van een lijnelementenveld of het plotten van een numerieke benadering. (DE staat voor Differential Equation.) Het aardige is dat er verder in feite slechts één commandodsolve nodig is voor het oplossen van een differentiaalvergelijking. De structuur van dit commando is heel eenvoudig en lijkt op dat van solve voor gewone vergelijkingen (paragraaf 3.3): er is een DV (of een stelsel van DV s) en er zijn één of meer onbekende functies en soms zijn er randvoorwaarden (RV genoemd). dsolve(dv,onbekende functie) dsolve({dv,randvoorwaarde(n)},onbekende functie) dsolve({dv1,dv2...rv1,rv2...},{onbekende functies}) Er is verder nog een mogelijkheid om bij dit commando opties mee te geven en in dit hoofdstuk zal er een aantal de revue passeren om verschillende situaties naar onze hand te zetten. Maple rekent met dit commando altijd analytisch, ook al worden er bij de invoer decimale getallen gegeven, tenzij de optienumeric erbij gegeven wordt. Met pen en papier oplossen van differentiaalvergelijkingen gaat totaal anders dan er in dit hoofdstuk wordt getoond. Met pen en papier zorg je er namelijk voor dat je door middel van integreren tot een antwoord komt. Bij het gebruik van het commando dsolve gebeurt dat onzichtbaar op de achtergrond. Besteed aandacht aan het goed formuleren van de DV en gebruik verder dan ook alléén dit commando dsolve om tot een oplossing te komen en werk met de computer niet met integratie. Ten slotte is er nog een Maplet om interactief differentiaalvergelijkingen of systemen van differentiaalvergelijkingen op te lossen op verschillende manieren: analytisch of numeriek, waarbij gekozen kan worden uit verschillende methoden. Daarbij kunnen de bijbehorende commando s opgevraagd en de grafieken gepresenteerd worden. Het effect van verschillende randvoorwaarden en verschillende waarden voor parameters kan bekeken worden. Het
218 206 Handleiding Maple 10 Figuur 11.1 Maplet is beter te begrijpen en daardoor beter te hanteren als de verschillende mogelijkheden uit de voorbeelden doorgenomen zijn. Het Maplet is te bereiken met behulp van bijvoorbeeld > dsolve[interactive](diff(y(t),t,t)+c*diff(y(t),t)+sin(y(t))=0). Zie figuur 11.1 waarin het gaat over de differentiaalvergelijking van de niet-lineaire slinger uit voorbeeld De randvoorwaarden moeten nog wel ingevuld worden in het Maplet, alsmede de waarde van de parameter c, waarna gekozen kan worden voor verschillende manieren van oplossen. Met de knop Plot Options zijn veel instellingen te veranderen en ook kunnen meer randvoorwaarden worden opgegeven, zodat verschillende grafieken van oplossingen met elkaar vergeleken kunnen worden. Over het oplossen van differentiaalvergelijkingen en stelsels differentiaalvergelijkingen met Maple is zeer veel informatie te vinden op de website bij dit boek bij Aanvullingen op de handleiding Maple Differentiaalvergelijkingen van de eerste orde Veel fysische processen kunnen beschreven worden met een eerste-orde differentiaalvergelijking. Er zijn in de praktijk zeer veel voorbeelden te vinden (zie op de website behorende bij dit boek). Hier worden slechts enkele voorbeelden gegeven met toelichting over het gebruik van Maple. Bepaalde aspecten van bijzonderheden zullen in aparte paragrafen verder uitgediept worden, maar eerst worden twee belangrijke zaken behandeld aan de hand van de voorbeelden: het invoeren van een DV en de structuur van het commandodsolve Veelvoorkomende eerste-orde DV s Voorbeeld 11.1 Ongestuurd eerste-orde systeem De differentiaalvergelijking dy dt = k y is een voorbeeld van een ongestuurd eerste-orde systeem in de functie y(t) afhankelijk van t. Deze differentiaalvergelijking wordt ook wel genoteerd als dy dt +k y = 0 (k verandert dan van teken) en homogeen, lineair van de eerste orde genoemd. In deze DV is k een systeemconstante of parameter. Er kan een beginvoorwaarde worden
219 11 Differentiaalvergelijkingen 207 vastgesteld: een extra gegeven over de functie dat bijvoorbeeld y(0) = 2. Het betekent bijvoorbeeld dat op tijdstip t = 0 de functiewaarde gelijk is aan 2. Het zal duidelijk zijn dat als de beginvoorwaarde y(0) = 0 genomen wordt, er geen responsie komt. Dat wil zeggen dat de oplossing van deze differentiaalvergelijking dan ook y = 0 zal zijn. Met een kleine moeite is de algemene oplossing van deze differentiaalvergelijking analytisch te formuleren en met even weinig moeite ook een speciale oplossing die voldoet aan de opgegeven randvoorwaarde. > restart; DV:=diff(y(t),t) = k*y(t); RV:=y(0)=2; > algemene_oplossing:=dsolve(dv,y(t)); DV := d y(t) = k y(t) dt RV := y(0) = 2 algemene oplossing := y(t) = C1e (kt) > speciale_oplossing:=dsolve({dv,rv},y(t)); speciale oplossing := y(t) = 2e (kt) > k:=-0.3; plot(rhs(speciale_oplossing),t=0..20); Zie figuur k := de oplossing van de eerste-orde DV (ongestuurd) Figuur t Toelichting: Een paar dingen vallen op bij het bestuderen van bovenstaande sessie. Bij het invoeren van de differentiaalvergelijking is het van groot belang goed te communiceren welke de onbekende functie is en van welke variabele deze afhangt. Er moet dus beslist y(t) worden ingevoerd welke door het programma opgevat wordt als een echte functie van t, wat ook de bedoeling is! Overal waar y staat, bedoelen we y(t). Zie paragraaf en voorbeeld 3.33 waar deze functienotatie verder wordt uitgediept. Meteen bij het invoeren van de DV is ook alvast een randvoorwaarde RV toegekend om later te gebruiken. In de situatie van de algemene oplossing is er geen randvoorwaarde meegegeven bij het commando dsolve. In deze algemene oplossing komt dan ook automatisch een integratieconstante voor die door het programma gegenereerd wordt en de naam C1 krijgt. Verwar deze niet met een systeemconstante of parameter. Zie verdere informatie over de integratieconstante paragraaf In geval er wél een randvoorwaarde gegeven is, is het handig om deze een naam te geven en deze moet samen met de differentiaalvergelijking in de vorm van een verzameling aan
220 208 Handleiding Maple 10 het commando worden meegegeven. Zie voor verzamelingen paragraaf 4.8 en zie voor meer informatie over randvoorwaarden paragraaf Verder valt op dat de oplossing altijd gegeven wordt in de vorm van een vergelijking. Het is belangrijk om hier even bij stil te staan voor het geval er met deze oplossing verder gewerkt wordt. In dit voorbeeld wordt verder gewerkt met de speciale oplossing; er wordt namelijk een grafiek van deze oplossing gemaakt. Dat kan trouwens alleen als de waarde van de systeemconstante k bekend is. Vandaar dat er vóór het plotten een waarde aan k wordt toegekend. Voor het aanroepen van de oplossing ten behoeve van het plotcommando is gebruikgemaakt van het rechterlid van deze vergelijking. Zie voorrhs in de voorbeelden van paragraaf Dit is een van de mogelijkheden om verder te werken met de oplossing van de DV. Van dit soort ongestuurde eerste-orde systemen is de stationaire oplossing gelijk aan y = 0, wat ook in de grafiek te zien is. Voorbeeld 11.2 Gestuurd eerste-orde systeem De differentiaalvergelijking dy dt = k y + A is een voorbeeld van een gestuurd eerste-orde systeem in de functie y(t) afhankelijke van t. In deze DV is k een systeemconstante (of parameter) en A is een constante of eventueel een functie van t. De DV wordt ook vaak genoteerd als dy dt + k y = A (k verandert dan van teken) en inhomogeen, lineair en van de eerste orde genoemd. Voor een natuurkundige vertaling van dit soort systemen is het handig om over k te spreken als een evenredigheidsconstante en A wordt wel aangeduid met storing of input (die van buitenaf op het systeem werkt). Deze hoeft niet constant te zijn maar kan zelfs afhankelijk zijn van t. Meestal wordt er in deze situaties als beginvoorwaarde y(0) = 0 afgesproken (energieloos systeem op t = 0). Het heeft te maken met een storing (input) A(t) die van buitenaf werkt op het energieloze systeem en dat het systeem op deze input reageert met een output of responsie y(t). Als de beginvoorwaarde y(0) en de input A(t) bekend zijn én de systeemconstante heeft een waarde, kan de grafiek van de oplossing gemaakt worden. > restart; DV:=diff(y(t),t) = k*y(t)+a; RV:=y(0)=0; > algemene_oplossing:=dsolve(dv,y(t)); DV := d y(t) = k y(t)+a dt RV := y(0) = 0 algemene oplossing := y(t) = A k + e(kt) C1 > speciale_oplossing:=dsolve({dv,rv},y(t)); speciale oplossing := y(t) = A k + e(kt) A k > k,a:=-0.3,5: plot(rhs(speciale_oplossing),t=0..20,thickness=2, title="de oplossing van de eerste-ordedv (gestuurd systeem)"); Zie figuur Toelichting: Deze manier van doen lijkt erg op voorbeeld Wat verder nog opvalt is dat de waarden van de systeemconstante en de input A worden toegekend met een meervoudige toekenning. Voor k nemen we de waarde 0.3 en voor A de waarde 5. Het kan ook anders met bijvoorbeeld substitutie of wellicht is een animatie interessant om te bestuderen. Zie voor mogelijkheden met animatie paragraaf Verder is bij deze soort differentiaalvergelijking de stationaire toestand van belang die optreedt als t. Als de input bijvoorbeeld een constante A is, dan is de stationaire
221 11 Differentiaalvergelijkingen de oplossing van een eerste-orde DV (gestuurd systeem) t Figuur 11.3 oplossing gelijk aan y = A dy k wat af te leiden valt uit de vergelijking dt = 0. Immers de functie y(t) verandert dan op den duur niet meer. TIP: als de input een functie van t zou zijn, verandert er aan de manier van doen eigenlijk niets. Het is dus mogelijk allerlei soorten input A(t) te gaan uitproberen en kijken wat de output y(t) als resultaat oplevert Het aanbieden van de DV en de gedaante van de oplossing Het aanbieden van de DV kan in verschillende vormen. Soms leidt de ene vorm tot betere resultaten dan de andere vorm. De oplossing van een differentiaalvergelijking kan op meer manieren gepresenteerd worden. Het kan een functie zijn, eventueel in impliciete vorm, een grafiek van een functie, een grafische benadering of een oplossing in tabelvorm. In de volgende voorbeelden worden een paar mogelijkheden aangegeven hoe te handelen in verschillende situaties en op welke manier je onderzoekend te werk kunt gaan. Er bestaat voor eerste-orde differentiaalvergelijkingen bijvoorbeeld een mogelijkheid om het lijnelementenveld te bestuderen en daarmee een indruk te krijgen van het verloop van de integraalkromme (grafiek van de oplossing), ook al bestaat er soms geen analytische functie om de integraalkromme te beschrijven, maar moet deze numeriek benaderd worden. In het lijnelementenveld kun je bijvoorbeeld plaatsen opsporen waar de integraalkrommen vreemd zullen lopen en in de buurt waarvan je beter geen randvoorwaarden kunt afspreken. Voorbeeld 11.3 Impliciete oplossing en lijnelementenveld Gegeven is de differentiaalvergelijking: yy = e x met drie mogelijke randvoorwaarden y(1) = 1, y(1) = 2, en y(1) = 3. Het lijnelementenveld hiervan kunnen we eerst bestuderen met het commando dfieldplot uit het pakket DEtools om te kijken naar geschikte randvoorwaarden. Bij dit commando dfieldplot kan de DV het beste in de normaalvorm ingevoerd worden. De normaalvorm is y = ex y, zodat de lijnelementen gerepresenteerd door y gemakkelijk af te lezen zijn. Bovendien gaat het soms bij oudere versies van Maple niet goed met het plotten van het lijnelementenveld als de DV niet in de normaalvorm wordt opgegeven. > restart; with(plots): with(detools): DV:=diff(y(x),x)=exp(x)/y(x); RV1,RV2,RV3:=y(1)=1,y(1)=-2,y(1)=3; DV := d ex y(x) = dx y(x)
222 210 Handleiding Maple 10 > opl1:=dsolve({dv,rv1},y(x)); > opl2:=dsolve({dv,rv2},y(x)); RV1, RV2, RV3 := y(1) = 1, y(1) = 2, y(1) = 3 opl1 := y(x) = 2e x + 1 2e opl2 := y(x) = 2e x + 4 2e > opl3:=dsolve({dv,rv3},y(x),implicit); opl3 := y(x) 2 2e x 9+2e = 0 > p1:=plot({rhs(opl1),rhs(opl2)},x=-5..5,y= ,thickness=[3,1]): p2:=implicitplot(opl3,x=-3..5,y= ,linestyle=2): p3:=plot({[1,1],[1,-2],[1,3]},style=point,symbolsize=15,symbol=circle): p4:=textplot({[1.15,1,"rv1"],[1,-2,"rv2"],[1,3.3,"rv3"]}, align={right,above},font=[times,italic,10]): lijnelementenveld:=dfieldplot(dv,y(x),x=-5..5,y= ,color=gray, arrows=line): display({lijnelementenveld,p1,p2,p3,p4}, title="lijnelementenveld met integraalkrommen"); Zie figuur lijnelementenveld met integraalkrommen 10 y 5 RV3 RV RV22 x Figuur 11.4 Toelichting: Om te beginnen is het plotpakket geactiveerd voor de verschillende mogelijkheden om grafieken met tekst erin te kunnen maken (zie hoofdstuk 2). Voor het lijnelementenveld is verder nog het DEtools-pakket nodig. Na het invoeren van de differentiaalvergelijking in de normaalvorm en de drie randvoorwaarden met behulp van een meervoudige toekenning, kunnen de drie oplossingen gegenereerd worden op de bekende manier. Echter bij de laatste oplossing (opl 3 ) is een extra optieimplicit bij het commando dsolve meegegeven. Daarmee wordt bereikt dat de impliciete vorm verkregen wordt van de functie y(x) waarnaar gezocht wordt. Deze impliciete functie, die opl 3 genoemd wordt, heeft de vorm van een kwadratische vergelijking in y(x) en bestaat dus uit twee takken, gestippeld in figuur Als deze optie niet wordt meegegeven, krijg je alleen de tak van de oplossing die voldoet aan de randvoorwaarde en dat is dus een echte functie. Voor de visualisatie van het geheel worden er van de drie oplossingen grafieken gemaakt. Omdat alle oplossingen altijd als vergelijkingen in de uitvoer voorkomen bij dsolve, wordt met rhs gewerkt om opl 1 en opl 2 aan te roepen bij het plotcommando. Voor de derde oplossing hoeft dat niet omdat er met implicitplot gewerkt wordt (paragraaf 2.8). De randvoorwaarden worden als punten in de figuur opgenomen met de tekst erbij.
223 11 Differentiaalvergelijkingen 211 Veel mogelijkheden om grafieken met tekst te maken vind je in hoofdstuk 2. Ten slotte wordt het lijnelementenveld in de figuur opgenomen met behulp van dfieldplot uit het DEtools-pakket; een pakket dat enkele gereedschappen bevat die betrekking hebben op differentiaalvergelijkingen (Differential Equations). Als optie wordt daarbij gegeven dat de lijnelementen ook werkelijk lijntjes zijn met arrows=line. Het is goed te zien dat deze lijnelementen stukjes raaklijn zijn aan de integraalkrommen en dat het géén goed idee zou zijn om als randvoorwaarde een punt van de x-as te nemen. Zie voor lijnelementenvelden verder nog paragraaf Voorbeeld 11.4 Rolverwisseling van de variabelen Soms wil het wel eens helpen bij een differentiaalvergelijking van de eerste orde om de rollen van afhankelijke en onafhankelijke variabele om te wisselen zoals dit voorbeeld laat zien. Voor het verder bestuderen van dit systeem met een lijnelementenveld en grafieken van oplossingen, wordt verwezen naar de andere voorbeelden. > restart; DV1:=diff(y(x),x)=cos(y(x)); RV1:=y(2)=1; DV1 := d y(x) = cos(y(x)) dx RV1 := y(2) = 1 > DV2:=diff(x(y),y)=1/cos(y); RV2:=x(1)=2; > evalf(dsolve({dv2,rv2},x(y))); DV2 := d dy x(y) = 1 cos(y) RV2 := x(1) = 2 x(y) = ln(sec(y) + tan(y)) Toelichting: Bij dit voorbeeld was de uitvoer van de oplossing van de differentiaalvergelijking DV 1, waarbij y een functie was van x, een zeer ingewikkelde (niet afgedrukt) en bij het bestuderen van het lijnelementenveld zou er ook sprake zijn van meer takken van oplossingen, dus geen echte functie als oplossing. Echter bij rolverwisseling wordt nu x een functie van y waarbij ook de randvoorwaarde aangepast moet worden. De uitvoer bij opvragen van de oplossing (in één keer tevens benaderd met evalf) geeft nu een functie x(y) te zien waarvan eventueel ook een goede grafiek te maken is. Voorbeeld 11.5 Overgaan op een stelsel lineaire eerste-orde DV s, faseportret, vectorveld, singulier punt en eigenwaarden Zoals gezegd wil een andere manier van aanbieden van een differentiaalvergelijking wel eens een mogelijkheid zijn om oplossingen te vinden. De eerste-orde differentiaalvergelijking dy(x) dx = 4x+y(x) met bijvoorbeeld randvoorwaarde x+y(x) y( 0.5) = 2 geeft geen analytische oplossing in de zin van een functie y van x. > restart; with(plots): DV:=diff(y(x),x)=(4*x+y(x))/(x+y(x));dsolve({DV,y(-0.5)=-2},y(x)): DV := d 4x+y(x) y(x) = dx x+y(x) Warning, computation interrupted Er komt geen antwoord na een tijdje wachten en als er wel wat komt, is de uitvoer zó ingewikkeld, dat je er niet veel mee kunt, ook niet met het geven van een andere randvoorwaarde bijvoorbeeld y(3) = 1. De berekening kan dan eventueel het beste
224 212 Handleiding Maple 10 onderbroken worden met de rode stopknop bovenaan in het scherm in de menubalk. Er kan echter wel een lijnelementenveld gegenereerd worden waaruit een en ander te concluderen valt met > DEtools[dfieldplot](DV,y(x),x=-5..5,y=-5..5); Een indruk van dit lijnelementenveld is te krijgen aan de hand van figuur In dit geval is het beste om te proberen met een parametervoorstelling iets te bereiken. Dat wil zeggen: we proberen niet met een functie y van x maar met een parameter t waarbij we veronderstellen dat x en y beide functies zijn van t. Op deze manier ontstaat er dan een stelsel gekoppelde eerste-orde differentiaalvergelijkingen dat wellicht oplosbaar is en waarvan de verschillende oplossingen in de vorm van (parameter)krommen getekend kunnen worden door de punten ( 0.5, 2) en (3, 1) corresponderend met de verschillende beginvoorwaarden. Er kan, met het opstellen van de beginvoorwaarden, gesteld worden dat deze punten gepasseerd worden op t = 0. Het zal duidelijk zijn dat er nu steeds pakketjes van twéé randvoorwaarden opgegeven moeten worden, omdat we te maken hebben met twéé functies en twéé DV s. { dy(x) dx = 4x+y(x) x+y(x) = { dx dt = x(t)+y(t) dy dt = 4x(t)+y(t) > DVx:=diff(x(t),t)=x(t)+y(t); DVy:=diff(y(t),t)=4*x(t)+y(t); RV1:=x(0)=-0.5,y(0)=-2; RV2:=x(0)=3,y(0)=1; DVx := d x(t) = x(t)+y(t) dt DVy := d y(t) = 4x(t)+y(t) dt RV1 := x(0) = 0.5, y(0) = 2 RV2 := x(0) = 3, y(0) = 1 > opl1:=dsolve({dvx,dvy,rv1},{x(t),y(t)}); opl1 := {x(t) = 1 4 e( t) 3 4 e(3t), y(t) = 1 2 e( t) 3 2 e(3t) } > opl2:=dsolve({dvx,dvy,rv2},{x(t),y(t)}); opl2 := {x(t) = 5 4 e( t) e(3t), y(t) = 5 2 e( t) e(3t) } Er komen nu probleemloos oplossingen in parametervorm tevoorschijn die voldoen aan de beginvoorwaarden. Interessant is het om de bijbehorende matrix van het stelsel differentiaalvergelijkingen te zien en de eigenvectoren en de eigenwaarden op te vragen. (Zie voor eigenvectoren en eigenwaarden paragraaf ) > Matrix([[1,1],[4,1]]), LinearAlgebra[Eigenvectors](Matrix([[1,1],[4,1]]),output=list); [ ] , 3, 1, 2, 1, 1, Nu de oplossingen beschikbaar zijn en het lijnelementenveld bekend is, kunnen de grafieken gecombineerd worden. Er is echter nog een prachtige visualisatie mogelijk met phaseportrait uit het DEtools-pakket, waarbij in één keer het lijnelementenveld in de vorm van pijltjes (dus eigenlijk een richtingsveld) plus een aantal integraalkrommen (grafieken van de oplossing) te maken zijn als er een lijst met beginvoorwaarden wordt meegegeven. Dat gaat vele malen sneller dan eerst alle grafieken afzonderlijk stuk voor stuk voorbereiden en vervolgens samenvoegen.
225 11 Differentiaalvergelijkingen 213 > p1:=detools[phaseportrait]([dvx,dvy],[x(t),y(t)],t=-3..1,[[rv1],[rv2]], x=-5..5,y=-5..5,stepsize=0.05,color=gray,linecolor=abs(sin(t*pi/2))): p2:=fieldplot([x+y,4*x+y],x=-5..5,y=-5..5,thickness=3,arrows=slim): p3:=plot({[-0.51,-2],[3,1]},style=point,color=black,symbolsize=20): p4:=textplot({[-0.5,-2,"rv1"],[3,1,"rv2"]},align={left,above}, font=[times,bolditalic,12]): display({p1,p2,p3,p4}); Zie figuur faseportret van het stelsel vergelijkingen met daarin het vectorveld en enkele oplossingen Y 4 2 RV RV1 X 2 4 Figuur 11.5 Toelichting: Dit voorbeeld heeft een aantal aspecten die nader toelichting behoeven: Het overgaan naar een parametervoorstelling kan op vele manieren. Deze manier waarbij op t = 0 de randvoorwaarden gepasseerd worden, is het eenvoudigste. In het geval van randvoorwaarde nummer 2 was het inderdaad te verwachten dat er geen echte functie y(x) te formuleren is die aan de oorspronkelijke DV voldoet als je naar het lijnelementenveld kijkt. Met het commandophaseportrait uit het DEtools-pakket is er de mogelijkheid om meer randvoorwaarden mee te geven in een lijst, zodat evenzoveel integraalkrommen in de figuur meegenomen worden. Dit commando heeft als extra mogelijkheid om aan de kleur van deze kromme een procedure of een functie toe te kennen, zodat aan het verschieten van de kleur goed te zien is of de kromme snel of langzaam doorlopen wordt. Tegelijk wordt er bij phaseportrait ook altijd standaard een lijnelementenveld met pijltjes geleverd. Als extra is er het vectorveld behorend bij het stelsel DV s aan toegevoegd met fieldplot uit het plotpakket. (Zie ook voorbeeld 8.7.) In feite geeft zo n vectorveld nog meer informatie dan het lijnelementenveld zelf. De punten van de randvoorwaarden en de tekst zijn ook apart aan de figuur toegevoegd. Wat verder nog opvalt in het lijnelementenveld is de situatie rond het punt (0, 0); een singulier punt waar de lijnelementen (hier pijltjes) alle kanten opwijzen en waar het niet verstandig is om een randvoorwaarde te kiezen. In het kader van een stelsel vergelijkingen wordt dit punt ook wel een evenwichtspunt genoemd en het blijkt in dit geval een instabiel evenwichtspunt te zijn dat ook af te leiden valt uit het feit dat de pijltjes van het vectorveld van het punt (0, 0) af wijzen. Deze pijlen zijn rond het punt (0, 0) ook heel klein wat duidt op weinig beweging (evenwicht). Hoe groter de pijlen van het vectorveld, des te sneller de integraalkromme ter plaatse doorlopen wordt! Nu de oplossing in parametervorm bekend is, is het mooi om deze( te vergelijken ) met de 1 1 eigenwaarden en de eigenvectoren van de corresponderende matrix. 4 1
226 214 Handleiding Maple 10 De eigenwaarden 3 en 1 zijn terug te vinden in de exponenten van de e-machten van beide oplossingen. Verder is te zien dat als t +, de kromme in de richting van de bijbehorende eigenvector gaat lopen. Controleer ook eens wat de richting van de integraalkromme zal zijn als t. Het is niet voor niets dat de lijnelementen nu als echte pijltjes weergegeven zijn. Het heeft te maken met de richting die doorlopen wordt bij toenemende waarde van de parameter t. Om het verhaal compleet te maken is ook het vectorveld ( dx dt dy dt ) = ( x+y ) in beeld 4x+y gebracht met fieldplot uit het plotpakket. In ieder punt van het x,y-vlak is een vector te tekenen die aangeeft wat de snelheid is waarmee de kromme doorlopen wordt en de richting waarin de kromme loopt. Dit vectorveld bevat dus nog meer informatie dan een lijnelementenveld met dfieldplot gemaakt en waarbij de pijlen of lijnelementen allemaal evenlang zijn. (Zie voor vectorvelden ook paragraaf en voor lijnelementenvelden paragraaf ) 11.3 Differentiaalvergelijkingen van de tweede orde In een differentiaalvergelijking van de tweede orde komt ten hoogste de tweede afgeleide van de functie voor. Als deze differentiaalvergelijking ook nog lineair is en constante coëfficiënten heeft, kunnen we daarmee veel fysische processen modelleren. Denk alleen al aan een krachtenvergelijking die in feite een differentiaalvergelijking is. Immers F totaal = ma waarin de versnelling a de tweede afgeleide is van de afgelegde weg en F totaal de som van alle krachten die op een voorwerp met massa m werken (voorbeeld 11.7) Lineaire DV met constante coëfficiënten De differentiaalvergelijking van de tweede orde, die lineair is in y(t) en ook lineair is in de eerste en tweede afgeleide, is een soort die goed oplosbaar is met allerlei analytische middelen en waarin een duidelijke structuur te herkennen valt als de coëfficiënten bovendien nog constant zijn. In de praktijk wordt dit soort systemen in verband gebracht met de Laplace-transformatie (paragraaf 9.5) vanwaaruit een methode ontwikkeld is om dit soort DV s op te lossen. Van deze methode wordt in voorbeeld 11.7 gebruikgemaakt. Voorbeeld 11.6 Ongestuurd lineair systeem van de tweede orde Een eenvoudig voorbeeld van een ongestuurd systeem van de tweede orde is de volgende differentiaalvergelijking ÿ+aẏ+ 3y = 0 of anders geschreven d 2 y(t) dt 2 + a dy(t) dt + 3y(t) = 0 die met beginvoorwaarden y(0) = 0 en ẏ(0) = 0 geen respons zal opleveren. Dat wil zeggen dat de oplossing in dat geval y = 0 zou zijn. Deze soort wordt ook wel homogeen genoemd. Er wordt nu aan dit ongestuurde systeem een setje beginvoorwaarden gegeven y(0) = 1 en ẏ(0) = 0. Zie voor meer informatie over beginvoorwaarden paragraaf > restart;dv:=diff(y(t),t$2)+a*diff(y(t),t)+3*y(t)=0;rv:=y(0)=1,d(y)(0)=0; DV := ( d2 dt 2 y(t))+a( d dt y(t))+3y(t) = 0 RV := y(0) = 1, D(y)(0) = 0 De algemene oplossing wordt door het programma analytisch geformuleerd met de parameter (systeemconstante) a en de integratieconstanten C1 en C2:
227 11 Differentiaalvergelijkingen 215 > dsolve(dv,y(t)); y(t) = C1e (( 2 a + a )t) + C2e (( 2 a a )t) Vervolgens wordt de oplossingen met bepaalde waarden voor a en met de gegeven randvoorwaarde opgevraagd: > a:=1: Oplossing[ a =1]:=rhs(dsolve({DV,RV},y(t))); Oplossing a=1 := 1 11e ( 2 t 11t sin( ) )+e ( t 11t 2 ) cos( ) > a:=4: Oplossing[ a =4]:=rhs(dsolve({DV,RV},y(t)));a:= a : Oplossing a=4 := 3 2 e( t) 1 2 e( 3t) > plot([oplossing[ a =1],Oplossing[ a =4]],t=0..5,thickness=[2,1], linestyle=[1,2],legend=["a=1","a=4"],title="lineair systeem, tweede orde, ongestuurd a loopt van 1 tot 4"); Zie figuur Lineair systeem, tweede orde, ongestuurd a loopt van 1 tot t a=1 a=4 Figuur 11.6 Toelichting: Na het invoeren van de differentiaalvergelijking en de randvoorwaarden, wordt eerst naar de algemene oplossing gevraagd zonder de beginvoorwaarden mee te geven. Duidelijk is dat er analytisch gerekend wordt: de parameter a komt in de oplossing voor plus nog twee integratieconstanten (zie paragraaf ). Gemakkelijk is in te zien dat als a > 12 er onder het wortelteken een positieve waarde komt, zodat de oplossing dan reële e-machten zal bevatten. In het andere geval zullen er complexe e-machten in de oplossing komen wat zal resulteren in een oplossing met gedempte trillingen. Er worden twee oplossingen gegenereerd met verschillende waarden van a en in één figuur gepresenteerd. Omdat de oplossing als vergelijking gegenereerd wordt, nemen we hier bij de toekenning steeds de rhs (rechterkant van het isgelijkteken) van de oplossing. Let hier eens op de presentatie van de uitvoer met subscript (zie paragraaf 6.2) en het werken met quotes om de evaluatie van a tegen te houden (paragraaf 6.3). TIP: de figuur kan geanimeerd worden en daarmee is het verloop te zien dat bij kleine waarde van a er een gedempte trilling ontstaat en bij groter wordende a de trilling overgaat in een demping waarbij er geen trilling meer optreedt. > with(plots): animate(plot,[opl,t=0..5],a=1..4);
228 216 Handleiding Maple 10 Voorbeeld 11.7 Gestuurd massa-veersysteem Gegeven is een massa-veersysteem met massa m = 1, demping c = 1 en veerconstante k = 3. De uitwendige kracht F(t) is bijvoorbeeld de Heaviside-stapfunctie (zie paragraaf 2.5.1) en werkt op een systeem dat op t = 0 energieloos is: de beginvoorwaarden BV kunnen dan geformuleerd worden. Het gedempt massa-veersysteem is namelijk op t = 0 in rust (geen snelheid) dus ẏ(0) = 0 en er is geen beginuitwijking (geen potentiële energie) dus y(0) = 0. De opstelling van de differentiaalvergelijking gaat uit van de krachtenvergelijking: F totaal = F demping + F veerkracht + F uitwendig m d2 y dt 2 = c dy dt k y+f Meestal wordt deze differentiaalvergelijking als volgt ingevoerd: > restart; DV:=m*diff(y(t),t$2)+c*diff(y(t),t)+k*y(t)=F; DV := m( d2 dt 2 y(t))+c( d y(t))+k y(t) = F dt > m,c,k:=1,1.0,3; BV:=y(0)=0,D(y)(0)=0; > F:=Heaviside(t); m, c, k := 1, 1.0, 3 BV := y(0) = 0, D(y)(0) = 0 F := Heaviside(t) > Y:=rhs(dsolve({DV,BV},y(t),method=laplace)); evalf(%): Y := e( 2 t 11t ) (11cos( )+ 11t 11sin( )) 2 2 > responsie:=plot(y,t=0..15,title="responsie"): input:=plot(f,t= ,title="input"): with(plots):display(array([input,responsie]),scaling=constrained); Zie figuur INPUT t RESPONSIE t Figuur 11.7 Toelichting: Het gestuurde gedempt massa-veersysteem kan met élke tijdsfunctie F(t) als storing (input) zonder probleem analytisch opgelost worden. De oplosmethode van Laplace leent zich bij uitstek voor dit soort problemen en met de optie method=laplace forceren
229 11 Differentiaalvergelijkingen 217 we Maple om van deze methode gebruik te maken. De uitvoer wordt daarmee een stuk overzichtelijker dan als deze methode niet gebruikt wordt. Er wordt bij deze methode namelijk ook verondersteld dat de output (y(t)) vóór t = 0 gelijk aan 0 is. Eventueel kan een benadering van de oplossing opgevraagd worden met evalf. Er wordt van het commando rhs gebruikgemaakt om meteen over de oplossing als uitdrukking te kunnen beschikken. De grafieken van inputsignaal en outputsignaal zijn met behulp van array naast elkaar in één figuur (figuur 11.7) geplaatst. Duidelijk is aan de grafiek van de responsie (output) te zien dat op den duur een nieuwe evenwichtssituatie ontstaat. In de formule van de output zien we dan ook een (constant) stationair aandeel 1 3 en een vluchtig aandeel dat gekenmerkt wordt door de demping e 2 t en dat op den duur uitdooft. Dit vluchtige aandeel wordt ook wel inschakel-effect genoemd. TIP: er kan nog even gekeken worden naar de verhouding H(s) van de Laplace-getransformeerde van output y(t) en input F(t) en deze blijkt een herkenbare vorm te hebben en wordt ook wel de overdrachtsfunctie van het systeem genoemd. > with(inttrans): H:=laplace(Y,t,s)/laplace(F,t,s);solve(denom(H)=0,s); 1 H := s 2 + s I 11, I 11 Aan de complexe polen van deze overdrachtsfunctie H kunnen direct de demping en de trillingen afgelezen worden. (Zie voor het begrip polen paragraaf ). Vergelijk deze vorm eens met voorbeeld TIP: probeer nu eens een andere inputfunctie F(t) bijvoorbeeld: > F1:=PIECEWISE([0,t<0],[t/4,t<=6],[0,t>6]); Echter Maple rekent beter met de Heaviside-stapfunctie dan met een functie in stukken, vandaar dat het inputsignaal hier beslist nog even omgezet moet worden naar een andere schrijfwijze (zie paragraaf 2.3). > F:=convert(F1,Heaviside); Als de sessie met deze input opnieuw gedaan wordt, zul je zien dat er systeem zit in de output en de verhouding van de Laplace-getransformeerde van output en input zal dezelfde zijn! Niet-lineaire systemen Voor tweede-orde systemen die níet lineair zijn, is het maar de vraag of deze analytisch oplosbaar zijn. Er wordt hier een voorbeeld gegeven van een model van een niet-lineaire slinger waarbij enkele mogelijkheden worden aangereikt om oplossingen te onderzoeken en eventueel een numerieke of grafische oplossing te formuleren. Met dit voorbeeld tot besluit is het aantal mogelijkheden wel toereikend om de meeste problemen het hoofd te bieden en goed gebruik te kunnen maken van het Maplet van de differentiaalvergelijkingen: dsolve[interactive](), zie figuur Voorbeeld 11.8 Model van de niet-lineaire slinger: d 2 y(t) dt 2 + c dy(t) + sin(y(t)) = 0 dt De parameter c staat voor demping en wordt gesteld op 0.1. Verder is de veerkracht nu niet evenredig met de uitwijking y(t) maar met de sinus daarvan. Dit maakt dat de DV niet meer lineair is. Het is een ongestuurd systeem (homogene vergelijking), dus dit model zal worden bekeken met verschillende beginvoorwaarden. Neem aan dat de slinger in de evenwichtspositie is op t = 0 en dat impliceert de randvoorwaarde y(0) = 0. Verder worden
230 218 Handleiding Maple 10 aan de slinger achtereenvolgens beginsnelheden gegeven van respectievelijk 2, 2.4 en 2.9. Dat impliceert beginvoorwaarden van ẏ(0) = 2 en ẏ(0) = 2.4 en ẏ(0) = 2.9. Het zal blijken datdsolve niet werkt, of in ieder geval niet een bruikbaar resultaat oplevert. Besloten wordt dan maar te kiezen voor de numerieke oplossing met numeric als optie bij het commando dsolve. De parameters en randvoorwaarden moeten dan allemaal numerieke waarden hebben. > restart; with(plots): with(detools): interface(displayprecision=3): dv:=diff(y(t),t,t)+c*diff(y(t),t)+sin(y(t))=0; dv := ( d2 dt 2 y(t))+c( d dt y(t))+sin(y(t)) = 0 > c:=0.1; opl1:=dsolve({dv,y(0)=0,d(y)(0)=2},y(t),numeric); > opl1(12); c := opl1 := proc(x rkf45)... end proc [t = , y(t) = 0.198, d y(t) = 1.188] dt > opl2:=dsolve({dv,y(0)=0,d(y)(0)=2.3},y(t),numeric): opl3:=dsolve({dv,y(0)=0,d(y)(0)=2.9},y(t),numeric): p1:=odeplot(opl1,[t,y(t)],0..25,color=black): p2:=odeplot(opl2,[t,y(t)],0..25,color=black,linestyle=2): p3:=odeplot(opl3,[t,y(t)],0..25,color=gray,thickness=3): p4:=plot({2*pi,4*pi},t=0..25,linestyle=3):display({p1,p2,p3,p4}, title="numerieke oplossingen van de niet-lineaire slinger hoe groter de beginsnelheid hoe hoger de grafiek"); Zie figuur y numerieke oplossingen van de niet-lineaire slinger hoe groter de beginsnelheid hoe hoger de grafiek t Figuur 11.8 Toelichting: We hebben hier te maken met een DV die niet analytisch oplosbaar is. De meest gebruikte numerieke methode wordt automatisch aangeroepen met het gebruik van de extra optie numeric bij het dsolve-commando. Eventueel andere numerieke methoden zijn ook mogelijk (zie in de helpfunctie bij?dsolve/numeric). Overigens, als er gebruikgemaakt wordt van het Maplet om te gaan onderzoeken met verschillende instellingen, kan er ook gekozen worden voor andere dan de standaardmethode bij de instellingen van numeriek oplossen.
231 11 Differentiaalvergelijkingen 219 Als uitvoer komt er in bovenstaande sessie een code van een procedure waarin wordt medegedeeld welke numerieke methode is toegepast Hier is dat een Runge-Kutta-methode. Met deze uitvoer, die opgevat kan worden als een echte functie, kunnen er functiewaarden opgevraagd worden of kan er met odeplot uit het plotpakket een grafiek gemaakt worden. Als er ook nog de optie output=array([...]) aan het commando dsolve wordt meegegeven, kan een hele tabel worden gegenereerd met functiewaarden en waarden van de eerste afgeleide van de functie (zie cd-rom). Hier wordt bijvoorbeeld gevraagd naar de functiewaarde voor t = 12 van opl 1 en in een lijst worden dan de waarden van de functie én die van de afgeleide gepresenteerd. Verder worden ook de procedures van opl 2 en opl 3 gegenereerd, zodat er met odeplot uit het plotpakket grafieken voorbereid en samengevoegd kunnen worden in één figuur (figuur 11.8) (ODE = Ordinary Differential Equation). Bij gebruik van het Maplet worden de commando s automatisch aangemaakt bij het doen van de verschillende instellingen. Zie informatie aan het begin van paragraaf Voor een verklaring van het verloop van de integraalkrommen wordt verwezen naar het volgende voorbeeld Voorbeeld 11.9 Onderzoek van de niet-lineaire slinger In dit voorbeeld wordt uitgegaan van voorbeeld 11.8 van de niet-lineaire slinger. Nu een manier om te onderzoeken en de verkregen grafieken in figuur 11.8 enigszins te verklaren en te begrijpen. Een differentiaalvergelijking van de tweede orde kan ook geschreven worden als een stelsel eerste-orde differentiaalvergelijkingen. De gemakkelijkste manier om dat te doen is het stellen van dy(t) dt = z(t). d 2 y(t) dt 2 + c dy(t) + sin(y(t)) = 0 = dt { dy(t) dt dz(t) dt = z(t) = cz(t) sin(y(t)) Het voordeel hiervan is dat er met een lijnelementenveld wat meer onderzoek gedaan kan worden en dat er iets gezegd kan worden over de snelheid van de slinger en eventuele evenwichtssituaties. Het verkregen stelsel is overigens ook niet lineair dus met dsolve is het onwaarschijnlijk dat er een analytische (symbolische) oplossing gevonden wordt. Neem weer voor c de waarde 0.1. > restart; with(plots): with(detools): dv1:=diff(y(t),t)=z(t); dv2:=diff(z(t),t)=-c*z(t)-sin(y(t)); dv1 := d y(t) = z(t) dt dv2 := d z(t) = cz(t) sin(y(t)) dt > c:=0.1:rv1,rv2,rv3:=[y(0)=0,z(0)=2],[y(0)=0,z(0)=2.3],[y(0)=0,z(0)=2.9]; RV1, RV2, RV3 := [y(0) = 0, z(0) = 2], [y(0) = 0, z(0) = 2.3], [y(0) = 0, z(0) = 2.9] > phaseportrait([dv1,dv2],[y(t),z(t)],t=0..20,[rv1,rv2,rv3],y=-2..16, z=-2..3,stepsize=0.05,color=grey,linecolor=abs(sin(t)), title="faseportret met horizontaal de uitwijking en verticaal de snelheid",scaling=constrained); Zie figuur Toelichting: Na het invoeren van de beide differentiaalvergelijkingen en de aangepaste beginvoorwaarden, kan met het volgende commando eventueel een richtingsveld (=
232 220 Handleiding Maple 10 faseportret met horizontaal de uitwijking en verticaal de snelheid z y Figuur 11.9 lijnelementenveld) van het stelsel differentiaalvergelijkingen van de eerste orde gemaakt worden als de parameter c een waarde heeft. > dfieldplot([dv1,dv2],[y(t),z(t)],t=-3..3,y=-5..16,z=-5..5); Er kan echter ook met het commando phaseportrait uit het DEtools-pakket gewerkt worden (zie ook voorbeeld 11.5) wat als voordeel oplevert dat er, tegelijk met het opgeven van een lijst met beginvoorwaarden, evenzoveel krommen worden geplot die aan het opgegeven stelsel voldoen. Deze krommen zijn overigens in dit geval beslist géén integraalkrommen van de oorspronkelijke tweede orde DV, maar naar aanleiding van deze krommen kunnen er wel conclusies getrokken worden die betrekking hebben op de uiteindelijke integraalkrommen, zoals die in figuur 11.8 te zien zijn. De ronddraaiende spiraalvormige bewegingen bijvoorbeeld, in het faseportret van figuur 11.9, duiden op gedempte trillingen. Langs de assen van deze figuur is verticaal uitgezet de snelheid z(t) = dy(t) dt en horizontaal de uitwijking y(t). Verder kunnen de beginvoorwaarden afgelezen worden en de baan volgend, wordt de snelheid minder en de uitwijking groter, tot de uiterste stand bereikt is waarna de snelheid omdraait en de uitwijking weer vermindert, enzovoort. Als de snelheid bij aanvang (ẏ(0)) groter gesteld wordt, gaat de slinger één keer over de kop en bereikt na verloop van tijd met een uitdempende trilling een nieuwe evenwichtsstand. In het richtingsveld zijn de corresponderende evenwichtspunten goed te zien. TIP: maak ook eens het vectorveld van dit stelsel DV s om nóg meer informatie te krijgen over mogelijke oplossingen en evenwicht. In figuur 11.5 is ook een vectorveld gemaakt waarmee er met de lengte van de pijlen meer informatie over het model bekend wordt. > plots[fieldplot]([z,c*z-sin(y)],y=-2..6,z=-2..2,scaling=constrained); 11.4 Algemene tips voor differentiaalvergelijkingen Functienotatie In alle voorbeelden moet opgevallen zijn dat steeds bij de invoer van een DV goed gecommuniceerd moet worden dat de bedoelde functie ook echt een functie is. Overigens wordt de oplossing altijd in vergelijkingsvorm gegeven waarna er naar behoefte een functie van gemaakt kan worden of een uitdrukking. Dat het over echte functies gaat, is ook te merken aan het opgeven van de randvoorwaarden. Zie in voorbeeld 3.33 dat als de functie y ingevoerd is als echte functie (met pijltjesnotatie), dat dan de eerste afgeleide genoteerd wordt met de D-operator. De invoer D(y)(0)=2 betekent dus dat de eerste afgeleide van de functie y gelijk is aan 2 als de onafhankelijke variabele de waarde 0 heeft, ook wel genoteerd
233 11 Differentiaalvergelijkingen 221 als ẏ(0) = 2. In hoofdstuk 5 over differentiëren wordt veelvuldig gebruikgemaakt van de functienotatie vanwege de voordelen daarvan. In het volgende voorbeeld wordt benadrukt hoe belangrijk het is om te begrijpen dat het gaat over functies. Voorbeeld Het belang van de functienotatie in de DV Gegeven is een model waarbij de verandering van het volume V(t) van een bol evenredig is met de oppervlakte Opp(t) van deze bol. Het model ziet er dan als volgt uit: dv(t) dt = k Opp(t) Omdat de oppervlakte van de bol verandert als het volume verandert, schrijven we Opp(t) om aan te geven dat de oppervlakte ook een functie is van de tijd. Er staan in deze DV nu twee functies die afhankelijk zijn van t en dat is nog niet de gedaante om aan oplossingen te gaan denken. In de volgende sessie worden het volume V(t) en de oppervlakte Opp(t) beide uitgedrukt in de afhankelijke variabele r(t) waardoor er een DV ontstaat in de functie r(t). > restart; DV:=diff(V(t),t)=k*Opp(t); DV := d V(t) = k Opp(t) dt > V:=t->4/3*Pi*r(t)^3; Opp:=t->4*Pi*r(t)^2; > DV; V := t 4 3 πr(t)3 Opp := t 4πr(t) 2 4πr(t) 2 ( d r(t)) = 4k πr(t)2 dt > DV1:=DV/(4*Pi*r(t)^2); DV1 := d dt r(t) = k Toelichting: Na het invoeren van het model wordt er gebruikgemaakt van de officiële functienotatie (zie paragraaf 1.5.6) van het volume V(t) als functie van de tijd t en van de oppervlakte Opp(t) als functie van t waarbij ervan uitgegaan wordt dat r ook weer een functie is van t. Als deze functies zijn toegekend, is met het opvragen van de DV automatisch alles ingevuld en er blijft over een differentiaalvergelijking in r(t) die eventueel nog wat vereenvoudigd kan worden door links en rechts een overeenkomstige factor weg te delen. De uiteindelijke differentiaalvergelijking kan weer op de bekende manier worden behandeld en in dit geval zelfs uit het hoofd worden opgelost Het invoeren van een DV Voor het invoeren van een differentiaalvergelijking moet je je bewust zijn van de functie waar het om gaat. Als het bijvoorbeeld gaat om de functie y(t), wordt de eerste afgeleide ingevoerd als diff(y(t),t) en de tweede afgeleide als diff(y(t),t,t) of diff(y(t),t$2), enzovoort als het om hogere afgeleides gaat. Mocht er bij vergissing in de invoer ergens een y getikt worden, komt er wel een waarschuwing op het scherm bijvoorbeeld: Error, (in ODEtools/info) y(t) and y cannot both appear in the given ODE. ( = Ordinary Differential Equation). Zie verder in de voorbeelden hoe duidelijk het steeds is dat het over functies gaat.
234 222 Handleiding Maple Integratieconstanten en parameters Integratieconstanten ontstaan bij het oplossen van een differentiaalvergelijking. Immers bij het oplossen van een DV wordt er op de achtergrond geïntegreerd en als er geen randvoorwaarden opgegeven zijn komen er dus integratieconstanten om de volledigheid van de oplossing te garanderen. Als je een DV van de n-de orde hebt, komen er evenzoveel integratieconstanten in de algemene oplossing te staan, omdat er ook n maal geïntegreerd moet worden om de DV op te kunnen lossen. Zie voor de algemene oplossing van een eerste-orde DV voorbeeld 11.1 en voor een tweede-orde DV voorbeeld Parameters of ook wel systeemconstanten genoemd, hebben iets te maken met de eigenschappen van het systeem dat door de DV wordt beschreven. Deze parameters komen ook al voor in de DV zelf en ontstaan niet pas na het oplossen van de DV. Zie in voorbeeld 11.7 waar m, c en k de systeemconstanten zijn en eigenschappen zijn van het model dat beschreven wordt met de DV Randvoorwaarden Meteen al in het eerste voorbeeld 11.1 is er sprake van een randvoorwaarde. Als er meer randvoorwaarden zijn, zoals bij hogere-orde DV s of bij stelsels DV s (voorbeelden 11.5 en 11.6), worden de randvoorwaarden opgegeven in de vorm van een rij bestaande uit vergelijkingen, ervan uitgaande dat het over functies gaat. Maar let op! Geen rij van toekenningen! Randvoorwaarden worden ook wel eens beginvoorwaarden genoemd, vooral als de tijd een rol speelt. Gegevens op t = 0 worden vaak als beginvoorwaarden opgevat bijvoorbeeld y(0)=0 of D(y)(0)=3. (Wat beslist niet als randvoorwaarde kan dienen, is bijvoorbeeld diff(y(0),t)=0.) Voor een DV van de n-de orde heb je n randvoorwaarden nodig om de oplossing zonder integratieconstanten te kunnen bepalen. Als je te maken hebt met een gestuurd systeem dat lineair is en van hogere orde met constante coëfficiënten, zoals het massa-veersysteem van voorbeeld 11.7, kan de methode van Laplace gebruikt worden, maar alleen als de beginvoorwaarden op t = 0 allemaal gelijk zijn aan 0. Zie verder paragraaf en Lijnelementenveld Er zijn verschillende mogelijkheden om een lijnelementenveld van een DV te maken. Je kunt op die manier een indruk krijgen van de mogelijke integraalkrommen (grafieken van oplossingen) zonder de DV op te lossen. Ook kunnen de zogenoemde singuliere punten herkend worden als de lijnelementen chaotisch gedrag vertonen. De lijnelementen zijn overal evenlange stukjes raaklijn aan de mogelijke integraalkrommen. In een singulier punt kunnen óf heel veel integraalkrommen tesamen komen, óf er gaat geen enkele integraalkromme door zo n punt. In figuur 11.5 is het punt (0,0) een singulier punt. Het blijkt dan dat de helling van de raaklijn, gedefinieerd door middel van de DV, in dat punt gelijk is aan 0 0. In feite is een lijnelementenveld alleen mogelijk van een eerste-orde DV. Vaak is dan ook te zien waar je het beste de randvoorwaarden kunt kiezen (dus niet in een singulier punt). In voorbeeld 11.3 is een lijnelementenveld gemaakt van een eerste-orde DV met het commando dfieldplot uit het DEtools-pakket. Standaard wordt er van de lijnelementen pijltjes gemaakt, maar met een optie arrows=line worden het de bedoelde lijnstukjes. Echter als je te maken hebt met een stelsel gekoppelde lineaire DV s, is het misschien beter om de lijnelementen toch door middel van kleine pijltjes weer te geven. Zie voorbeeld 11.5 waar we te maken hebben met een parametervoorstelling [x(t), y(t)], zodat de richting waarin
235 11 Differentiaalvergelijkingen 223 de grafiek van de integraalkromme doorlopen wordt, correspondeert met de richting van de pijltjes van het lijnelementenveld. We noemen dat dan ook liever richtingsveld. In situaties van stelsels gekoppelde differentiaalvergelijkingen en richtingsveld wordt een singulier punt ook wel evenwichtspunt genoemd. Het maken van zo n richtingsveld is gemakkelijk als je met phaseportrait uit het DEtools-pakket werkt, zoals aan het eind van voorbeeld 11.5 is gedaan. Het voordeel hiervan is dat je meteen hierbij een aantal randvoorwaarden kunt opgeven en dat dan ook de integraalkrommen die daaraan voldoen, worden weergegeven in het richtingsveld. Verder kan dit commando phaseportrait ook gebruikt worden bij het onderzoek van een tweede-orde systeem dat omgezet is naar een stelsel eerste-orde DV s. Daarbij wordt er een richtingsveld gemaakt dat een andere vertaling kent dan de stukjes raaklijnen aan de integraalkrommen. Zie voor uitleg daarvan voorbeeld 11.9 bij het onderzoek naar de niet-lineaire slinger. Het is al opgemerkt dat deze lijnelementenvelden en richtingsvelden bestaan uit lijnstukjes of pijltjes van gelijke lengte. Er is echter met fieldplot uit het plotpakket een mogelijkheid om een vectorveld te maken dat in feite nog meer informatie over de differentiaalvergelijking bevat dan het lijnelementenveld. Een voorbeeld daarvan is te vinden in figuur De lengte van de pijltjes is een indicatie voor de snelheid waarmee de kromme doorlopen wordt. Zie ook bij de TIP aan het eind van de toelichting bij figuur Meer informatie over vectorvelden staat in paragraaf Stelsels differentiaalvergelijkingen Met een stelsel differentiaalvergelijkingen ga je met het commando dsolve op dezelfde manier te werk als bij een enkele differentiaalvergelijking. Er kan ook een verzameling DV s worden opgegeven, tezamen met de randvoorwaarden. De manier van doen lijkt op die van het commando solve. Als tweede argument moet dan de verzameling onbekende functies opgegeven worden. Een voorbeeld is het stelsel differentiaalvergelijkingen van voorbeeld TIP: ga bij een tweede-orde DV ook eens over op een stelsel eerste-orde DV s, zodat onderzoek met behulp van lijnelementenvelden mogelijk is en eventuele evenwichtspunten gemakkelijk opgespoord kunnen worden (voorbeeld 11.9). Doe dat ook eens bij een lineaire differentiaalvergelijking van de tweede orde zoals voorbeeld 11.6 om dan met behulp van matrices, zoals in voorbeeld 11.5, gemakkelijk eigenschappen van het systeem op te sporen! Numerieke oplossingen Bij het bekijken van een numerieke oplossing van een DV is het verstandig om niet in de buurt van verticale lijnelementen te gaan werken en helemaal niet in de buurt van singuliere punten waar het lijnelement niet gedefinieerd is als het om eerste-orde DV s gaat. Bij het numeriek benaderen van de oplossing worden er door de computer steeds kleine stapjes genomen en wordt het lijnelementenveld gevolgd. Bij verticale lijnelementen zou dat zeer onnauwkeurig worden. Zie verder paragraaf Als dsolve geen succes heeft, is er hoogstwaarschijnlijk geen analytische (symbolische) oplossing voor de DV. Geef dan alle parameters een waarde en geeft ook voldoende randvoorwaarden mee en ga over op numeriek oplossen door middel van de optie numeric. Zie verder paragraaf waar gebruikgemaakt wordt van deze optie bij het commando dsolve. De oplossing wordt dan als een soort procedure van een echte functie weergegeven waarmee functiewaarden opgevraagd kunnen worden. Met odeplot uit
236 224 Handleiding Maple 10 het plotpakket kan dan de grafiek van de oplossing geproduceerd worden. Ook bij stelsels differentiaalvergelijkingen kan deze optie gebruikt worden. TIP: werk ook eens met phaseportrait uit het DEtools-pakket als er sprake is van een stelsel DV s dat numeriek opgelost wordt. De grafieken die je daarmee krijgt, zijn ook ontstaan met behulp van numerieke methoden waarbij de stapgrootte is in te stellen met stepsize (zie het script voor figuur 11.5 en figuur 11.8). TIP: soms kun je een truc toepassen: overgaan op een stelsel DV s om alsnóg te proberen een analytische oplossing te vinden zoals in voorbeeld 11.5 bij een eerste-orde systeem. Ook de rolverwisseling tussen een onafhankelijke en afhankelijke variabele wil nog wel eens helpen om toch een analytische oplossing te vinden zoals in voorbeeld Oplosmethoden Voor het oplossen van differentiaalvergelijkingen is het niet nodig om kennis te hebben van verschillende methoden. Met één enkel commando dsolve kan elke DV aangepakt worden waarbij het programma zelf de onderliggende methode regelt. Echter soms is het handig het programma te forceren een bepaalde oplosmethode te gebruiken. De lineaire differentiaalvergelijking (van hogere orde) met constante coëfficiënten komt in toepassingen vaak voor. Voor het oplossen van deze soort is soms de methode van Laplace aan te bevelen. Dat kan voordelen hebben voor de overzichtelijkheid van de uitvoer zoals in voorbeeld De methode van Laplace werkt alleen als bij dit soort differentiaalvergelijkingen de randvoorwaarden in t = 0 genomen worden. Het mooist is het als deze dan ook allemaal gelijk zijn aan 0, maar dat hoeft niet beslist. Ook andere oplosmethoden kunnen geforceerd worden als extra optie bij het commando dsolve. Zie daarvoor in de helpfunctie van het programma. Bij numerieke oplosmethoden wordt standaard de Runge-Kutta Fehlberg-methode gebruikt zoals in voorbeeld 11.8, maar er zijn ook andere mogelijkheden. In het Maplet van figuur 11.1 kun je zien dat als er gekozen wordt voor numeriek oplossen, dat je vervolgens ook een van de numerieke methoden kunt kiezen. Zie verder in de helpfunctie van het programma met?dsolve[numeric].
237 12 Curvefitting 12.1 Inleiding In dit hoofdstuk wordt er, naar aanleiding van de vele vragen over de werking van Maple wat betreft curvefitting, aandacht aan dit onderwerp besteed. Vanaf Maple 7 is een aantal interessante nieuwe commando s in het pakket CurveFitting beschikbaar gekomen. Het betreft krommen in de R 2 afgeleid van een aantal punten in de R 2. Zie paragraaf 12.5 voor de verschillende vormen waarin de punten aangeboden kunnen worden. Dit CurveFitting-pakket maakt het gemakkelijk om bijvoorbeeld de kleinste kwadratenmethode (LeastSquares) toe te passen op een aantal gegeven punten, splines te maken of Lagrange-interpolatie te doen. Verder is er nog een aantal handige commando s in het Statistics-pakket voor nog enkele andere regressiemethoden. Voor uitgebreide statistische technieken is specifieke statistische software eigenlijk meer aan te bevelen. Als er decimale getallen ingevoerd worden en er geen parameters gebruikt worden, wordt er binnen deze pakketten met hardware float gerekend (veel meer decimalen dan 10). Het beste is dan om de displayprecision wat laag te zetten (zie ook blz. 7). Als er gehele getallen ingevoerd worden, wordt er in vele gevallen exact gerekend. Voorbeeld 12.1 Curvefitting met een Maplet Gegeven is een aantal punten (in de vorm van een lijst) waarmee verschillende curves te maken zijn. We kiezen in dit voorbeeld voor lineaire regressie. Dat wil zeggen dat er met behulp van LeastSquares een rechte lijn gemaakt wordt die zo goed mogelijk door de gegeven puntenwolk gaat. > restart;interface(displayprecision=2,warnlevel=0): with(curvefitting): XY:= [[30,40],[40,45],[45,50],[46,60],[50,65],[65,70],[75,80]]; Interactive(XY); XY := [[30, 40], [40, 45], [45, 50], [46, 60], [50, 65], [65, 70], [75, 80]] x 1217 Zie figuur 12.1 waarin gekozen wordt voor LeastSquares en na klikken op de knop Done in het Maplet, beschik je over de formule van de lijn. Met de volgende opdrachten heb je een manier om over een figuur te beschikken, zoals ook in dit Maplet te zien is. > lijn:=evalf(%); lijn := x > with(plots): p1:=plot(xy,style=point,symbolsize=20,symbol=circle): p2:=plot(lijn,x=20..70,thickness=2): display({p1,p2},title="lineaire regressie",labels=["x","y"]); Zie figuur Toelichting: In dit voorbeeld worden de punten gegeven in de vorm van een lijst met deze keer alleen gehele getallen. Dat kan ook anders, zoals in paragraaf 12.5 te zien is. In het Maplet zien we verschillende mogelijkheden om met de gegeven punten een curve te maken. De punten kunnen binnen het Maplet eventueel nog aangepast of aangevuld worden met Edit Points (vanaf versie 9.5). Hier is gekozen voor LeastSquares waarbij een
238 226 Handleiding Maple 10 Figuur 12.1 standaardformule a x + b van een rechte lijn wordt opgegeven. Deze formule kan binnen het Maplet aangepast worden en andere modellen zijn mogelijk, zie paragraaf Als vervolgens op Done geklikt wordt, verschijnt de formule van de berekende regressielijn in het werkblad, klaar om er verder mee te werken bijvoorbeeld om een grafiek te maken. Verder is het ook mogelijk om te kiezen voor Polynomial Interpolation waarover in paragraaf 12.4 meer informatie gegeven wordt en waarbij er een curve gemaakt wordt van de graad n die door n+1 punten gaat. Ook kan er gekozen worden voor Spline, een aaneenschakeling van krommen. Een spline gaat door de gegeven punten en heeft speciale eigenschappen (zie paragraaf 12.3). De andere mogelijkheden van het Maplet worden hier niet verder behandeld. (Als er punten opgegeven worden met floating point, verschijnt de mogelijkheid van Rational Interpolation niet in het Maplet.) 12.2 Regressiekrommen (Trendlijnen) Met behulp van het commandoleastsquares uit het CurveFitting-pakket is het niet alleen mogelijk om de vergelijking van een rechte lijn door een puntenwolk te laten berekenen, zoals in voorbeeld 12.1 te zien is, maar het is ook mogelijk om andere regressiemodellen te hanteren die mogelijk beter passen bij het probleem. Elke modelcurve kan als model dienen waarin de parameters (a, b, c, enzovoort) lineair voorkomen. Deze parameters worden door het programma berekend, zodat de berekende regressiekromme (trendlijn) zo goed mogelijk door de puntenwolk gaat. Aan deze berekening ligt de methode van de kleinste kwadraten ten grondslag, zie voorbeeld In de praktijk werk je met deze berekende waarden om verder aan het model te rekenen. Met behulp van het Statistics-pakket kunnen in voorbeeld 12.3 nog een paar extra mogelijkheden onderzocht worden van situaties die beschreven worden door modellen waarin de parameters níet lineair voorkomen.
239 12 Curvefitting 227 Voorbeeld 12.2 Trendlijnen maken met LeastSquares Met een aantal gegeven punten die in een databestand staan, kunnen verschillende trendlijnen gemaakt worden, afhankelijk van het model dat het verband aangeeft tussen de twee variabelen. > restart: interface(displayprecision=2,warnlevel=0): with(plots): with(curvefitting):xy:=readdata("data2.txt",2); XY := [[0.22, 0.74], [0.19, 1.40], [0.55, 1.76], [0.76, 2.55], [1.18, 2.82], > lijn:=leastsquares(xy,x); [1.00, 2.49], [1.55, 2.76], [1.85, 2.94], [2.46, 3.05]] lijn := x > kromme:=leastsquares(xy,x,curve=a-b*exp(-2*x)); kromme := e ( 2x) > polynoom:=leastsquares(xy,x,curve=a*x^3+b*x^2+c*x+d); polynoom := x+0.361x x 2 > logaritmisch:=leastsquares(xy,x,curve=a+b*ln(x)); logaritmisch := ln(x) > Punten:=plot(XY,style=point,symbolsize=15,symbol=circle): regr_kromme:=plot(kromme,x=0..3,thickness=2): regr_lijn:=plot(lijn,x=0..3,linestyle=2): regr_polynoom:=plot(polynoom,x=0..3): regr_logaritmisch:=plot(logaritmisch,x=0..3,linestyle=3): display({punten,regr_kromme,regr_lijn,regr_polynoom,regr_logaritmisch}); Zie figuur verschillende trendlijnen door de gegeven punten 4 3 Y X 2 Figuur 12.2 Toelichting: In dit voorbeeld worden de data gelezen vanuit een databestand dat bijvoorbeeld in een ander programma (Excel) is voorbereid (zie paragraaf 12.5 voor uitleg). Op deze manier wordt een lijst met punten verkregen. Bij LeastSquares moet behalve de lijst met punten ook de variabele (x of een andere letter) waarin de curve wordt uitgedrukt opgegeven worden. Standaard wordt de rechte lijn gegenereerd. Als extra optie kan een
240 228 Handleiding Maple 10 andere modelcurve worden meegegeven met curve=... De parameters van deze curve die als model dient, worden hier a, b, c, enzovoort genoemd, maar kunnen ook anders genoemd worden, als maar niet de letter gekozen wordt die als variabele dienst doet. Verder kunnen de verschillende mogelijkheden gevisualiseerd worden door er grafieken van te maken die hier in één figuur met display uit het plotpakket worden weergegeven. Uiteindelijk was het model a be 2x het best passend. De grafiek van deze berekende kromme is vet weergegeven. Voorbeeld 12.3 Regressie binnen het Statistics-pakket: macht- en exponentieel verband Bij het werken in het Statistics-pakket, te activeren met with(statistics), moeten de data beslist aangeleverd worden in de vorm van een lijst met x-waarden en een lijst met y-waarden. (Dat kan ook met twee vectoren.) Als gegeven is dat tussen de grootheid X en de bijbehorende waarden Y een exponentieel verband y = ae bx bestaat (de parameters a en b zitten nu niet lineair in het regressiemodel), kunnen de waarden van a en b met ExponentialFit van het Statistics-pakket gevonden worden. Bij een verband dat als model een machtsfunctie y = ax b heeft, kan het commando PowerFit van het Statistics-pakket gebruikt worden. > restart;interface(warnlevel=0,displayprecision=3):with(plots): with(statistics):x:=[1, 2, 3, 4, 5]; Y:=[3.0, 5.1, 7.8, 15.9, 30.3]; > f:=exponentialfit(x,y,x); > g:=powerfit(x,y,x); X := [1, 2, 3, 4, 5] Y := [3.000, 5.100, 7.800, , ] f := 1.589e (0.576x) g := 2.405x > Functies:=plot([f,g],x=0..6,color=[black,blue],thickness=[2,1]): Punten:=ScatterPlot(X,Y,color=black,symbolsize=15,symbol=circle): display({punten,functies},title="macht en exponentieel verband(vet)"); Zie figuur macht en exponentieel verband (vet) Y X Figuur 12.3 Toelichting: Er worden bij het werken binnen het Statistics-pakket voor de data dus twee lijsten aangeleverd. Met ExponentialFit wordt automatisch het model y = ae bx
241 12 Curvefitting 229 aangeroepen. Wel moet de variabele (x of een andere letter) nog worden opgegeven. Evenzo wordt bijpowerfit automatisch het model y = ax b aangeroepen. Voor de grafiek van de punten is gebruikgemaakt van ScatterPlot uit hetzelfde Statisticspakket, omdat de data in de vorm van twee lijsten zijn aangeleverd en het commando plot dat niet accepteert, evenmin alslistplot. Zie ook paragraaf 12.5 om de data in een andere vorm om te zetten Splines Een spline is een vloeiende kromme door een aantal gegeven punten (knooppunten). Vloeiend wil zeggen dat de functie die deze kromme beschrijft, overal continu is. Echter dat niet alleen: de functie moet ook overal differentieerbaar zijn. Dat wil zeggen dat de linker en rechter afgeleide met name in de knooppunten, gelijk moeten zijn. De raaklijn krijgt daarmee een vloeiend verloop. Voor de tweede afgeleide geldt zo mogelijk hetzelfde, want de kromming moet liefst vloeiend verlopen. Deze eisen kunnen verwezenlijkt worden als er een aantal krommen aan elkaar worden geknoopt die minimaal van de derde graad zijn. Splines van de derde graad noemt men natural splines. Het woord spline betekent latje. Je kunt je voorstellen dat een lange lat langs spanten gebogen wordt. De plaatsen van de spanten zijn de knooppunten en de lange lat gaat zich buigen in de vorm van een natural spline. De natural splines (vloeiende krommen) zijn polynomen van de derde graad en kunnen gegenereerd worden met behulp van Spline uit het CurveFitting-pakket. Zie ook het Maplet van voorbeeld 12.1 waar je kunt kiezen voor Spline. Voorbeeld 12.4 Splines Een eenvoudig voorbeeld met gegeven knooppunten (0, 0),(1, 1),(2, 4),(3, 3) waardoorheen een natuurlijke spline gemaakt wordt. > restart;interface(warnlevel=0,displayprecision=2):with(curvefitting): with(plots): M:=<<0 0>, <1 1>, <2.0 4>, <3 3>>; 0 0 M := > f1:=spline(m,x,degree=1); f1 := x < x x x < x otherwise > f3:=spline(m,x);.20x +.80x 3 x < 1 f3 := x ( x 1 ) ( x 1 ) 3 x < x 3.60 ( x 2.0 ) ( x 2.0 ) 3 otherwise
242 230 Handleiding Maple 10 > krommen:=plot([f1,f3],x=0..3,linestyle=[2,1],thickness=[1,3]): punten:=listplot(m,style=point,symbolsize=15): display({krommen,punten},title="natural Spline en Spline van de eerste graad",labels=["x","y"]); Zie figuur Natural Spline en Spline van de eerste graad x Figuur 12.4 Toelichting: Bij dit voorbeeld wordt de lijst met punten als matrix ingevoerd (hier met paletten, zie paragraaf 1.3.6). De punten kunnen dan het beste met listplot uit het plotpakket getekend worden, omdat dit commando ook matrices accepteert. Het commando Spline uit het CurveFitting-pakket accepteert behalve een lijst met punten ook een matrix of een tweetal lijsten, of vectoren. Let daarbij wel op de volgorde van de waarden van de onafhankelijke variabele (hier de x-waarden). Deze x-waarden moeten beslist in opklimmende volgorde ingevoerd worden bij het gebruik van Spline en dat kunnen ook numerieke waarden zijn. Vervolgens moet de variabele waarin de piecewise-functie beschreven wordt (x of een andere letter), opgegeven worden. Standaard wordt met dit commando de natural spline (van de derde graad) gegenereerd, maar er kan ook een spline van bijvoorbeeld de eerste graad gemaakt worden f 1 : de aaneenschakeling van een aantal lijnstukken. Merk op dat de grafiek van f 3 bestaat uit derdegraadskrommen (cubic spline of natural spline) die in de knooppunten aan elkaar gekoppeld worden. De grafiek loopt vloeiend langs de punten. Het aantal decimalen kan voor de overzichtelijkheid met displayprecision wat lager gezet worden. Over splines is nog veel meer te zeggen als het gaat om de situatie aan het begin en het eind van de spline. Kijk daarvoor in de helpfunctie?spline Lagrange-polynomen Zoals bekend, gaat er een rechte lijn door twee gegeven punten (steunpunten). Er gaat een parabool door drie gegeven punten. Zo kun je verder redeneren en er gaat dus een grafiek van een derdegraadspolynoom door vier steunpunten. In het algemeen kun je dus een n e -graads polynoom construeren door n + 1 steunpunten. Deze manier van punten verbinden heet Lagrange-interpolatie en Maple heeft voor deze constructie een commando in het CurveFitting-pakket: PolynomialInterpolation (interpolatie) om de Lagrangepolynoom te maken. Het nadeel van deze interpolatiemethode is gelegen in het feit dat hoe meer steunpunten, hoe hoger de graad van de Lagrange-interpolatie polynoom wordt! Dit is niet altijd even wenselijk.
243 12 Curvefitting 231 Voorbeeld 12.5 De Lagrange-interpolatiepolynoom door de volgende vijf punten (0, 3.2),(1.5, 4.8),(3.4, 3),(4.9, 7.1),(7, 1.4) is van de vierde graad. De punten worden samen met de grafiek van de polynoom weergegeven. > restart; interface(displayprecision=2,warnlevel=0): with(curvefitting): with(plots):x,y:=vector([0,1.5,3.4,4.9,7]),vector([3.2,4.8,-3,7.1,1.4] ):M:=<<X Y>>; M := > kromme:=polynomialinterpolation(m,z); kromme := 0.29z z z 14.62z > Punten:=listplot(M,style=point,symbolsize=15,symbol=circle): Kromme:=plot(kromme,z= ,color=black): display({punten,kromme},title="lagrange interpolatiepolynoom"); Zie figuur Lagrange interpolatiepolynoom z Figuur 12.5 Toelichting: Het enige wat je moet opgeven bij het commando PolynomialInterpolation is een lijst met punten of een n 2-matrix of twee vectoren van dimensie n of twee lijsten met n elementen, waarvoor moet gelden dat de waarden voor x zonder doublures is. De volgorde is niet van belang. Automatisch wordt met PolynomialInterpolation uit het CurveFitting-pakket een polynoom gegenereerd van de graad n 1. Als je numeriek wilt rekenen, geef dan minstens één van de getallen met decimale punt op. Maar als er alleen gehele getallen opgegeven worden, kan de polynoom ook exact berekend worden. De Lagrange-interpolatiepolynoom is hier van de vierde graad, omdat er vijf steunpunten gegeven zijn. Van deze polynoom definieer je de grafiek en de punten kunnen in een grafiek weergegeven worden met listplot uit het plotpakket (plot kan alleen met lijsten of verzamelingen punten werken en niet met een matrix). Met het commando display uit het plotpakket kunnen de beide grafieken, zoals in figuur 12.5 worden weergegeven.
244 232 Handleiding Maple Aanbieden van de data Het voornaamste voordeel van de commando s in het CurveFitting-pakket is, dat de argumenten die met het commando meegegeven moeten worden, overzichtelijk zijn. Bovendien zijn er meer mogelijkheden voor het definiëren van de punten. Er zijn namelijk drie vormen van het aanbieden van de data: ten eerste als lijst met punten, ten tweede als matrix van twee kolommen en ten derde als twee aparte, evenlange lijsten of vectoren. Al deze vormen kunnen naar keuze gebruikt worden bij het CurveFitting-pakket. Data in de vorm van een lijst met punten (voorbeeld 12.1) kan dus gebruikt worden bij alle commando s van het CurveFitting-pakket. De lijst met punten kan ook met plot gemakkelijk in een grafiek worden weergegeven. De data die gegenereerd zijn in een andere applicatie, kunnen binnengehaald worden met readdata (zie voorbeeld 12.2) waarmee deze data automatisch ook weer vertaald worden naar een lijst met punten. Maak bijvoorbeeld in Excel een tabel aan van twee kolommen en sla deze op als tekstbestand. Kies daarbij voor tab-delimited met extensie.txt. Dit tekstbestand plaats je in dezelfde directory als waarin het Maple-werkblad is opgeslagen, anders moet het volledige pad van het databestand worden opgegeven bij readdata. De optie 2 bij het commando readdata slaat op het meenemen van de eerste twee kolommen van het bestand. De gegeven punten kunnen ook als matrix aangeboden worden, zoals in voorbeeld Voor de grafiek met punten kan dan gebruikgemaakt worden van listplot (met optie style=point) uit het plotpakket, want plot accepteert geen matrices maar wel lijsten of verzamelingen met punten. Het is ook mogelijk om twee lijsten of twee vectoren aan te maken. Een lijst (X) voor de waarden van de onafhankelijke variabele en een even lange lijst (Y) voor de waarden van de afhankelijke variabele. De commando s uit het CurveFitting-pakket worden dan als volgt: LeastSquares(X,Y,x). Ook het Maplet van voorbeeld 12.1, accepteert lijsten of vectoren of een matrix of een lijst met punten. Om een grafiek te kunnen maken met de punten die als twee lijsten of twee vectoren gegeven worden, kun je een omzetting doen en een matrix maken van de twee vectoren X en Y met: > Matrix([X,Y]); of met paletten, zoals in voorbeeld 12.5 is gedaan. Of als X en Y geen vectoren maar lijsten waren met: > Matrix([convert(X,Vector),convert(Y,Vector)]); Met listplot, dat matrices accepteert, kun je dan de grafiek van de punten maken. Binnen het Statistics-pakket moet echter beslist alleen met lijsten of vectoren gewerkt worden (voorbeeld 12.3). Dit heeft een nadeel voor het maken van de grafiek met punten, maar omdat toch het Statistics-pakket geactiveerd moet worden kan gebruikgemaakt worden vanscatterplot dat wel twee aparte lijsten accepteert. Voorbeeld 12.6 Omzettingen van data uit een databestand Wil je een databestand binnenhalen om te gebruiken bij het Statistics-pakket, doe dan de volgende omzetmanoeuvre om er een n 2-matrix van te maken waaruit je met Column van het LinearAlgebra-pakket weer twee vectoren kunt maken (zie paragraaf 8.3.1). TIP: met het binnenhalen van data uit een databestand wordt standaard een lijst met punten als decimale getallen gegenereerd. Als je wilt dat het gehele getallen zijn, moet dat aangegeven worden met de optieinteger, anders worden de data als floating point-getallen opgevat. > XY:=readdata("data1.txt",2,integer); XY := [[50, 65], [30, 40], [65, 70], [46, 60], [40, 45], [75, 80], [45, 50]] > M:=convert(XY,Matrix);
245 12 Curvefitting M := > X,Y:=LinearAlgebra:-Column(M,[1,2]); X, Y := 46, De vectoren X en Y kunnen nu gebruikt worden binnen het Statistics-pakket.
246
247 Literatuur Asselt, R. van, en anderen, Wiskunde voor het hoger onderwijs; deel 1, 2 en 3, Educatieve Partners Nederland BV Bauldry, William C., and Joseph R. Fiedler, Calculus Laboratories with Maple, Brooks/Cole Blankespoor, J.H., C. de Joode en A.Sluijter, Toegepaste Wiskunde voor het hoger beroepsonderwijs, deel 1 en 2, Nijgh & Van Ditmar Boorsma, drs K., dr. P.D. Feitsma en J.J.P.V. Feitsma-Severijns, Wiskunde voor de propaedeuse met behulp van Maple, tweede druk, Delta Press Buys, Drs. A., Statistiek om mee te werken, Stenfert Kroese/Educatieve Partners Nederland BV Gommers, Liesbet en Mike Staring, Wiskunde met computeralgebra voor het hoger onderwijs, deel 1, Calculus van één en twee variabelen, Thieme Gommers, Liesbet en Mike Staring, Wiskunde met computeralgebra voor het hoger onderwijs, deel 2, Vectoralgebra en vectoranalyse, Thieme Gommers, Liesbet en Mike Staring, Wiskunde met computeralgebra voor het hoger onderwijs, deel 3, Systeemtheorie, Thieme Dorf en Bishop, Modern Control Systems, Addison Wesley Ellis Jr., Wade, and Ed Lodi, Maple for the Calculus Student, Brooks/Cole Ellis Jr., Wade, and others, Maple V Flight Manual, Brooks/Cole Heal, K.M., M.L. Hansen, K.M. Rickard, Maple V Learning Guide, Springer Verlag Heck, André, Introduction to Maple, tweede druk, Springer Verlag Hibbeler, R.C., Mechanica voor technici-statica, Academic Service Hibbeler, R.C., Mechanica voor technici-dynamica, Academic Service Holmes, Mark H., Exploring Calculus with Maple, Addison-Wesley Kamminga-van Hulsen, Metha, Paul Gondrie en Gerard van Alst, Toegepaste wiskunde met computeralgebra, Academic Service Kamminga-van Hulsen, Metha en Gerard van der Zee, Wiskunde met Computeralgebra deel 1 en 2, Educatieve Partners Nederland BV Kamminga-van Hulsen, Metha, Computeralgebra met Maple, tweede druk, Academic Service Kofler, Michael, Maple, an introduction and reference, Addison-Wesley Kreyszig, Erwin, Advanced Engineering Mathematics, John Wiley and Sons McMahon, Chris en Jimmie Browne, CADCAM, from principles to practice, Addison-Wesley Papula, Lothar, Wiskunde voor het hoger technisch onderwijs; deel 1 en 2, Academic Service Schrage, Jaap, Hans van Daal en Jan Stroeken, Regeltechniek voor HTO, Analoge systemen, HBuitgevers
248 236 Handleiding Maple 10 Staal, Henk, Anneke Grunfeld en Peer van de Sanden, Toegepaste Wiskunde voor hoger onderwijs met behulp van Maple - een interactieve methode - Deel 1, Academic Service Streng, Martin, Stephan van Gils en Adri van der Meer, Maple, Wiskunde in berekenbaar perspectief, derde editie, Addison-Wesley Stewart, James, Calculus, Brooks/Cole Weber, H., Laplace-transformatie, Thieme Williamson, R.E., Introduction to differential equations and dynamical systems, McGraw- Hill
249 Index aangevulde matrix, 163 abs, 11, 28, 193 absolute waardefuncties differentiëren, 106 absolute waarden, 28 afsluitteken, 4 alias, 117 align, 54 allvalues, 65 animate, 48, 99 animatecurve, 31, 47, 199 animatie, 31, 46 ApproximateInt, 180 arcdeg, 122 ArcLength, 178 argument, 193 array, 94, 217 arrow, 52, 53, 92, 150 assign, 68, 69, 99 assume, 74, 80, 118, 174, 176 assuming, 120 asymptoot, 43 Asymptotes, 44 attributes, 92 AutoSave, 3, 23 axes=boxed, 32, 39, 43 backquotes, 76, 106, 116 BackwardSubstitute, 168 Balloon Help, 3 Basis, 133 beginvoorwaarden, 222 benaderen, 7 beslissingsvariabelen, 137 binomiaalfunctie, 14 binomiaalontwikkeling, 88 binomiaalvergelijkingen, 196 binomial, 14, 88 blokproduct, 155 Bode diagram, 199, 200 booglengte, 177, 178 bookmark, 19 Boolean expression, 124 boxed, 38 breakaway point, 203 breuken, 59 breuksplitsen, 61 cat, 96 CauchyPrincipalValue, 174 CharacteristicPolynomial, 159 coëfficiëntenmatrix, 162 collect, 129, 187 color, 32 Column, 232 combine, 131 exp, 130 CompleteSquare, 62 complex geconjugeerde, 192 complex vlak, 195 complexe getallen, 191 complexplot, 195, 198 conjugate, 192 constrained, 53, 109, 150, 183, 195 contextbalk, 2 contourplot, 39 contours, 104 convert degrees, 14, 145 exp, 130, 195 float, 7 fraction, 7, 62, 129, 130 Heaviside, 28, 106 list, 96 Matrix, 232 parfrac, 61, 130, 185 piecewise, 29, 186 polar, 194 polynom, 112 Vector, 232 coordinates=polar, 178 coords=polar, 48 CrossProduct, 149 CrossProductPlot, 150 cubic spline, 230
250 238 Handleiding Maple 10 curvefitting, 225 cyclometrische functies, 14 decimale getallen, 6 deltafunctie, 105 denom, 59 Determinant, 152 dfieldplot, 209, 220 diff, 75 differentiëren, 97 Diff, diff, 75 differentiaalvergelijkingen, 205 homogeen, 206 normaalvorm, 209 stelsel gekoppelde, 212 Digits, 7 Dirac, 105 Dirac-puls, 105, 184, 187 discont=true, 43, 47, 107 discontinuïteit, 45 oneindige, 74 ophefbare, 73 display, 41, 43, 50, 52, 54, 111 displayprecision, 7, 65, 136 dollarteken, 86, 89, 95, 124 dot-operator, 86, 90, 143, 154 DotProduct, 143 dubbelintegraal, 179 e, 12 getal van Euler, 8 eenheden, 121 eenheidsmatrix, 154 eenheidspuls, 105 eenheidsstap Heaviside, 26 eenheidsvector, 145 Eigenvalues, 158 Eigenvectors, 158 eliminatiemethode van Gauss, 168 entry point, 203 Euler formule van, 195 getal van, 12, 16 eval, 56 evalb, 124 evalc, 118, 193 evalf, 7, 58, 78 evenwichtspunt, 213 expand, 57, 128, 131 exponentiële functie, 12 ExponentialFit, 228 ExportPresentation, 125 expressie, 83 expression palette, 76 factor, 57, 191 complex, 128 real, 128 factorial, 14 faculteit, 5 feasible area, 140 fieldplot, 148 fieldplot3d, 148 File Association Selector, 2 filled, 79 float hardware, 141, 146, 151, 225 software, 141 floating point, 6 fnormal, 58, 62, 111, 128, 160, 186 font, 54, 190 formules, 83 in de tekst, 18 met paletten, 8 Fourier, 187 analyse, 188 coëfficiënten, 187 integraal, 189 transformatie, 189 fourier, 189 frame parameter, 48 frames, 46 freeze, 131 fsolve, 65, 66, 70 met interval, 72 functie binomiaal-, 14 complexe, 198 cyclometrische, 13 exponentiële, 12 faculteits-, 14 goniometrische, 13 impliciete, 35, 109 logaritmische, 13
251 12 Index 239 met poolcoördinaten, 32 modulus of absolute waarde, 28 piecewise, 28 van twee variabelen, 38 vector-, 29 wortel-, 12 functienotatie, 15, 83, 100 functievlak, 103 fuzzy zero, 62, 111, 128, 160, 186 Gauss, 168 GaussianElimination, 168 GenerateEquations, 162 GenerateMatrix, 163 gereserveerde namen, 8 Gröbner-basis, 132 graden, 14 gradiënt, 101 gradplot, 102 grafiek met punten, 54 grafieken, 23 Griekse letters, 8 haakjes wegwerken, 128 hardware float, 141, 146, 151, 225 Heaviside, 26, 184, 187 helpfunctie, 20 hyperlink, 19 ifactor, 58 Im, 193 imaginaire eenheid, 8, 119, 191 impliciete functie, 35, 109 implicitplot, 36 index, 89, 115 indices, 115 inequal, 139 inerte commando Diff, 75 Eval, 56 Int, 76, 171, 181 Limit, 74 Sum, 87 infinity, 74, 77, 87 infolevel, 136, 138 inproduct, 90 instellingen, 1 int, 76 integraal -krommen, 222 -transformatie, 184 -vergelijking, 176 Fourier-, 189 Laplace-, 184 meervoudige, 179 oneigenlijke, 172 integratieconstante, 207 integreren, 76 Interactive, 25 interface displayprecision, 7, 65, 119, 141 imaginaryunit, 119, 193 showassumed, 118 warnlevel, 32, 91, 119, 141, 195 interpolatie, 231 intersect, 89 interval, 77, 84 op de reële as, 70 inttrans, 184 invlaplace, 184 inwendig product, 90, 143 IsProper, 134 kleinste kwadratenmethode, 169, 226 knoppenbalk, 2 kolomvector, 90 kwadraat afsplitsen, 62 labeldirections, 176 labels, 32, 39, 43, 195, 198 Lagrange-interpolatie, 230 Laplace integraal, 184 methode, 224 transformatie, 184 laplace, 184, 216 LeastSquares CurveFitting, 226 LinearAlgebra, 169 legenda, 107 legenda, 41 lhs, 66, 84, 133 lib, 21 lijnelementenveld, 209 lijst, 88 limieten, 72
252 240 Handleiding Maple 10 limit, 72 LimitTutor, 73 lineair programmeren, 137 Lineaire Algebra, 141 lineaire regressie, 225 LinearInequalitiesTutor, 140 linkerlid, 66, 133 listplot, 230, 232 logaritme, 13 logaritmische schaal, 199 loglogplot, 200 LPSolve, 138 LSSolve, 137 machtreeks, 111 map, 85, 133, 160, 164 Maple Classic Worksheet, 1 Maple notation, 3 Maplet, 122 AntiderivativeTutor, 81 ApproximateIntTutor, 81 CrossSectionTutor, 40 CurveFitting[Interactive], 225 DerivativeTutor, 81 DiffTutor, 81 DirectionalDerivativeTutor, 100 dsolve[interactive], 206 EigenvaluesTutor, 158 EigenvectorsTutor, 158 FunctionAverageTutor, 177 FunctionSlopeTutor, 81 IntTutor, 81 LimitTutor, 73 LinearInequalitiesTutor, 140 LinearSolveTutor, 167 LinearSystemPlotTutor, 164 MatrixBuilder, 163 Optimization[Interactive], 136 plots[interactive], 25 RationalFunctionTutor, 45 SpaceCurveTutor, 51 standaardfuncties, 14 SurfaceOfRevolutionTutor, 177 TangentTutor, 98 TangentTutor, 51, 81 TaylorApproximationTutor, 114 VectorFieldTutor, 149 VolumeOfRevolutionTutor, 177 Maplet Builder, 122 MapleTA, 123 MapToBasis, 92 massa-veersysteem, 216 MathML, 125 matrices, 93 matrix determinant, 152 eenheids-, 154 getransponeerde, 152 inverse, 152, 163 optelling, 153 regulier, 152 singulier, 152, 166 vermenigvuldiging, 154 matrix-palet, 8, 93 MatrixInverse, 152 Maximize, 137 meervoudige toekenning, 32, 93 95, 115, 142 meetkundige rij, 86, 87 menubalk, 2 Minimize, 137 minus, 89 modulus, 193 modulusfunctie, 28 MultivariateCalculus, 182 namen, gereserveerde, 8 natural spline, 229 niet-lineaire slinger, 206 niveaulijn, 140 nops, 85, 161, 202 Norm, 144 normal, 60, 129 expanded, 129 normale verdeling, 175 Normalize, 145 numer, 59 numpoints, 34, 37, 183 ODE, 219, 221 odeplot, 219 omzettingen, 96 onbepaalde integraal, 77 oneigenlijke integraal, 172 oneigenlijke machten, 12 ongelijkheden, 70, 139
253 12 Index 241 ontbinden in factoren, 128 op, 84 operanden, 84 Optimization, 136 oriëntatie, 38 orientation, 32, 39, 43 overbepaald stelsel, 169 pachnogrid, 43 pakketten, 21 paletten, 8, 11, 93 parameter, 74, 80 parameterkromme, 29, 108 parametervoorstelling, 212 partiële afgeleide, 99 patchcontour, 40 phaseportrait, 212 Pi, 8 piecewise, 28, 106 pijlen, 53 pijltjesnotatie, 15, 23, 83, 100, 157 plaatsvector, 108 Plot Builder, 24 plot3d, 38 plotopties, 24 polair diagram, 198 polarplot, 33, 111, 183 PolynomialInterpolation, 230 polynoom, 112, 132 poolbanen, 201 poolcoördinaten, 32, 110, 178, 183, 193 PowerFit, 228 Precalculus, 62 Preferences, 3, 118 print, 94 printf, 95, 125 procentteken, 4, 5, 13 puntkomma, 4 QPSolve, 137 quotes, 54, 76, 115, 173 raaklijn, 97 raakvlak, 156, 182 radialen, 13, 14, 145 rand, 85 randomgetallen, 85 randvoorwaarden, 222 range, 77, 84, 87 RationalFunctionPlot, 44 Re, 193 Reële getallen, 120 RealDomain, 120, 161, 192 RealRange, 70 rechterlid, 67, 133 rechterlidvector, 162 rechtermuisknopmenu, 8 ReducedRowEchelonForm, 168 reguliere matrix, 152 relatie in parametervorm, 29, 108 restart, 4 rhs, 67, 84, 133 richtingsafgeleide, 100 richtingscoëfficiënt, 97 richtingsveld, 223 rij, 86 rootlocus, 202, 203 RootOf, 65 ruimtekromme, 31 ScatterPlot, 229, 232 semilogplot, 199 seq, 86, 161, 175 series, 112 set, 89 showassumed, 118 Simplex-methode, 137 simplify, 60 met vergelijkingen, 131 symbolic, 130, 144 zero, 129, 160, 187 singulier punt, 213, 222, 223 singuliere matrix, 152, 166 smartplot, 10, 24, 36 snelheidsvector, 108 software float, 141 solve meer vergelijkingen, 69 met accolades, 71 ongelijkheden, 71 sommatie sum, Sum, 87 sort, 127 spacecurve, 31, 43 Spline, 229 spreadsheet, 19, 110
254 242 Handleiding Maple 10 sqrt, 7, 12, 59 standaardfuncties, 11 stapfunctie, 26, 184, 187 stationair punt, 103 stopknop, 4 string, 95, 117 style, 43 patchnogrid, 42, 150 point, 52, 195 subs, 55 substitutie, 55 sum, 87 surd, 12 SurfaceArea, 182 symbolen, 8 symbolsize, 54 systeemconstante, 206, 222 Tangent, 97 TangentPlane, 156, 157 TaylorApproximation, 113 tekstverwerker, 16 termen, 86 terugsubstitutie, 168 textplot, 53, 79, 80, 99, 190, 195 thickness, 32 titel (worksheet), 17 title, 39, 148, 175 toekenning, 5 toelatingsgebied, 140 traagheidsmoment, 184 Transpose, 152 trendlijnen, 226 tubeplot, 31 Tutoren, 122 tweede machtswortel, 7 uitdrukking, 83 uitwendig product, 149 unapply, 16 unassign, 68, 116 union, 89, 134 Unit Converter, 121 UnitVector, 145 unprotect, 119 value, 57, 74, 75, 77, 87 VectorAngle, 145 VectorCalculus, 91, 149 vectoren, 89, 142 eenheidsvector, 145 hoek, 145 inproduct, 143 lengte, 144 uitproduct, 149 vectorfunctie, 29, 108, 146, 178 VectorNorm, 144 vectorveld, 148, 213, 214 vectorvergelijking, 161 vectorvoorstelling, 39, 42, 156, 182 veegmethode Gauss, 166 Gröbner, 132 vergelijkingen Gröbner-basis, 132 oplossen, 64 stelsel vergelijkingen, 68, 132, 164 verzamelingen, 89 view, 43 45, 47 werkblad, 1, 16 with CurveFitting, 225, 226 DEtools, 209 Groebner, 133 inttrans, 184, 189 LinearAlgebra, 141 MathML, 125 Optimization, 136 plots, 23 RealDomain, 120 simplex, 137 Statistics, 228 StringTools, 95 Student, 40 Calculus1, 51, 81, 97, 114, 177, 180 MultivariateCalculus, 40, 100, 182 Precalculus, 44, 62, 81 VectorCalculus, 51, 149 VectorCalculus, 91, 156 worksheet, 1, 16 wortelfunctie, 12 zadelpunt, 104
Handleiding Maple 10. Metha Kamminga van Hulsen
Handleiding Maple 10 Metha Kamminga van Hulsen Meer informatie over deze en andere uitgaven kunt u verkrijgen bij: Sdu Klantenservice Postbus 20014 2500 EA Den Haag tel.: 070 378 98 80 fax: 070 378 97
Derive in ons wiskundeonderwijs Christine Decraemer
Dag van de Wiskunde 003 de en 3 de graad Module 6: Eerste sessie Derive in ons wiskundeonderwijs Christine Decraemer Je kunt Derive het best vergelijken met een uitgebreid rekentoestel. Niet enkel numerieke,
Arbo- en verzuimbeleid
r i c h t l i j n v o o r d e a r b o c a t a l o g u s Arbo I n f o r m a t i e 1 Arbo- en verzuimbeleid Elfde herziene druk Arbo-Informatieblad 1 1-12-2010 11:02:47 colofon Uitgave Sdu Uitgevers Sdu
Formules in Maple T.A. voor studenten
Formules in Maple T.A. voor studenten Copyright Metha Kamminga jan. 2013 Formules in Maple T.A. voor studenten Contents 1 Formules met Maple T.A. voor studenten... 1 1.1 Inleiding... 1 1.2 De student tikt
maplev 2010/7/12 14:02 page 15 #17 Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect
maplev 2010/7/12 14:02 page 15 #17 Module 2 Het gebruik van Maple, vervolg Onderwerp Voorkennis Expressies Nadere detaillering van een aantal zaken van Module 1 Geen,, " ", \, save, read, protect, unprotect
Onderzoek als project
Onderzoek als project Onderzoek als project Met MS Project Ben Baarda Jan-Willem Godding Eerste druk Noordhoff Uitgevers Groningen/Houten Ontwerp omslag: Studio Frank & Lisa, Groningen Omslagillustratie:
2. Een eerste kennismaking met Maxima
. Een eerste kennismaking met Maxima Als u nog niet eerder kennis heeft gemaakt met CAS (Computer Algebra System) software, dan lijkt Maxima misschien erg gecompliceerd en moeilijk, zelfs voor het oplossen
HOOFDSTUK 1. beginnen met excel
HOOFDSTUK 1 beginnen met excel Inleiding Voor het betere rekenwerk in de bedrijfseconomie worden spreadsheets (rekenbladen) gebruikt. In dit hoofdstuk leer je omgaan met algemene basisbewerkingen in Excel:
RESULTAATGERELATEERDE
erde OVER NO CURE NO PAY RESULTAATGERELATEERDE BELONING Resultaatgerelateerde beloning Over no cure no pay OVER NO CURE NO PAY RESULT AATGERELATEERDE BELONING RESULTAATGERELATEERDE BELONING 02 Resultaatgerelateerde
Beknopte handleiding voor Derive 5.0 for Windows
- Lesbrief Beknopte handleiding voor Derive 5.0 for Voorspelbaarheid en Populaties in de tijd Doelgroep Klas 5 t/m 6 havo en vwo Vakken en domeinen Algemene natuurwetenschappen VWO Wiskunde VWO: A domein
Korte handleiding Maple bij de cursus Meetkunde voor B
Korte handleiding Maple bij de cursus Meetkunde voor B Deze handleiding sluit aan op en is gedeeltelijk gelijk aan de handleidingen die gebruikt worden bij de cursussen Wiskunde 2 en 3 voor B. Er zijn
Differentiëren. Training met de rekenregels en de standaard afgeleiden
Differentiëren Training met de rekenregels en de standaard afgeleiden Wisnet-HBO update maart 2011 Voorkennis Repeteer de standaardafgeleiden en de rekenregels voor differentiëren. Draai eventueel het
1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x.
1.0 Voorkennis Voorbeeld 1: Los op: 6x + 28 = 30 10x. 6x + 28 = 30 10x +10x +10x 16x + 28 = 30-28 -28 16x = 2 :16 :16 x = 2 1 16 8 Stappenplan: 1) Zorg dat alles met x links van het = teken komt te staan;
Handleiding Programmeren en bewerken CAM (graveermachine) Aan de slag. in beroep en bedrijf. Handleiding Programmeren en bewerken CAM (graveermachine)
Aan de slag in beroep en bedrijf Handleiding Programmeren en bewerken CAM (graveermachine) Branche Uitgevers 1 Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in
Standaardafgeleiden. Wisnet-HBO. update maart 2011
Standaardafgeleiden Wisnet-HBO update maart 2011 1 Inleiding Als je nog niets over differentiëren weet, kun je beter eerst naar de les Wat is Differentiëren gaan in Wisnet Verder zijn er Maplets om de
VAARDIGHEDEN EXCEL. MEETWAARDEN INVULLEN In de figuur hieronder zie je twee keer de ingevoerde meetwaarden, eerst ruw en daarna netjes opgemaakt.
VAARDIGHEDEN EXCEL Excel is een programma met veel mogelijkheden om meetresultaten te verwerken, maar het was oorspronkelijk een programma voor boekhouders. Dat betekent dat we ons soms in bochten moeten
Breuken met letters WISNET-HBO. update juli 2013
Breuken met letters WISNET-HBO update juli 2013 De bedoeling van deze les is het repeteren met pen en papier van het werken met breuken. Steeds wordt bij gebruik van letters verondersteld dat de noemers
Basisvaardigheden Microsoft Excel
Basisvaardigheden Microsoft Excel Met behulp van deze handleiding kun je de basisvaardigheden leren die nodig zijn om meetresultaten van een practicum te verwerken. Je kunt dan het verband tussen twee
Korte handleiding Maple, bestemd voor gebruik bij de cursus Wiskunde
Korte handleiding Maple, bestemd voor gebruik bij de cursus Wiskunde voor B. 1 Eenvoudige operaties en functies. 1. De bewerkingen optellen aftrekken, vermenigvuldigen, delen en machtsverheffen worden
Breuksplitsen WISNET-HBO NHL. update juli 20014
Breuksplitsen WISNET-HBO NHL update juli 20014 1 Inleiding Bij sommige opleidingen is het belangrijk dat er enige vaardigheid ontwikkeld wordt om grote breuken te manipuleren en om te zetten in een aantal
xxii Handleiding Maple 10
xxii Handleiding Maple 10 dat geval kun je van de vectorvergelijking een stelsel vergelijkingen maken in de vorm van een verzameling of een lijst naar keuze en dit stelsel te lijf gaan met solve of andere
Snel aan de slag met computeralgebra
HANDLEIDING MAPLE 16 Snel aan de slag met computeralgebra Metha Kamminga-van Hulsen Handleiding Maple 16 Metha Kamminga van Hulsen Meer informatie over deze en andere uitgaven kunt u verkrijgen bij: Sdu
Vergelijkingen met breuken
Vergelijkingen met breuken WISNET-HBO update juli 2013 De bedoeling van deze les is het doorwerken van begin tot einde met behulp van pen en papier. 1 Oplossen van gebroken vergelijkingen Kijk ook nog
Excel. Inleiding. Het meest gebruikte spreadsheet programma is Excel.
Excel Inleiding Het woord computer betekent zoiets als rekenmachine. Daarmee is is eigenlijk aangegeven wat een computer doet. Het is een ingewikkelde rekenmachine. Zelf voor tekstverwerken moet hij rekenen.
Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.
een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers
Matlab introductie. Kees Vuik
Matlab introductie Kees Vuik 2014 Delft University of Technology Faculty of Electrical Engineering, Mathematics and Computer Science Delft Institute of Applied Mathematics Copyright 2014 by Delft Institute
WISKUNDE VOOR HET HOGER TECHNISCH ONDERWIJS. deel 1 LOTHAR PAPULA. 2e druk > ACADEMIC SERVICE
WISKUNDE VOOR HET HOGER TECHNISCH ONDERWIJS deel 1 LOTHAR PAPULA 2e druk > ACADEMIC SERVICE inhoud 1 Algemene grondbegrippen 1 1.1 Enkele basisbegrippen in de verzamelingenleer 1 1.1.1 Definitieenbeschrijvingvaneenverzameling
Belastingwetgeving 2015
Belastingwetgeving 2015 Opgaven Niveau 5 MBA Peter Dekker RA Ludie van Slobbe RA Uitgeverij Educatief Ontwerp omslag: www.gerhardvisker.nl Ontwerp binnenwerk: Ebel Kuipers, Sappemeer Omslagillustratie:
opgaven- en werkboek GECONSOLIDEERDE JAARREKENING Henk Fuchs 1e druk
opgaven- en werkboek Henk Fuchs GECONSOLIDEERDE JAARREKENING 1e druk Geconsolideerde jaarrekening Opgaven- en werkboek Geconsolideerde jaarrekening Opgaven- en werkboek Henk Fuchs Eerste druk Noordhoff
Wortels met getallen en letters. 2 Voorbeeldenen met de (vierkants)wortel (Tweedemachts wortel)
1 Inleiding Wortels met getallen en letters WISNET-HBO update sept 2009 Voorkennis voor deze les over Wortelvormen is de les over Machten. Voor de volledigheid staat aan het eind van deze les een overzicht
Wegwijs in de wereld van internet
Wegwijs in de wereld van internet Werkbladen les 5 voor Windows Vista (Windows Mail) Hannie van Osnabrugge Vijfde, herziene druk bussum 2010 Deze werkbladen horen bij Wegwijs in de wereld van internet
Auteur boek: Vera Lukassen Titel boek: Excel Beginners 2013. 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: mei 2013
Auteur boek: Vera Lukassen Titel boek: Excel Beginners 2013 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: mei 2013 ISBN: 978-90-817910-8-3 Dit boek is gedrukt op een papiersoort
Logaritmische functie
Logaritmische functie WISNET-HBO update aug 2013 1 Inleiding De bedoeling van deze les is het repeteren met pen en papier van logaritmen. Voorkennis van de rekenregels van machten is voor deze les beslist
Vergelijkingseditor 2007
Vergelijkingseditor 2007 Wiskunde Module 1a Wiskunde en ICT 1 WISKUNDE EN ICT Tijdens de lessen wiskunde op deze hogeschool met de laptop moet je ook voor wiskunde de laptop zinvol gebruiken. Dat dit niet
Basisvaardigheden Microsoft Excel
Basisvaardigheden Microsoft Excel Met behulp van deze handleiding kun je de basisvaardigheden leren die nodig zijn om meetresultaten van een practicum te verwerken. Je kunt dan het verband tussen twee
Wiskunde en ICT 1. Met het lettertype wiskunde.ttf kan je onderstaande wiskundige symbolen invoegen.
Vergelijkingseditor 2010 Wiskunde Module 1a Wiskunde en ICT 1 WISKUNDE EN ICT Tijdens de lessen wiskunde op deze hogeschool met de laptop moet je ook voor wiskunde de laptop zinvol gebruiken. Dat dit niet
Emotie Detective WERKBOEK - OUDERS
Emotie Detective WERKBOEK - OUDERS Groepstraining Emotie Detective 2015 - Simone van Geel & Paulien Foekens Ontwerp, omslag en binnenwerk: Simone van Geel, Paulien Foekens, Joep Deiman Opmaak: Simone van
Basisvaardigheden rekenen voor de pabo
Basisvaardigheden rekenen voor de pabo Basisvaardigheden rekenen voor de pabo Ed de Moor Willem Uittenbogaard Sieb Kemme eindredactie Noordhoff Uitgevers Groningen Houten Eventuele op- en aanmerkingen
1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x.
1.0 Voorkennis Voorbeeld 1: Los op: 6x + 28 = 30 10x. 6x + 28 = 30 10x +10x +10x 16x + 28 = 30-28 -28 16x = 2 :16 :16 x = 2 1 16 8 Stappenplan: 1) Zorg dat alles met x links van het = teken komt te staan;
Handleiding Sonus Communicator voor Rion NL-22 - NL-32
versie: V1.0 projectnummer: 04023 datum: oktober 2004 Postbus 468 3300 AL Dordrecht 078 631 21 02 2004, Dordrecht, The Netherlands Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd,
Excel reader. Beginner Gemiddeld. [email protected]
Excel reader Beginner Gemiddeld Auteur Bas Meijerink E-mail [email protected] Versie 01D00 Datum 01-03-2014 Inhoudsopgave Introductie... - 3 - Hoofdstuk 1 - Databewerking - 4-1. Inleiding... - 5-2.
Basiskennis van machten WISNET-HBO. update juli 2007
Basiskennis van machten WISNET-HBO update juli 007 Inleiding Deze les doorwerken met pen en papier! We noemen de uitdrukking a 4 een macht van a (in dit geval de vierde macht van a). Het grondtal is a
Jaarrekening. Henk Fuchs OPGAVEN- EN WERKBOEK. Tweede druk
Jaarrekening Henk Fuchs OPGAVEN- EN WERKBOEK Tweede druk Jaarrekening Opgaven- en werkboek Jaarrekening Opgaven- en werkboek Henk Fuchs Tweede druk Noordhoff Uitgevers Groningen/Houten Opmaak binnenwerk:
Antwoorden op de vragen
Wegwijs in Excel 2010 Antwoorden op de vragen Hannie van Osnabrugge u i t g e v e r ij c o u t i n h o c bussum 2011 Deze antwoorden horen bij de vragen in Wegwijs in Excel 2010 van Hannie van Osnabrugge.
5 FORMULES EN FUNCTIES
72 5 FORMULES EN FUNCTIES Dit hoofdstuk behandelt één van de belangrijkste aspecten van spreadsheet programma s: het rekenen met formules en functies. 5.1 Formules invoeren Bij dit onderwerp gebruikt u
www.dubbelklik.nu Handleiding Paint 2003
Handleiding Paint 2003 www.dubbelklik.nu Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand dan wel openbaar gemaakt in enige
Microsoft Word Kennismaken
Microsoft Word 2013 Kennismaken Inleiding Microsoft Word is het meest gebruikte tekstverwerkingsprogramma ter wereld. De mogelijkheden die Word biedt zijn talrijk, maar als je nog nooit met Word gewerkt
Les 7 Doen: Windows Live Mail
Wegwijs in Windows 7 Les 7 Doen: Windows Live Mail Vervangende les voor Windows Live Mail versie 2011 Hannie van Osnabrugge bussum 2011 Deze vervangende les voor Windows Live Mail versie 2011 hoort bij
Wat zijn de verschillen tussen SPSS 9 en SPSS 10?
Wat zijn de verschillen tussen SPSS 9 en SPSS 10? 1.1 De data-editor / het definiëren van variabelen 1.2 Het openen van bestanden 1.3 Output lezen 1.4 Mogelijke problemen 1.1.1 De data-editor Het grootste
Microsoft Word 365. Kennismaken AAN DE SLAG MET DIGITALE VAARDIGHEDEN TRAINING: MICROSOFT WORD 365
Microsoft Word 365 Kennismaken Inleiding Microsoft Word is het meest gebruikte tekstverwerkingsprogramma ter wereld. De mogelijkheden die Word biedt zijn talrijk, maar als je nog nooit met Word gewerkt
PROJECT. schaalrekenen. aardrijkskunde en wiskunde 1 vmbo-t/havo. naam. klas
schaalrekenen PROJECT aardrijkskunde en wiskunde 1 vmo-t/havo naam klas Auteurs Femke Trap José Spaan Bonhoeffer College, Castricum 2006 EPN, Houten, The Netherlands. Behoudens de in of krachtens de Auteurswet
Inleiding Administratieve Organisatie. Opgavenboek
Inleiding Administratieve Organisatie Opgavenboek Inleiding Administratieve Organisatie Opgavenboek drs. J.P.M. van der Hoeven Vierde druk Stenfert Kroese, Groningen/Houten Wolters-Noordhoff bv voert
WISKUNDE EN ICT. 1 Wiskundige symbolen N, R, 2 Symbolen
Vergelijkingseditor 2003 Module 1a en ICT 1 WISKUNDE EN ICT Tijdens de lessen wiskunde op deze hogeschool met de laptop moet je ook voor wiskunde de laptop zinvol gebruiken. Dat dit niet zo evident is,
Berekeningen op het basisscherm
Berekeningen op het basisscherm Het basisscherm Zet de grafische rekenmachine (GR) aan met. Je komt op het basisscherm waarop je de cursor ziet knipperen. Berekeningen maak je op het basisscherm. Van een
WebQuest / WebKwestie. met Word 2003. www.webkwestie.nl
WebQuest / WebKwestie met Word 2003 www.webkwestie.nl Een WebQuest / WebKwestie maken in Word 2003 Belangrijk is dat alle pagina s en afbeeldingen die u gebruikt in één map worden opgeslagen. Download
Auteur boek: Vera Lukassen Titel boek: Word Gevorderd 2010. 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: augustus 2012
Auteur boek: Vera Lukassen Titel boek: Word Gevorderd 2010 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: augustus 2012 ISBN: 978-90-817910-7-6 Dit boek is gedrukt op een papiersoort
De basis van het Boekhouden
De basis van het Boekhouden Werkboek Niveau 3 BKB/elementair boekhouden Hans Dijkink de basis van het boekhouden Niveau 3 BKB/elementair boekhouden Werkboek Hans Dijkink Noordhoff Uitgevers Groningen/Houten
Statistiek met Excel. Schoolexamen en Uitbreidingsopdrachten. Dit materiaal is gemaakt binnen de Leergang Wiskunde schooljaar 2013/14
Statistiek met Excel Schoolexamen en Uitbreidingsopdrachten 2 Inhoudsopgave Achtergrondinformatie... 4 Schoolexamen Wiskunde VWO: Statistiek met grote datasets... 5 Uibreidingsopdrachten vwo 5... 6 Schoolexamen
Boekhouden geboekstaafd Opgaven
Boekhouden geboekstaafd Wim Broerse, Derk Jan Heslinga, Wim Schauten 13 e druk Boekhouden geboekstaafd 1 Drs. W.J. Broerse Drs. D.J.J. Heslinga Drs. W.M.J. Schauten Dertiende druk Noordhoff Uitgevers
Kennismaking. Versies. Text. Graph: Word Logo voorbeelden verschillende versies. Werkomgeving
Kennismaking Word is een tekstverwerkingsprogramma. U kunt er teksten mee maken, zoals brieven, artikelen en verslagen. U kunt ook grafieken, lijsten en afbeeldingen toevoegen en tabellen maken. Zodra
Thuis in de Wereld van Word
Thuis in de Wereld van Word Les 6 Enveloppen en etiketten Aangepaste les voor Word 2000 Hannie van Osnabrugge & Marian Ponsioen-van der Hulst u i t g e v e r ij c o u t i n h o c bussum 2005 Deze aangepaste
Aan de slag. Handleiding Voorraadbeheer
Aan de slag in beroep en bedrijf Handleiding Voorraadbeheer februari 2007 Branche Uitgevers 1 Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in een geautomatiseerd
K.0 Voorkennis. Herhaling rekenregels voor differentiëren:
K.0 Voorkennis Herhaling rekenregels voor differentiëren: f ( ) a f '( ) 0 n f ( ) a f '( ) na n f ( ) c g( ) f '( ) c g'( ) f ( ) g( ) h( ) f '( ) g'( ) h'( ) ( som regel) p( ) f ( ) g( ) p'( ) f '( )
Antwoorden op de vragen
Thuis in Windows 7 Antwoorden op de vragen Hannie van Osnabrugge bussum 2010 Deze antwoorden horen bij de vragen in Thuis in Windows 7 van Hannie van Osnabrugge. 2010 Hannie van Osnabrugge Alle rechten
6. Absolute en relatieve celadressering
6. Absolute en relatieve celadressering In deze module leert u: - Wat absolute en relatieve celadressering is; - De relatieve celadressering toepassen; - De absolute celadressering toepassen; - De absolute
Extra les Muis en toetsenbord
Wegwijs in Windows 8.1 Extra les Muis en toetsenbord Hannie van Osnabrugge u i t g e v e r ij c o u t i n h o c bussum 2015 Deze extra les over het werken met de muis en het toetsenbord hoort bij Wegwijs
Basisvaardigheden algebra. Willem van Ravenstein. 2012 Den Haag
Basisvaardigheden algebra Willem van Ravenstein 2012 Den Haag 1. Variabelen Rekenenis het werken met getallen. Er zijn vier hoofdbewerkingen: optellen, aftrekken, vermenigvuldigen en delen. Verder ken
Spelend leren, leren spelen
Spelend leren, leren spelen een werkboek voor kinderen en ouders Rudy Reenders, Wil Spijker & Nathalie van der Vlugt Spelend leren, een werkboek voor kinderen en ouders leren spelen Rudy Reenders, Wil
Elementaire praktijk van de Financiering Werkboek
Elementaire praktijk van de Financiering Werkboek Niveau 4 PDB Mariëlle de Kock elementaire praktijk van de financiering Niveau 4 PDB Werkboek Mariëlle de Kock Noordhoff Uitgevers Groningen/Houten Ontwerp
Computerlessen voor Senioren. Themacursus. Basis Excel. Uitgave Samenstelling: Lucien Delchambre Paul Derycke. Werken met mappen 1
& Computerlessen voor Senioren Themacursus Basis Excel Uitgave 2010 Samenstelling: Lucien Delchambre Paul Derycke Werken met mappen 1 HANDLEIDING BASIS EXCEL 3 1 Inleiding 3 2 Belangrijke functies 8 3
SNEL WERKEN MET EXCEL
SNEL WERKEN MET EXCEL 2013 Computertraining voor 50-plussers PC50plus computertrainingen Eikbosserweg 52 1214AK Hilversum tel: 035 6213701 [email protected] www.pc50plus.nl Snel werken met Excel C O M P
Trillingen en geluid wiskundig. 1 De sinus van een hoek 2 Uitwijking van een trilling berekenen 3 Macht en logaritme 4 Geluidsniveau en amplitude
Trillingen en geluid wiskundig 1 De sinus van een hoek 2 Uitwijking van een trilling berekenen 3 Macht en logaritme 4 Geluidsniveau en amplitude 1 De sinus van een hoek Eenheidscirkel In de figuur hiernaast
Webmail met Windows Live Hotmail
Wegwijs in internet Webmail met Windows Live Hotmail Hannie van Osnabrugge u i t g e v e r ij coutinho c bussum 2011 Deze handleiding Webmail met Windows Live Hotmail hoort bij Wegwijs in internet van
Samenvatting Wiskunde B
Bereken: Bereken algebraisch: Bereken eact: De opgave mag berekend worden met de hand of met de GR. Geef bij GR gebruik de ingevoerde formules en gebruikte opties. Kies op een eamen in dit geval voor berekenen
PROS1E1 Handleiding ( ) Kf/Dd/Bd
1 Inleiding De eerste oefening In deze eerste oefening wordt het voorbeeld 2-1 van bladzijde 11 uit het boek De taal C van PSD tot C-programma (enigszins aangepast) ingevoerd in de computer. Tevens wordt
Korte handleiding Maple, bestemd voor gebruik bij de cursus Wiskunde
Korte handleiding Maple, bestemd voor gebruik bij de cursus Wiskunde 3 voor B. Functies van twee variabelen.. Een functie fx, y) van twee variabelen kan analoog aan een functie van één variabele in Maple
Wiskundige Technieken 1 Uitwerkingen Hertentamen 23 december 2014
Wiskundige Technieken Uitwerkingen Hertentamen 3 december 04 Normering voor 4 pt vragen andere vragen naar rato: 4pt 3pt pt pt 0pt goed begrepen én goed uitgevoerd, eventueel met enkele onbelangrijke rekenfoutjes
Voorkennis wiskunde voor Biologie, Chemie, Geografie
Onderstaand overzicht volgt de structuur van het boek Wiskundige basisvaardigheden met bijhorende website. Per hoofdstuk wordt de strikt noodzakelijke voorkennis opgelijst: dit is leerstof die gekend wordt
Handleiding e-mail. Aan de slag. in beroep en bedrijf. Handleiding e-mail
Aan de slag in beroep en bedrijf Branche Uitgevers 1 Alle rechten voorbehouden. Niets uit deze uitgave mag worden verveelvoudigd, opgeslagen in een geautomatiseerd gegevensbestand dan wel openbaar gemaakt
1.1 Tweedegraadsvergelijkingen [1]
1.1 Tweedegraadsvergelijkingen [1] Er zijn vier soorten tweedegraadsvergelijkingen: 1. ax 2 + bx = 0 (Haal de x buiten de haakjes) Voorbeeld 1: 3x 2 + 6x = 0 3x(x + 2) = 0 3x = 0 x + 2 = 0 x = 0 x = -2
Basistechnieken Microsoft Excel in 15 minuten
Basistechnieken Microsoft Excel in 15 minuten Microsoft Excel is een rekenprogramma. Je kan het echter ook heel goed gebruiken voor het maken van overzichten, grafieken, planningen, lijsten en scenario's.
Het installatiepakket haal je af van de website http://www.gedesasoft.be/.
Softmaths 1 Softmaths Het installatiepakket haal je af van de website http://www.gedesasoft.be/. De code kan je bekomen op de school. Goniometrie en driehoeken Oplossen van driehoeken - Start van het programma:
Periodeafsluiting. Henk Fuchs Sarina van Vlimmeren OPGAVEN- EN WERKBOEK. Tweede druk
Periodeafsluiting Henk Fuchs Sarina van Vlimmeren OPGAVEN- EN WERKBOEK Tweede druk Periodeafsluiting Opgaven- en werkboek Periodeafsluiting Opgaven- en werkboek Henk Fuchs Sarina van Vlimmeren Tweede
Formules maken met MS Word
Formules maken met MS Word Het gebruik van de vergelijkingseditor 4 HAVO en 5 VWO Werken met de vergelijkingseditor in Microsoft Word. Inleiding. Voor je ligt een handleiding die je leert om te gaan met
Rekenregels voor het differentiëren. deel 1
Rekenregels voor het differentiëren deel 1 Wisnet-HBO update febr 2010 1 Inleiding Als je nog niets over differentiëren weet, kun je beter eerst naar de les "Wat is Differentiëren" gaan. Verder zijn er
Grafieken in Word. Soort 1 2 5 10 12 15 20 30 Leven 4,8 4,9 5,1 5,5 5,6 5,8 6,0 6,2 Annuïteiten 4,9 5,1 5,3 5,7 5,8 6,0 6,2 6,5
Les 16 Grafieken in Word In deze les leert u hoe u gegevens weergeeft in de vorm van een grafiek. Ook past u het uiterlijk, de schaal en het type grafiek aan. Een grafiek maken Eén plaatje zegt meer dan
De waarde(n) van het arbeidsrecht
De waarde(n) van het arbeidsrecht Liber amicorum voor prof. mr. Paul F. van der Heijden Guus Heerma van Voss en Evert Verhulp (red.) 2013 ) Meer informatie over deze en andere uitgaven kunt u verkrijgen
Antwoorden op de vragen
Wegwijs in Excel 2007 Antwoorden op de vragen Hannie van Osnabrugge u i t g e v e r ij c o u t i n h o c bussum 2008 Deze antwoorden horen bij de vragen in Wegwijs in Excel 2007 van Hannie van Osnabrugge.
Wegwijs in de wereld van internet
Wegwijs in de wereld van internet Werkbladen les 4 voor Windows Vista (Windows Mail) Hannie van Osnabrugge Vijfde, herziene druk bussum 2010 Deze werkbladen horen bij Wegwijs in de wereld van internet
www.digitalecomputercursus.nl 6. Reeksen
6. Reeksen Excel kan datums automatisch uitbreiden tot een reeks. Dit betekent dat u na het typen van een maand Excel de opdracht kan geven om de volgende maanden aan te vullen. Deze voorziening bespaart
Auteur boek: Vera Lukassen Titel boek: Excel Gevorderden 2013. 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: December 2013
Auteur boek: Vera Lukassen Titel boek: Excel Gevorderden 2013 2011, Serasta Uitgegeven in eigen beheer [email protected] Eerste druk: December 2013 ISBN: 978-90-820856-9-3 Dit boek is gedrukt op een papiersoort
www.dubbelklik.nu Handleiding Access 2010
www.dubbelklik.nu Handleiding Access 2010 Deze handleiding is onderdeel van Dubbelklik, een lesmethode Technologie, ICT/ Loopbaanoriëntatie en Intersectoraal Alle rechten voorbehouden. Niets uit deze uitgave
Inhoud college 5 Basiswiskunde Taylorpolynomen
Inhoud college 5 Basiswiskunde 4.10 Taylorpolynomen 2 Basiswiskunde_College_5.nb 4.10 Inleiding Gegeven is een functie f met punt a in domein D f. Gezocht een eenvoudige functie, die rond punt a op f lijkt
Inhoud. Aan de student. Studiewijzer. Aan de docent. Over de auteurs. Hoofdstuk 0 Basiswiskunde 1
Inhoud Aan de student V Studiewijzer Aan de docent VII IX Over de auteurs XI Hoofdstuk 0 Basiswiskunde 1 Leereenheid 0.1 Elementaire algebra 3 0.1.1 Verzameling van getallen en het symbool 4 0.1.2 Merkwaardige
Antwoordenboekje. Willem van Ravenstein
Antwoordenboekje Willem van Ravenstein 2006-2007 versie 2 herzien in 2010 1 Inhoudsopgave Inhoudsopgave... 2 Vermenigvuldigen, delen, optellen en aftrekken... 3 Breuken en haakjes... 4 Machten en wortels...
Microsoft Office Tekstdocument alle systemen
Microsoft Office Tekstdocument alle systemen Inleiding In deze les wordt het maken van een tekst document met gebruikmaking van Microsoft Office Word behandeld. (Het gaat hier om één van de oudere versies).
Extra les Werken met Windows Live Mail 2012
Wegwijs in Windows 8 Extra les Werken met Windows Live Mail 2012 Hannie van Osnabrugge u i t g e v e r ij c o u t i n h o c bussum 2013 Deze extra les over het werken met Windows Live Mail 2012 hoort bij
Basiskennis Calculatie
Basiskennis Calculatie Henk Fuchs Sarina van Vlimmeren UITWERKINGEN Derde druk Basiskennis Calculatie Uitwerkingen Basiskennis Calculatie Uitwerkingen Henk Fuchs Sarina van Vlimmeren Derde druk Noordhoff
Een checklist is een opsomming van de dingen die je moet weten en kunnen. HAVO 4 wiskunde B...
Een checklist is een opsomming van de dingen die je moet weten en kunnen. HAVO 4 wiskunde B 0. voorkennis In klas 3 heb je hoofdstuk 10 over algebraische vaardigheden gedaan. Hieronder zie je daarvan een
