Computeralgebra met Maxima 6. Functies 6.1. Definities en gebruik van functies/variabelen Een van de belangrijkste gereedschappen in een CAS betreft het gebruik van functies (definitie, berekening en grafiek). We definiëren functies via de invoerregel. 6.1.1. Definiëren van functies Invoer van een functie door middel van de toekenning :=. Hierbij wordt het rechter deel (functiedeel) niet geëvalueerd. Functienamen en variabelennamen zijn vrij te kiezen. Nadat een functie gedefinieerd is kan een functiewaarde worden berekend door aanroep via de functienaam en haakjes rond het argument. Er zijn nog twee andere manieren om functies te definiëren : - via define zoals hiernaast is aangegeven ; - via twee opeenvolgende aanhalingstekens (quote-quote) voorafgaande aan het funktiedeel. De define-methode en de quote-quote-methode zijn vooral handig als het gaat om de constructie van ingewikkelder functies. Hiernaast definiëren we bijvoorbeeld de afgeleide funktie van f op deze manieren. Als we bijvoorbeeld de afgeleide van de functie f in het punt 0 willen berekenen, dan lukt dat niet via f1b(x):=diff(f(x),x)); f1b(0); 1
Functies Opgave 6.1 We definiëren de functie s via Opgave 6. 1 s( t) = t 3. Bereken de functiewaarden s(0), s(1) en s(). We definiëren een functie O van twee variabelen als volgt Bepaal de functiewaarden voor α = 3,,1 en r = 4. r ( α sin( α)) O( r, α) : =. 6.1.. Verwijderen van functies Functies (en variabelen) blijven gedefinieerd, ook als ze in het algebravenster verwijderd zijn en niet meer zichtbaar zijn. Via het menu Maxima Show functions kan zichtbaar gemaakt worden welke functies in de momentane sessie gedefinieerd zijn. Functies en variabelen kunnen eenvoudig verwijderd worden via de opdracht kill.
Computeralgebra met Maxima 6.1.3 Samenstellen van functies We kunnen ook meerdere functies samenstellen. Vaak is het daarbij handig om aansprekende namen voor functies en variabelen te gebruiken. 6.. Lineaire functies met toepassingen Probleem: Het bedrijf Boles verhuurt professionele machines en gereedschappen. Voor een bepaald type machine moet een vastrecht van 6,50 en een uurtarief van 6,- worden betaald. Vragen : 1. Bepaal een formule voor de huurkosten bij een huurperiode van x uur.. Bepaal de huurkosten voor de machine bij een huurperiode van 1, 3, 5 of 11,5 uur 3. Teken de grafiek van de kostenfunctie als functie van de tijd x 4. Maak een functiewaardentabel voor de huurperioden x = 1,, 6 uur 5. Maak een grafiek van de funktiewaardentabel. Oplossing : Het gaat om een lineaire functie van de vorm: y = k*x + d met d = 6,50 vastrecht k = 6,00 variabele kosten per uur Vertaling in Maxima : Definitie van de functie 3
Functies Berekening van de huurkosten bij een huurperiode van 1 uur: Berekening van functiewaarden (huurkosten) in de vorm van een tabel: In de volgende stap wordt gebruik gemaakt van de plotd-opdracht van Maxima. De waardentabel kan eenvoudig verkregen worden via de opdracht makelist : 4
Computeralgebra met Maxima Via de opdracht plotd([discrete, xy], [style, points])$ tekenen we de punten, gegeven door de coördinatenparen xy. Opgave 6.3 Definieer in Maxima de functie k(x) := (x-8)/. Maak een tabel met functiewaarden voor x = -4, -3,, 4 en maak hiervan een grafiek in een geschikt gekozen venster. 6.3. Zelfgedefinieerde functies Maxima biedt de mogelijkheid zelf stuksgewijs continue samengestelde functies te definiëren. Maxima beschikt al over een aantal standaardfuncties van dit type : abs(x) absolute waarde van x signum(x) signum van x (voor x<0.. -1, voor x>0.. +1, voor x=0.. 0) min/max(x1,x,...) kleinste / grootste argument van x 1, x,. floor(x) grootste geheel getal, dat kleiner of gelijk aan x is. ceiling(x) kleinste gehele getal dat groter of gelijk is aan x mod(m,n) modulorekening : levert de niet-negatieve rest van m/n evenp(x) / oddp(x) bepaalt of een getal x even/oneven is ; uitvoer: true of false Hoe ziet nu de invoer van een stuksgewijs gedefinieerde functie er uit? We kiezen als voorbeeld: x x 1 f ( x) = x 1 x > 1 5
Functies Opmerking: met behulp van de if opdracht kunnen stuksgewijs gedefinieerde functies worden ingevoerd. Notatie if voorwaarde then expr1 else expr.zie ook de IF-opdracht bij het hoofdstuk over controlestructuren Voorbeeld in Maxima: Opgave 6.4 Definieer en teken de volgende functie met Maxima : 1 x 5 < x < 1 f ( x) = x 1< x < x + 1 < x < 5 6.4. Trigonometrische functies 6.4.1. Ingebouwde trigonometrische functies De belangrijkste ingebouwde trigonometrische functies in Maxima: sin(a) berekent de sinus van a cos (a) berekent de cosinus van a tan (a) berekent de tangens van a (tan(a) = sin(a)/cos(a)) asin (a) berekent de hoofdwaarde van de arcussinus van a, d.i. de hoek in het π π interval, waarvan de sinus gelijk is aan a. acos (a) atan (a) berekent de hoofdwaarde van de arcuscosinus van a, d.i. de hoek in het interval [ 0,π ] waarvan de cosinus gelijk is aan a ; π er geldt acos( a) = asin( a) berekent de hoofdwaarde van de arcustangens van a, d.i. de hoek in het π π interval, waarvan de tangens gelijk is aan a. 6
Computeralgebra met Maxima 6.4.. Radialen-graden Opmerking: Maxima rekent in beginsel met radialen. Bij veel toepassingen is de radiaal als hoekmaat eenvoudiger dan de graad. De omrekening naar graden moetin principe handmatig worden uitgevoerd. We definiëren hieronder twee functies graden en radialen, waarmee u radialen/graden kunt omzetten naar graden/radialen. Voorbeeld van het gebruik van radialen: Als we in de blauw gekleurde cirkelsector de hoek c in radialen uitdrukken, dan geldt 1 voor de oppervlakte O van de sector de formule O = c R voor de booglengte S van de sector de formule S = c R 1 voor de koordelengte k de formule k = R sin c In Maxima definiëren we deze formules voor O en S als volgt : 7
Functies c in radialen c in graden U ziet dat de formules voor de oppervlakte en booglengte er eenvoudiger uitzien als we de hoek c in radialen uitdrukken. 6.4.3. Trigonometrische formulemanipulaties Met Maxima kunnen trigonometrische uitdrukkingen ook vereenvoudigd worden. Via eigen opdrachten kan Maxima geïnstrueerd worden in welke richting de vereenvoudiging dient plaats te vinden. Afhankelijk van de gekozen richting (trigexpand of trigreduce) worden trigonometrische uitdrukkingen verder opgesplitst of samengevat. Verdere mogelijkheden bieden de vereenvoudiging met trigsimp en de vereenvoudiging tot een quasilineaire vorm met trigrat. Bij elke aanroep van de functie trigexpand wordt de betreffende uitdrukking steeds één niveau verder uitgewerkt (uitgeschreven), zoals onderstaand voorbeeld laat zien. Hetzelfde doet trigreduce in omgekeerde richting. 8
Computeralgebra met Maxima Opgave 6.5 Schrijf de volgende trigonometrische expressie cos(*x + y )- sin(*x) zo ver mogelijk uit en probeer daarna het resultaat weer zo veel mogelijk te vereenvoudigen. Opgave 6.6 Definieer met behulp van de cosinusregel een functie, die bij de invoer van de drie zijden van een driehoek de hoek uitrekent tussen de eerste twee ingevoerde zijden. Opgave 6.7 Bereken de oplossingen van de goniometrische vergelijking cos(x) = cos(x) op het interval [ 0,π ] 6.5. Exponentiële en logaritmische functies Maxima beschikt over de volgende ingebouwde logaritmische en exponentiële functies: log(x) natuurlijke logaritme met grondtal e (getal van Euler) exp(x) exponentiële functie x e (ook te gebruiken in de vorm %e^x) Opmerking: %e is de basis van de natuurlijke logaritme (e =.7188 ) Hint: Het is handig om een eigen functie voor logaritmen met een willekeurig grondtal te definiëren : logg (x,g):= log(x)/log(g) Probleem : Uit hoeveel cijfers bestaat het getal 008! (008! = 1**3*4* 006*007*008 ). Oplossing: Het aantal cijfers hangt in het tientallig stelsel samen met machten van 10. 100 = 10 ( aantal cijfers is 3) : log(100)/log(10) = 101 = 10, 0043 ( aantal cijfers is 3) : log(101)/log(10) =,0043.. 999 = 10, 99956 ( aantal cijfers is 3) : log(999)/log(10) =,99956.. 1001 = 10 3, 00043 ( aantal cijfers is 4) : log(1001)/log(10) = 3,00043 10001 = 10 4, 000043 ( aantal cijfers is 5) : log(10001)/log(10) = 4,000043 Idee : 008! = 10 y 9
Functies Het getal y volgt uit log(008!)/log(10) Oplossing met Maxima : Dit betekent dat het getal 008! uit 576 cijfers bestaat. Dit resultaat kan Maxima uit (%o) via afronden als volgt berekenen: Opmerking: Het grote kommagetal 5.76193669676394b3 moet gelezen worden als 5,76193669676394 * 10 3 10