Deel II - Wiskunde
Deel II - Wiskunde Deel II - Wiskunde
Hoofdstuk 12 Elementaire commando’s 12.1 Precies rekenen Omdat Maple symbolisch georiënteerd is, probeert het systeem zo veel als mogelijk met preciese uitdrukkingen te werken. Een (bijna vanzelfsprekend) voorbeeld hiervan zijn gehele en rationale getallen, waarbij nooit met een numerieke benadering maar altijd met zoveel cijfers als nodig gewerkt wordt (als ze maar in het geheugen passen). Je krijgt dus (anders als bij een GRM) nooit afrondingsfouten, als je met gehele getallen werkt. Naast gehele getallen zijn er nog een aantal andere datastructuren, waarmee symbolisch gerekend wordt, bijvoorbeeld √ 2. Dit is niet gedefinieerd als de positieve numerieke oplossing van x 2 = 2 maar als een nieuw symbool, waarvoor √ 2 2 = 2 geldt. 12.1.1 Gehele getallen, breuken Het is makkelijk om gehele getallen en breuken te maken en ermee te rekenen, met de operatoren +, -, *, /, ^ die de gebruikelijke betekenis hebben. In plaats van het hoedje ^ kan je ook ** gebruiken, negatieve exponenten moeten tussen haakjes. Je moet überhaupt soms wat meer haakjes zetten dan je zou hopen, vooral omdat je niet altijd weet in welke volgorde Maple operaties uitvoert (maar zie operators[precedence]) voor de regels!), en sommige dingen niet goed gedefinieerd zijn (volgens Maple): > 2^3^4; ‘^‘ unexpected > (3/4)^(-3); 64 -- 27 Rationale getallen maak je dus met /. Teller en noemer (na simplificatie!) vind je terug met numer en denom. Maple rekent met gehele getallen waarvan de lengte alleen begrensd is door de geheugenruimte (en de tijd nodig om ze uit te rekenen). Elke opdracht moet afgesloten worden met ; of met : waarbij het laatste voor (grote) tussenresultaten handig is omdat het de output onderdrukt. Nuttige functies voor gehele getallen zijn iquo, irem waarmee je voor gehele a en b gehele getallen q (quotiënt) en r (rest) vindt zodat a = qb + r, en 0 ≤ |r| < |b|. Ook igcd voor de grootste gemene deler van gehele 47
getallen is handig, evenals de uitgebreide versie igcdex die bij gehele a, b niet alleen de ggd d vindt, maar ook gehele getallen u, v met ua + vb = d. Het commando hiervoor ziet er zo uit: d := igcdex(a, b, ’u’, ’v’); want een functie kan maar een waarde terug geven. Dit wordt in paragraaf 14.2 verder besproken. Gelijkheden en ongelijkheden maak je met =, , >, >=, enzovoorts (voor ‘is gelijk’, ‘is ongelijk’, ‘is groter dan’, en ‘is groter dan of gelijk aan’). Een opdracht mag meerdere regels beslaan; hij wordt pas door een puntkomma (;) afgesloten. Dit kan tot verwarrende foutmeldingen leiden, bijvoorbeeld krijg je > 2*a - 3*b > 2*a - 3*b; syntax error, unexpected number: 2*a - 3*b; ^ omdat de twee eerste regels als 2*a - 3*b 2*a - 3*b; gelezen worden. De xmapleversie is hier iets slimmer: als je in toetst en de puntkomma ontbreekt wordt deze automatisch aangevoegd, maar wel met een waarschuwing. Om een opdracht over twee regels te schrijven sluit je de eerste regel door een backslash (\) af. Er mogen ook meerdere opdrachten op een enkele regel. Als Maple een fout meldt kun je (in xmaple-versie) altijd terug gaan met de muis en verbeteringen aanbrengen. Het is belangrijk om te weten dat = en := in Maple geheel verschillende dingen zijn: met = maak je een vergelijking, bijvoorbeeld met een variabele, die je vervolgens zou kunnen proberen op te lossen. Je kunt van een vergelijking ook nagaan of hij ‘geldt’ (bijvoorbeeld als links en rechts getallen staan) door evalb toe te passen (‘evalueer tot Boolese waarde’, dus waar of onwaar). In tegenstelling hiertoe ken je met := een waarde toe aan een variabele – je geeft als het ware een naam (aan de linkerkant) aan een waarde (aan de rechterkant) zoals bijvoorbeeld in x := 3*2-1;. Daarover meer in 13.1.1. Opgave: Vind de grootste gemene deler d van a = 1234567890 en b = 987654321, alsmede u, v zodat d = ua + vb, en ga na dat de gelijkheid geldt. Commando’s: ; : + - * / ^ = > >= iquo irem igcd igcdex numer denom evalb 12.1.2 Modulo rekenen Met mod kun je rekenen modulo een getal m. Hiervoor zijn er verschillende mogelijkheden: je kunt gewoon a*b mod m in toetsen of modp(e, m) voor een uidrukking e. Als je het resultaat niet tussen 0 en m−1 maar (symmetrisch) tussen −m/2 en m/2 wilt hebben, gebruik je mods in plaats van modp. Bij het berekenen van machten modulo een getal kun je Maple helpen. Met a^n mod m berekent Maple namelijk eerst a n als geheel getal en neemt het resultaat modulo m. Maar als je a&^n mod m in tikt worden ook de tussenresultaten als modulo m gereduceert en heeft Maple dus geen last van grote getallen. 48
- Page 1 and 2: Deel II Maple 40
- Page 3 and 4: 10.2 Wat valt er te leren? Wanneer
- Page 5 and 6: 10.5.1 Voorbeeld In het tentamen Li
- Page 7: 11.2 Menu’s en Eind Onder het Fil
- Page 11 and 12: Opgave: (1) Ga na dat met de oploss
- Page 13 and 14: Hoofdstuk 13 Gevorderde commando’
- Page 15 and 16: d := x^2 + y^2; > subs({x=y, y=z},
- Page 17 and 18: te delen door zulke polynomen, en z
- Page 19 and 20: g := sqrt(x); > f1(y); f2(y); f2 :=
- Page 21 and 22: kun je toch dezelfde mechanismen ge
- Page 23 and 24: Hoofdstuk 14 Programmeren in Maple
- Page 25 and 26: x := 0; > while (x x := (x+1)^2; >
getallen is handig, evenals de uitgebreide versie igcdex die bij gehele a, b niet alleen de ggd d<br />
vindt, maar ook gehele getallen u, v met ua + vb = d. Het commando hiervoor ziet er zo uit:<br />
d := igcdex(a, b, ’u’, ’v’);<br />
want een functie kan maar een waarde terug geven. Dit wordt in paragraaf 14.2 verder<br />
besproken.<br />
Gelijkheden en ongelijkheden maak je met =, , >, >=, enzovoorts (voor ‘is gelijk’, ‘is<br />
ongelijk’, ‘is groter dan’, en ‘is groter dan of gelijk aan’).<br />
Een opdracht mag meerdere regels beslaan; hij wordt pas door een puntkomma (;) afgesloten.<br />
Dit kan tot verwarrende foutmeldingen leiden, bijvoorbeeld krijg je<br />
> 2*a - 3*b<br />
> 2*a - 3*b;<br />
syntax error, unexpected number:<br />
2*a - 3*b;<br />
^<br />
omdat de twee eerste regels als 2*a - 3*b 2*a - 3*b; gelezen worden. De xmapleversie<br />
is hier iets slimmer: als je in toetst en de puntkomma ontbreekt wordt<br />
deze automatisch aangevoegd, maar wel met een waarschuwing. Om een opdracht over<br />
twee regels te schrijven sluit je de eerste regel door een backslash (\) af.<br />
Er mogen ook meerdere opdrachten op een enkele regel. Als Maple een fout meldt kun je<br />
(in xmaple-versie) altijd terug gaan met de muis en verbeteringen aanbrengen.<br />
Het is belangrijk om te weten dat = en := in Maple geheel verschillende dingen zijn: met<br />
= maak je een vergelijking, bijvoorbeeld met een variabele, die je vervolgens zou kunnen<br />
proberen op te lossen. Je kunt van een vergelijking ook nagaan of hij ‘geldt’ (bijvoorbeeld<br />
als links en rechts getallen staan) door evalb toe te passen (‘evalueer tot Boolese waarde’,<br />
dus waar of onwaar). In tegenstelling hiertoe ken je met := een waarde toe aan een<br />
variabele – je geeft als het ware een naam (aan de linkerkant) aan een waarde (aan de<br />
rechterkant) zoals bijvoorbeeld in x := 3*2-1;. Daarover meer in 13.1.1.<br />
Opgave: Vind de grootste gemene deler d van a = 1234567890 en b = 987654321, alsmede<br />
u, v zodat d = ua + vb, en ga na dat de gelijkheid geldt.<br />
Commando’s: ; : + - * / ^ = > >=<br />
iquo irem igcd igcdex numer denom evalb<br />
12.1.2 Modulo rekenen<br />
Met mod kun je rekenen modulo een getal m. Hiervoor zijn er verschillende mogelijkheden: je<br />
kunt gewoon a*b mod m in toetsen of modp(e, m) voor een uidrukking e. Als je het resultaat<br />
niet tussen 0 en m−1 maar (symmetrisch) tussen −m/2 en m/2 wilt hebben, gebruik je mods<br />
in plaats van modp.<br />
Bij het berekenen van machten modulo een getal kun je Maple helpen. Met a^n mod m<br />
berekent Maple namelijk eerst a n als geheel getal en neemt het resultaat modulo m. Maar<br />
als je a&^n mod m in tikt worden ook de tussenresultaten als modulo m gereduceert en<br />
heeft Maple dus geen last van grote getallen.<br />
48