Deel II - Wiskunde

Deel II - Wiskunde Deel II - Wiskunde

13.09.2013 Views

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!