MAPLE: Een Inleiding Numerieke wiskunde 2de Bac. Ir. Wet. 2006-2007
Inhoudsopgave 1 Inleiding 1.1 Wat is Maple 10? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Enkele weetjes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 2 2
2 Eenvoudig rekenen 2.1 Elementaire bewerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Numerieke benaderingen en precisie bepalen . . . . . . . . . . . . . . . . . . . . . .
3 3 4
3 Variabelen, uitdrukkingen en substituties
5
4 Functies 4.1 Ingebouwde functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Zelf functies defini¨eren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 7 7
5 Bewerkingen op functies
8
6 Het 6.1 6.2 6.3
oplossen van vergelijkingen solve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dsolve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10 11
7 Matrices
11
8 Elementaire programma’s schrijven
13
9 Grafische mogelijkheden
13
10 Voor meer informatie...
16
1
1 1.1
Inleiding Wat is Maple 10?
Met Maple 10 kan men aan computeralgebra doen. Men kan er dus symbolisch mee rekenen. (Men mag echter niet vergeten dat Maple eveneens als programmeertaal kan gebruikt worden.) Maple 10 kan dus exact analytische oplossingen berekenen van wiskundige problemen, zoals bijvoorbeeld integralen, differentiaalvergelijkingen en lineaire stelsels. Maple 10 kan ook numerieke berekeningen maken en dit, in tegenstelling tot Matlab, in een willekeurig opgegeven precisie. Bovendien heeft Maple 10 handige grafische mogelijkheden, waarvan we er in deze handleiding slechts enkele bekijken. Deze handleiding tracht zeker en vast geen volledige beschrijving te geven van alle mogelijkheden van Maple 10. We hebben geprobeerd om de belangrijkste bevelen die men nodig kan hebben om de inhoud van deze cursus te begrijpen, op een rijtje te zetten en om jullie een beetje warm te make10 om in de volgende jaren de mogelijkheden van Maple verder te ontdekken en te benutten.
1.2
Enkele weetjes
Maple 10 is vooral bedoeld om interactief mee te werken. Men werkt in zogenaamde werkbladen, waarin men naar hartelust kan rondlopen en dingen in veranderen. Let er wel op: eens men ergens in een werkblad een variabele van waarde verandert, is deze waarde overal in de werkbladen van toepassing! Elke regel in een Maple 10–werkblad begint met een prompt > waarachter men commando’s ingeeft. Commentaar kan men kwijt achter het #-teken. Een werkblad afsluiten doet men met het commando quit. Om Maple 10 af te sluiten, gebruikt men het kruisje in de rechterbovenhoek. Merk op dat Maple-bevelen eindigen met een puntkomma (;) of met een dubbelpunt (:). Als ze eindigen op een : worden ze wel uitgevoerd, maar het resultaat verschijnt niet op het scherm. Men mag meerdere Maple-commando’s op ´e´en regel schrijven, als men ze maar scheidt d.m.v. een ;. Een lang commando mag ook over meerdere regels worden gespreid. In eenzelfde blok, naar een volgende lijn springen doet men door shift+enter in te drukken. De help–pagina’s van Maple zijn zeer uitgebreid. Men kan erin gaan zoeken door in de balk bovenaan op Help te drukken of in het werkblad een vraagteken voor het bevel te zetten. Probeer zeker eens ?newuser als men Maple voor de eerste keer gebruikt. Nog iets: Maple 10 is case sensitive, dus een hoofdletter is niet hetzelfde als een kleine letter!
2
2 2.1
Eenvoudig rekenen Elementaire bewerkingen
De elementaire bewerkingen worden aangeduid door volgende symbolen: x^y x**y x*y x/y -x x+y x-y
machtsverheffing xy machtsverheffing xy vermenigvuldiging x gedeeld door y de additieve inverse van x som verschil
Men kan de prioriteiten van bewerkingen wijzigen door gewone (ronde) haken te gebruiken. Getallen kunnen ingevoerd worden in wetenschappelijke notatie of als rationaal getal.
3
> 1.2345e-6; 0.0000012345 > 1234/234;
617 117
> 0.333333; 0.333333 > (3+5/2)^7;
19487171 128
Maple kent een aantal wiskundige constanten. Bijvoorbeeld (Let op de hoofdletters!): Voorstelling Betekenis
2.2
Pi π
√
I −1
infinity ∞
Numerieke benaderingen en precisie bepalen
Maple produceert in principe exacte resultaten, ook al is dat een zeer groot getal:
> 2^100; 1267650600228229401496703205376 Men kan steeds een numerieke benadering vragen met het bevel evalf(uitdrukking,p) waarbij p het aantal beduidende cijfers is dat men wenst. Als men niet opgeeft hoeveel beduidende cijfers men wenst, dan gebruikt Maple 10 het aantal beduidende cijfers waarmee hij werkt. Dit aantal zit in de variable Digits (default is Digits gelijk aan 10), die men zelf ook kan aanpassen. (Dus hiermee kan men de precisie waarmee Maple 10 werkt, veranderen.) > evalf(Pi,500); 3.141592653589793238462643383279502884197169399375105820974\ 9445923078164062862089986280348253421170679821480865132\ 8230664709384460955058223172535940812848111745028410270\ 1938521105559644622948954930381964428810975665933446128\ 4756482337867831652712019091456485669234603486104543266\ 4821339360726024914127372458700660631558817488152092096\ 2829254091715364367892590360011330530548820466521384146\ 9519415116094330572703657595919530921861173819326117931\ 0511854807446237996274956735188575272489122793818301194\ 91 > evalf(Pi); 3.141592654 > Digits; 10 > Digits:=20; evalf(Pi); Digits := 20 3.1415926535897932385
4
Soms wil men eerst het exacte resultaat zien en dan pas een numerieke benadering. Om extra tikwerk te vermijden, heeft men volgende symbolen ingevoerd, die steeds als uitdrukking mogen gebruikt worden: % : het laatst bekomen resultaat. %% : het voorlaatste resultaat Opgelet: Bij het gebruik van dit percentageteken %%% : het derdelaatste resultaat. moet je voorzichtig tewerk gaan. Als je willekeurig door het werkblad loopt en niet alle opdrachten uitvoert, kan je ongewenste effecten krijgen. Het gebruik van deze tekens wordt dus afgeraden en je kan beter een variabele toekennen of als je er toch mee wil werken, zorg dan dat het gebruikt wordt binnen eenzelfde uitvoerblok (meerdere commando’s die door een enkele enter toets worden uitgevoerd).
3
Variabelen, uitdrukkingen en substituties
Een variabele wordt voorgesteld door een alfanumerieke string die begint met een letter. Men kan aan een variabele een waarde toekennen door als invoer variabele := waarde te geven. Met een variabele kunnen de klassieke bewerkingen worden gedaan. Een variabele die een waarde heeft gekregen, behoudt die waarde tot er een andere aan wordt toegekend of tot hij wordt vrijgemaakt. Als een variabele geen waarde heeft, dan rekent Maple symbolisch verder. > x:=1/3; x :=
1 3
> (x^3 - 3*x)/4;
13 54 > unassign(’x’); # dit maakt x terug vrij > y:=(x+1/3)^3; 3 1 y := x + 3 −
Wil men achteraf een variabele in een symbolische uitdrukking toch een waarde geven (wil men m.a.w. de symbolische uitdrukking evalueren), dan kan men dat nog als volgt:
> y; > subs(x=1,y);
1 x+ 3
3
64 27
Men substitueert 1 voor elk voorkomen van x in de uitdrukking y. Af en toe zal het nodig zijn om al het vorige werk (toekenningen) ongedaan te maken. Dit doet men met het bevel restart. Nadien begint Maple met een schone lei. Men kan verder werken met symbolische uitdrukkingen. Men kan ze laten uitschrijven als een som van termen, men kan ze laten factoriseren, enz.
5
> restart; > y:=(x+1/3)^3: > z:=expand(y);
> factor(z);
1 1 z := x3 − x2 + x − 3 27 1 (3x + 1)3 27
> normal((x^2-1)/(x^2+2*x-3)); x+1 x+3 > simplify(cos(x)^5+sin(x)^4+2*cos(x)^2-2*sin(x)^2-cos(2*x)); cos(x)4 (cos(x) + 1) > unassign(’y’); f:=x^7 + x^2*y*(x + y^2*x - 12*x^10); f := x7 + x2 y(x + y 2 x − 12x10 ) > collect(f,x); −12yx12 + x7 + y(1 + y 2 )x3 > collect(f,y); x3 y 3 + x2 (x − 12x10 )y + x7
6
4 4.1
Functies Ingebouwde functies
Maple kent zeer veel functies. De argumenten worden steeds tussen ronde haken geschreven. Enkele van de beschikbare functies zijn: Maple syntax log(x) ln(x) exp(x) log[b](x) log10(x) abs(x) sqrt(x) sin(x) cos(x) tan(x) arcsin(x) arccos(x) arctan(x) n! round(x) max(x,y,z,...) min(x,y,z,...) ifactor(n) BesselJ(n,x)
betekenis ln(x) ln(x) ex logb (x) log10 (x) absolute waarde |x| √ x
n faculteit, n! het geheel getal dat het dichtst bij x ligt maximum van een rij getallen minimum van een rij getallen de priemfactoren van n Bessel functie Jn (x)
> sin(Pi/3);
1√ 3 2
> evalf(BesselJ(0,29/2),20); 0.087544868010376222906 > ifactor(10!); (2)8 (3)4 (5)2 (7)
4.2
Zelf functies defini¨ eren
Men kan ook zelf functies in 1 of meerder variabelen defini¨eren met behulp van het pijltje (->).
7
> cirkeloppervlakte := r -> r^2 * Pi; cirkeloppervlakte := r− > r 2 π > cirkeloppervlakte(10); 100π > f:=(x,y)->sin(x)*sqrt(y) + abs(x)*cos(y); p f := (x, y) → sin(x) (y) + |x| cos(y) > f(1,a);
√ sin(1) a + cos(a)
> f(Pi,Pi/2); 0
Een ander manier om eigen functies te defini¨eren, is ze af te leiden uit uitdrukkingen met unapply. Merk het verschil op tussen uitdrukkingen en functies. > a:=x^7 + x^5 - x^3 + x - 10; a := x7 + x5 − x3 + x − 10 > f:=unapply(a,x); f := x → x7 + x5 − x3 + x − 10 > f(1); −8
5
Bewerkingen op functies
Men kan symbolische uitdrukkingen symbolisch afleiden en integreren. diff(f, x) geeft de parti¨ele afgeleide van de uitdrukking f naar x. diff(f, x$n) geeft de n-de parti¨ele afgeleide naar x. diff(f, x1$n1, x2$n2, ...) geeft een gemengde afgeleide. Wanneer f een functie is (in tegenstelling tot een uitdrukking) in 1 variabelen dan kan in Maple de afgeleide berekend worden met D(f). int(f,x) geeft de onbepaalde integraal van een uitdrukking f m.b.t. x. int(f,x=a..b) geeft Rb de bepaalde integraal a f dx. Als f een functie is, kan je de integraal berekenen met int(f(x),x) of int(f(x),x=a..b) en de afgeleide met diff(f(x),x) of diff(f(x),x=a). Uiteraard is het niet mogelijk om voor alle integralen exacte oplossingen te produceren. Men kan evt. nog overstappen naar numerieke algoritmes.
8
> int(1/(2+cos(x)),x); 2√ 3 arctan 3
1 tan 3
√ 1 x 3 2
> int(x^(-1)*BesselJ(2,sqrt(x)),x=0..infinity); 1
Merk op dat het resultaat van de onbepaalde integraal maar in een beperkt gebied juist is, ook al lijkt alles in orde! Men kan in Maple ook met zelfgedefinieerde functies verder werken zoals met alle andere functies en uitdrukkingen.
> restart; > f:=(x,y)->sin(x)*sqrt(y) + abs(x)*cos(y); p f := (x, y) → sin(x) (y) + |x| cos(y) > f(1,a);
√ sin(1) a + cos(a)
> f(Pi,Pi/2); 0 > diff(f(5,x),x); 1 sin(5) √ − 5 sin(x) 2 x
> D(sin); cos > diff(sin(x),x); cos(x)
Men kan Maple ook eenvoudig limieten laten berekenen: > limit(sin(x^2)/x^2,x=0); 1
Maple rekent ook vlotjes reeksontwikkelingen uit. Men geeft de functie (eventueel een symbolische), het punt waarrond de reeks moet opgesteld worden en het aantal gewenste termen, en het gevraagde wordt prompt geleverd.
9
> restart; > series(x^2*sin(x)^2,x=0,13); 2 1 1 2 1 x 0+ x12 + O(x14 ) x4 − x6 + x8 − 3 45 315 14175 > series((f(x+h)-f(x-h))/(2*h),h=0,4); 1 D(f )(x) + (D(3) )(f )(x)h2 + O(h3 ) 6
6 6.1
Het oplossen van vergelijkingen solve
Maple voorziet functies die (symbolisch of numeriek) trachten alle oplossingen van een (stelsel) algebra¨ısche vergelijking(en) te vinden. Met solve(f,x) kunnen de oplossingen van een vergelijking f in een variabele x symbolisch worden berekend. Het resultaat van solve is een lijst met de oplossingen. De individuele oplossing kunnen uit deze lijst geselecteerd worden door middel van een index tussen vierkante haken. > s:=solve(x^2-2*x-1,x); s := 1 +
√
> s[1]; 1+
2, 1 −
√
√
2
2
Stelsels van vergelijkingen in meerdere variabelen kunnen ook met behulp van solve berekend worden. Hiervoor moeten de vergelijkingen en onbekende in de vorm van een verzameling (i.e. tussen gekrulde haken {,}) worden gegeven. Het resultaat is weer een lijst van alle oplossigen. Met behulp van assign kunnen de waarden van een oplossing worden toegekend aan de variabelen waarin het stelsel was opgesteld. Opgelet! Wanneer men deze variable later terug als onbekende wil gebruiken, moet men met unassign de assign ongedaan maken. > restart; > s:=solve({(x-5)^2+(y-5)^2-25,x-y+1},{x,y}); s := {y = 2, x = 1}, {y = 9, x = 8} > s[1]; {y = 2, x = 1} > assign(s[1]); > x; 1 > unassign(’x’); > x; x
6.2
fsolve
Met fsolve(f,x,opties) kunnen de oplossing van een vergelijking numeriek benarderd worden. Als optie kan bijvoorbeeld een interval gegeven worden waarin een oplossing moet gezocht worden, 10
of kan gespecifieerd worden dat ook naar complexe oplossingen gezocht moet worden. > y:=x^2 + 12*x + 7; y := x2 + 12x + 7 > fsolve(y,x,{x=-1..0}); −.6148351929 > fsolve(sin(x)-x,x,{x=-1..1}); 0 > fsolve(x^3-5*x^2+x-5,x); 5. > fsolve(x^3-5*x^2+x-5,x,complex); −1.I, 1.I, 5.
6.3
dsolve
Ook differentiaalvergelijkingen kunnen soms door Maple analytisch opgelost worden. dsolve(eqn, y(x)) lost een differentiaalvergelijking voor de functie y(x) op voor de onafhankelijke veranderlijke x. Laten we eens zoeken naar een gesloten uitdrukking voor de oplossing van de differentiaalvergelijking y”(x) - ky(x) = 1. > dsolve(diff(f(x),x$2) - k*f(x) = 1, f(x)); f (x) = e
7
√
kx
C1 + e−
√
kx
C2 −
1 k
Matrices
Om met matrices te kunnen werken, moeten we het pakket LinearAlgebra inladen. Elementen uit een matrix kunnen aangesproken worden door de indices tussen vierkante haken te plaatsen. Let ook eens op de alternatieve manier om een matrix in te geven, waarbij de matrix wordt opgebouwd door verschillende kolomvectoren.
11
> with(LinearAlgebra): > a:=Matrix([[1,2],[3,4]]); a :=
1 3
2 4
1 2
3 4
1 2
3 4
1 3
2 4
> a;
> b:=<<1,2>|<3,4>|<5,6>>; b :=
5 6
> b[1..2,1..2];
Uiteraard bevat Maple functies om met matrices te werken: Let goed op de hoofdletters! c*a a.b a^2 MatrixInverse(m) a^(-1) Determinant(m) Transpose(m) Eigenvalues(m) (E,V):=Eigenvectors(a) Rank(a) (P,L,U):=LUDecompose(a)
(Q,R):=QRDecomp(a)
vermenigvuldiging van scalar c met matrix a matrixproduct van matrices a en b a.a matrixinverse MatrixInverse(a) determinant van m transpose van m eigenwaarden van m eigenwaarden (E) en eigenvectoren (V) van a berekent de rang van a berekent de LU van de LU-ontbinding zodat P.L.U=a. dit is niet de decompositie uit de cursus, waar we zochten naar L.U = P.A Het uitvoerargument P is de transpose van de permutatiematrix in hoofdstuk III 3.1. Er wordt ook enkel gepivoteerd als er niet exact wordt gerekend. berekent de QR-ontbinding van a
Veel meer uitleg en voorbeelden, vinden we in de uitgebreide help-functie van Maple. > a.b;
5 11
11 25
17 39
> Determinant(a); −2 Opmerking 1: Maple laadt bij het opstarten niet alle commando’s in. Men kan hem bepaalde modules of bibliotheken laten inlezen met het commando with, waarbij men de naam van de module tussen ronde haakjes opgeeft. Enkele belangrijke modules zijn geometry, LinearAlgebra, numapprox, plots en student. Met ?package krijgt men alle beschikbare modules te zien. Opmerking 2: In vorige Maple versies (lees versie 5 of ouder) was het pakket linalg beschikbaar om met matrices te werken. Dit pakket is echter vrij omslachtig en daarom hebben we gekozen voor het gebruiksvriendelijkere LinearAlgebra. Het pakket linalg wordt trouwens niet meer verder ontwikkeld, maar is nog steeds terug te vinden in de recentste Maple-versie om backwards-compabiliteit te verzekeren. 12
8
Elementaire programma’s schrijven
Men kan in Maple kleine programma’s schrijven. Met for kan men een bewerking in een lus n keer laten uitvoeren. Met while wordt een bewerking herhaald tot dat een voorwaarde voldaan is. En met if ... then ... else kan men een voorwaardelijke evaluatie doen. > a:=Matrix(4,4): > for i from 1 to 4 do for j from 1 by 2 to 8 do a[i,(j+1)/2]:=10-i-j; end do: end do: > a; 8 7 6 5
6 5 4 3
4 3 2 1
2 1 0 −1
> a:=3; b:=5; a := 3 b := 5 > if (a>b) then a else b end if; 5 > i:=1; i := 1 > while (i<1000) do i:=i*2: end do: > i; 1024
9
Grafische mogelijkheden
Maple heeft mooie grafische mogelijkheden, zoals de volgende voorbeelden illustreren.
13
plot([cos(1/x), sin(exp(x))], x=1..3, color=[red,blue]);
1.0
0.5 x 1.0
1.5
2.5
2.0
3.0
0.0
−0.5
−1.0
plot(sin(x)^2+cos(x), x=-10..10); 1.2 1.0 0.8 0.6 0.4 0.2 0.0 −10
−8
−6
−4 x
−2 −0.2
0
−0.4 −0.6 −0.8 −1.0
14
2
4
6
8
10
plot3d(sin(x^2-cos(y)^2), x=-2..2, y=-2..1, axes=boxed, orientation=[-30,50]);
−2 −1
1.0
0 0.5
x 1 2 1
0.0 0
−0.5 −1
y
−2
plot3d(x^2-y^2, x = -5 .. 5, y = -5 .. 5, axes = framed, orientation = ([25, 55]));
20 10 0 −10
−5.0 −2.5
−20 0.0 −5.0
−2.5
0.0 y
2.5 2.5
15
5.0
5.0
x
Door op de figuur te klikken, verschijnt er bovenaan een werkbalk, waarin men verschillende instellingen over de figuur kan veranderen. Dezelfde instellingen verschijnen als men op de rechtermuisknop klikt binnen de figuur. Wat de verschillende instellingen betekenen, kan men eenvoudig leren door ze uit te proberen...
10
Voor meer informatie...
1. Gebruik de help-functies van Maple om meer te weten te komen over bepaalde functies. 2. Men kan voorbeelden vinden door onder Help, Help topics of Topic search te selecteren. Tik vervolgens Examples,index in (zonder spatie). 3. Op http://www.maplesoft.com kan je veel bruikbaar materiaal vinden.
16