• No results found

Een verkenning van het gebruik van wiskunde en ICT in de hedendaagse wetenschap.

N/A
N/A
Protected

Academic year: 2021

Share "Een verkenning van het gebruik van wiskunde en ICT in de hedendaagse wetenschap."

Copied!
72
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Onderzoekscompetenties: Wiskunde en moderne technologieën

Een verkenning van het gebruik van wiskunde en ICT in de hedendaagse wetenschap.

Didier Deses

Cahiers T

3

Europe

Vlaanderen nr. 45

(2)
(3)

Onderzoekscompetenties: Wiskunde en moderne technologie¨en

Dr Didier Deses

1

1Leerkracht wiskunde KA Koekelberg, medewerker aan het departement wis- kunde van de VUB, stuurgroep T3-Vlaanderen

(4)

Samenvatting

In dit cahier gaan we een aantal onderwerpen aanraken die geschikt zijn als onderzoekscompetenties wiskunde/wetenschappen in het ASO. Elk hoofd- stuk kan afzonderlijk door ´ee´n leerling of in kleine groepjes doorgenomen worden. De onderwerpen komen uit de kruisbestuiving van wiskunde en technologie. In de eerste twee hoofdstukken wordt nagegaan hoe technologie kan helpen om wiskundige problemen aan te pakken. De volgende hoofd- stukken gaan dieper in op een aantal voorbeelden waarbij de wiskunde de technologie ter hulp snelt.

(5)

Inhoudsopgave

1 Numerieke wiskunde 2

1.1 Benaderen van nulwaarden . . . 2 1.2 Numerieke integratie . . . 9 1.3 Differentiaalvergelijkingen . . . 12

2 Symbolische wiskunde 17

2.1 Veeltermen en hun bewerkingen . . . 17 2.2 Uitwerken en ontbinden in factoren . . . 19 2.3 Afgeleiden en primitieven . . . 24

3 Beveiliging d.m.v. codes 26

3.1 De Caesar-code . . . 26 3.2 De Vigen`ere-code . . . 32 3.3 Foutdetecterende en -verbeterende codes . . . 34

4 Algoritmische planten 39

4.1 Turtle graphics: een eigen programmeertaal maken! . . . 39 4.2 Lindenmayer-systemen . . . 42

A Eventjes leren programmeren 50

B Bespreken van een programma 53

C Oplossingen van de opdrachten 55

(6)

Hoofdstuk 1

Numerieke wiskunde

De wiskunde bevat een aantal problemen waarvan bewezen is dat ze niet op- losbaar zijn, zoals bijvoorbeeld het exact berekenen van een nulwaarde van een veelterm van hoge graad (> 4) of het exact berekenen van oppervlakten onder bepaalde krommen (denk aan de normale verdeling). De numerieke wiskunde biedt een aantal benaderingsmethoden die middels de nodige tech- nologie vaak resulteren in zeer bruikbare benaderingen. We behandelen hier enkele voorbeelden, gebaseerd op de leerstof van het ASO.

1.1 Benaderen van nulwaarden

Het bepalen van de nulwaarden van een functie kan soms zeer moeilijk zijn.

Opdracht 1. Voor veeltermen van de eerste en de tweede graad heb je uitgebreid geleerd om de nulwaarden of een ontbinding te zoeken. Voor veeltermen van hogere graden is dit veel moeilijker. Je hebt zeker voorbeelden gezien waar het ontbinden in factoren en de methode van Horner hulp kunnen bieden. Voor veeltermen van de derde en vierde graad bestaan er formules voor een ”veralgemeende” discriminantmethode. Voor veeltermen van graad vijf of hoger is bewezen dat er geen algemene methode of formule bestaat om deze te ontbinden in factoren! Dit bewijs hebben we te danken aan Niels Henrik Abel. Zoek informatie op over deze wiskundige en over de stelling die hij bewees.

Opdracht 2. Geef een overzicht van de verschillende gevallen voor de nul- waarde van een eerstegraadsfunctie.

Opdracht 3. Geef een overzicht van de verschillende gevallen voor de nul- waarden van een tweedegraadsfunctie.

(7)

Opdracht 4. Geef een overzicht van de verschillende gevallen voor de nul- waarde van een derdegraadsfunctie. (Hint: gebruik de zoektermen cubic function, cubic equation, cubic discriminant.)

Gelukkig bestaan er numerieke methoden die ervoor zorgen dat men nul- waarden kan benaderen. We geven hier drie zulke methoden.

1.1.1 Bisectiemethode

In de les wiskunde heb je zeker gesproken over continu¨ıteit en waarschijnlijk heb je onderstaande stelling gezien.

Stelling 1 (Middelwaardestelling). Zij f : R → R een functie, continu op het interval ]a, b[ en rechtscontinu in a, linkscontinu in b. Indien f (a) < f (b) (resp. f (b) < f (a)) dan bestaat er voor elke c ∈ [f (a), f (b)] (resp. c ∈ [f (b), f (a)]) een x ∈ [a, b] zodat c = f (x).

Opdracht 5. Illustreer de middelwaardestelling aan de hand van een grafiek.

Een uiterst nuttige stelling die onmiddellijk uit de vorige volgt is de volgende:

Stelling 2 (Bolzano). Zij f : R → R een functie, continu op het interval ]a, b[

en rechtscontinu in a, linkscontinu in b. Indien f (a) en f (b) een verschillend teken hebben, dan bezit f een nulwaarde in [a, b].

Opdracht 6. Illustreer deze stelling door middel van een grafiek.

Het nut van deze stelling ligt vooral in haar vele toepassingen. Men kan hiermee gemakkelijk tonen dat elke derdegraadsveelterm (of veelterm van oneven graad) altijd minstens ´e´en nulwaarde heeft, gewoon door twee waarden uit te rekenen.

Opdracht 7. Gebruik de stelling van Bolzano om te bewijzen dat f (x) = x5+ x4+ x3+ 3x2− 2x + 5 een nulwaarde heeft.

Opdracht 8. Gebruik de stelling van Bolzano om te tonen dat elke veelterm van oneven graad tenminste ´e´en nulwaarde bezit.

Een andere toepassing is het numeriek benaderen van nulwaarden door deze stelling iteratief toe te passen. Zij f : R → R een functie, continu op het interval ]a1, b1[ en rechtscontinu in a1, linkscontinu in b1. Stel dat f (a1) en f (b1) een verschillend teken hebben. De functie heeft een nulwaarde x in [a1, b1]. Bepaal nu het midden c1 = a1+b2 1. Als f (c1) = 0 hebben we de nulwaarde gevonden. Indien f (c1) en f (a1) een verschillend teken hebben dan

(8)

stellen we a2 = a1 en b2 = c1 en anders, als f (c1) en f (b1) een verschillend teken hebben, kiezen we a2 = c1 en b2 = b1 (zie figuur). De functie heeft nu een nulwaarde x ∈ [a2, b2] ⊂ [a1, b1]. We berekenen opnieuw het midden c2 = a2+b2 2 en herhalen de procedure. Aldus bekomen we een rij intervallen die steeds de nulwaarde x beter benaderen:

x ∈ . . . ⊂ [a3, b3] ⊂ [a2, b2] ⊂ [a1, b1]

Opdracht 9.

Gebruik de TI-84 Plus Color om aan de hand van2nd [calc][zeros] de nulwaarde(n) te zoeken van x2 en van (x − 1)(x + 1)2. Wat merk je? Leg het verband met de bovenstaande methode.

Deze methode om nulpunten te benaderen (soms ook dichotomie of bi- sectiemethode genoemd) werkt enkel onder voorwaarde dat f van teken ver- andert in het nulpunt. De bisectiemethode kan bovendien op eenvoudige manier geprogrammeerd worden.

Het programma dat we geven gaat ervan uit dat de functie in y1 zit. Er wordt gevraagd naar het interval [a, b] waarin een nulwaarde zit en waarbij y1(a) en y1(b) een verschillend teken hebben. Bovendien wordt ook het aantal

(9)

iteraties n gevraagd. In het programma moeten we ondermeer nagaan of y1(a) en y1(c) een verschillend teken hebben, dit kan het gemakkelijkst door de voorwaarde y1(a) · y1(c) ≤ 0 na te gaan. Afhangend hiervan passen we de grenzen van het interval waarin de nulwaarde zit aan.

Opdracht 10. Bespreek het programma regel per regel of maak een stroom- diagram voor het algoritme van de bisectiemethode. Probeer het geheel zo eenvoudig mogelijk te maken.

Indien de voorwaarden voldaan zijn (en we gaan er vanuit dat dit zo is, om het programma zo eenvoudig mogelijk te houden) zal het programma een betere benadering geven (kleiner interval) dan het interval waarvan men vertrekt. Indien de voorwaarden niet voldaan zijn, zal een foute benadering gegeven worden.

Opdracht 11. Door enkele extra regels toe te voegen kan men een foutief antwoord vervangen door een passende foutmelding, zoals de TI-84 Plus Color dat doet. Werk dit uit.

Opdracht 12. Werk een aantal voorbeelden uit, waarbij je√

2 en de gulden snede benadert.

1.1.2 Regula falsi

De regula falsi methode is in essentie dezelfde als de bisectiemethode. Het enige verschil is de manier waarop de nieuwe grens c1 wordt bepaald. In vele gevallen kan men een betere benadering geven dan het midden ma1b1 = a1+b2 1, door volgende methode. We stellen c1 gelijk aan de nulwaarde van de rechte door (a1, f (a1)) en (b1, f (b1)) (zie figuur).

(10)

We moeten nu echter een formule vinden om de waarde van c1 te bepalen.

Hiervoor vertrekken we van de vergelijking van een rechte door twee punten.

y = y2− y1

x2− x1(x − x1) + y1

Toegepast op de punten (a1, f (a1)) en (b1, f (b1)) geeft dit de vergelijking:

y = f (b1) − f (a1)

b1− a1 (x − a1) + f (a1)

Het vinden van de nulwaarde betekent dus het oplossen naar x van de ver- gelijking:

0 = f (b1) − f (a1)

b1− a1 (x − a1) + f (a1) Dit geeft:

⇐⇒ 0 = f (b1b)−f (a1)

1−a1 x − f (bb1)−f (a1)

1−a1 a1+ f (a1)

⇐⇒ f (b1b)−f (a1)

1−a1 x = f (b1b)−f (a1)

1−a1 a1− f (a1)

⇐⇒ x = f (bb1−a1

1)−f (a1)

f (b

1)−f (a1)

b1−a1 a1− f (a1)

⇐⇒ x = a1f (bb1−a1

1)−f (a1)f (a1)

⇐⇒ x = a1(f (b1)−f (af (b1))−(b1−a1)f (a1)

1)−f (a1)

⇐⇒ x = a1f (bf (b1)−b1f (a1)

1)−f (a1)

(11)

We moeten dus in het algoritme van de bisectiemethode c1 bepalen door:

c1 = a1f (b1) − b1f (a1) f (b1) − f (a1)

Iteratie levert dan opnieuw een rij intervallen die het nulpunt steeds beter benaderen en dit op een manier die in het algemeen betere benaderingen oplevert dan de bisectiemethode.

Opdracht 13. Maak een stroomdiagram voor een programma dat de regula falsi gebruikt.

Opdracht 14. Schrijf een programma dat de regula falsi gebruikt om nul- waarden van een functie te benaderen.

Opdracht 15. Vergelijk de bisectiemethode en de regula falsi. Wat kan je concluderen?

Opdracht 16. Zoek op waarom deze methode de regula falsi heet.

1.1.3 Newton-Raphson

Opdracht 17. Bepaal de vergelijking van de raaklijn aan de kromme y = x2− 2 in het punt a = 1. Maak een tekening. Benader het nulpunt√

2 door de nulwaarde van de raaklijn.

Bovenstaande methode om een nulpunt te benaderen kan door iteratie uitgebreid worden. Beschouw een functie f en een benadering x1 van haar nulwaarde. In x1 is de raaklijn gegeven door

y = f0(x1)(x − x1) + f (x1)

Het snijpunt van de raaklijn met de xs is een oplossing van 0 = f0(x1)(x − x1) + f (x1)

m.a.w.

x = x1− f (x1)

f0(x1) (Reken dit na!)

Dit geeft meestal een betere benadering van de nulwaarde van f x2 = x1− f (x1)

f0(x1)

Opnieuw nemen we nu de raaklijn in x2 en bepalen we haar nulwaarde.

Algemeen geeft

xn+1 = xn− f (xn) f0(xn)

telkens betere benaderingen voor de nulwaarde van f .

(12)

Deze methode wordt de methode van Newton-Raphson genoemd.

Opdracht 18. Pas de methode toe van Newton-Raphson om het voorbeeld verder uit te werken en √

2 nog beter te benaderen door een breuk.

Opdracht 19. Gebruik het commandomath [nDeriv] om de methode van Newton-Raphson te programmeren op de TI-84 Plus Color .

Opdracht 20. Pas de methode toe om√

2 te benaderen aan de hand van de functie y = x2 − 2. Wat merk je als de beginwaarde 0 wordt gekozen? Kan je dit verklaren?

Opdracht 21. Vergelijk de methode van Newton-Raphson met de vorige methoden.

In de Babylonische cultuur (2000 VC) kende men reeds de waarde van√ 2.

Maar hoe rekende men toen zulke wortels uit? Men gebruikte het algoritme dat nu bekend staat onder “guess, divide and average”. Om√

a te benaderen doet men drie stappen:

1. doe eerst een gok naar de waarde van √ a 2. deel n door je gok

3. maak het gemiddelde van 1. en 2.

(13)

De verkregen waarde is een betere benadering van√

a dan de gok waarvan je vertrok. Je kan nu de drie stappen herhalen met deze nieuwe waarde on een nog betere waarde te vinden.

Op de TI-84 Plus Color kan dit snel d.m.v.Ans . Tik eerst je gok in en druk op enter . Daarna geef je (Ans+a/Ans)/2 in (waarbij je de passende waarde voor a invult). Elke keer dat je nu op enter drukt krijg je een betere benadering.

Opdracht 22. Doe dit eens voor √

3 en √

2. Kan je hiermee ook de gulden snede benaderen?

Opdracht 23. Waarom werkt deze methode? √

a is een nulpunt van f (x) = x2− a. Pas nu op f (x) de methode van Newton-Raphson toe en bewijs dat dit het bovenstaande algoritme geeft.

1.2 Numerieke integratie

De oppervlakte onder een kromme y = f (x) op het interval [a, b] wordt gegeven door de bepaalde integraal. Deze wordt gedefinieerd als de limiet van een Riemann-som:

Z b a

f (x) dx = lim

n→+∞

n

X

i=1

f (zi)∆x

Waarbij het interval [a, b] in n gelijke deelintervallen [xi−1, xi] met lengte ∆x wordt verdeeld en waarbij in het ide deelinterval een willekeurig punt zi werd gekozen (i = 1, 2, . . . , n).

(14)

De oppervlakte onder de kromme kan dus benaderd worden door een Riemannsom:

Z b a

f (x) dx ≈

n

X

i=1

f (zi)∆x

Waarbij we een keuze hebben om zi te kiezen binnen het interval [xi−1, xi].

Afhankelijk van de keuze die we nemen, bekomen we verschillende numerieke integratiemethoden.

1.2.1 Ondersom en bovensom

We benaderen nu een integraal als volgt. Het interval [a, b] verdelen we in n kleinere intervallen [xi−1, xi], i = 1, 2, . . . , n telkens met eenzelfde breedte

∆x = h = b−an . De benadering is dan Z b

a

f (x) dx ≈

n

X

i=1

f (zi)h

door zi zo te kiezen dat f (zi) de minimale waarde van f bereikt op [xi−1, xi].

De som zal dus altijd een waarde hebben die kleiner is dan de werkelijke oppervlakte, we noemen dit de ondersom.

Opdracht 24. Maak een passende tekening die de ondersom illustreert.

Volgend programma voert de ondersom-benadering uit.

(15)

Opdracht 25. Bespreek lijn per lijn wat het programma doet of maak een stroomdiagram.

Opdracht 26. Bij de beschrijving van de ondersom staat dat we zi kiezen zodat f (zi) de minimale waarde van f bereikt op [xi−1, xi]. In het programma echter bekijken we enkel min{f (xi−1), f (xi)}. Leg uit waarom dit equivalent is voor grote waarden van n.

Je kan ook de integraal benaderen door Z b

a

f (x) dx ≈

n

X

i=1

f (zi)h

waarbij zi zo wordt gekozen dat f (zi) de maximale waarde van f is op [xi−1, xi]. De som zal dus altijd een waarde hebben die groter is dan de werkelijke oppervlakte, we noemen dit de bovensom.

Opdracht 27. Maak een nieuw programma door het bovenstaande aan te passen om een bovensom uit te rekenen.

Opmerking: Het is niet nodig om alles opnieuw in te geven. Je kan in de programma-editor de recall-functie gebruiken 2nd [rcl] gevolgd door







program [exec] en dan het oorspronkelijke programma. Hierna wordt de

volledige code gekopieerd in het nieuwe programma.

Opdracht 28. Gebruik bovenstaande programma’s om een aantal bepaalde integralen te benaderen door onder- en bovensommen.

1.2.2 Midpuntsregel

Een betere manier van benaderen wordt als volgt gegeven. Het interval verdelen we opnieuw in n kleinere intervallen [xi−1, xi], i = 1, 2, . . . , n met een breedte h = b−an . Deze keer kiezen we zi juist in het midden van het deelinterval te kiezen, d.w.z. zi = xi−12+xi. De Riemann-som wordt dan (ga dit na):

Z b a

f (x) dx '

n

X

i=1

f (xi−1+ xi

2 )h

(16)

Opdracht 29. Maak een passende tekening die de midpuntsregel illustreert.

Opdracht 30. Schrijf een programma om aan de hand van de midpuntsregel een bepaalde integraal te benaderen.

Opdracht 31. Werk een aantal voorbeelden uit en vergelijk met de boven- staande methodes.

1.2.3 Trapeziumregel

Tot nu toe hebben we de oppervlakte altijd benaderd door een onderverdeling aan de hand van rechthoeken. Het is echter goed mogelijk om andere vormen te gebruiken. De meest eenvoudige is het trapezium.

De oppervlakte van ´e´en trapezium wordt gegeven door f (xi−1) + f (xi)

2 h

(Waarom?). We bekomen dus Z b

a

f (x) dx '

n

X

i=1

(f (xi−1) + f (xi))h 2

Opdracht 32. Schrijf een programma om aan de hand van de trapeziumregel een bepaalde integraal te benaderen.

Opdracht 33. Werk een aantal voorbeelden uit en vergelijk met de boven- staande methodes.

1.3 Differentiaalvergelijkingen

Vanaf het ogenblik dat men beschikt over het begrip afgeleiden kan men vol- gend probleem schetsen. Stel dat men van een bepaalde functie y = f (x) informatie heeft over de afgeleide bijvoorbeeld y0 = G(x, y), kan men dan de

(17)

grafiek van f terugvinden? De hierbij vermelde vergelijking is een eenvoudig voorbeeld van een differentiaalvergelijking. Sommige differentiaalvergelijkin- gen kan men oplossen door te integreren, maar lang niet allemaal. Toch kan men op eenvoudige manier de grafiek van f terugvinden, zelfs op een TI-84 Plus Color . Dit steunt op de numerieke integratiemethode van Euler.

Wat eigenlijk gegeven is, is de afgeleide (dus een raakvector) in elk punt van het vlak want y0 = f0(x) = G(x, y). We kunnen dus in elk punt van het vlak een kleine raakvector tekenen. Men bekomt aldus een ”fieldplot”.

Indien we het voorbeeld y0 = x gebruiken, ziet de fieldplot er als volgt uit:

Hoe kunnen we nu hieruit de grafiek van f halen? Stel dat we van een zeker punt (x0, y0) veronderstellen dat het op de kromme y = f (x) ligt. In dit punt kennen we een raakvector (1, y0) = (1, G(x0, y0)). Als we nu een klein stapje (h > 0) zetten in de x-richting en in de y-richting een stapje hG(x0, y0), dan volgen we de raakvector en komen we in een punt (x1, y1) = (x0+h, y0+hG(x0, y0)) terecht dat zeer dicht bij de kromme ligt. In dit nieuwe punt kunnen we opnieuw beginnen en aldus volgen we stapje na stapje de kromme.

Wanneer we al deze punten tekenen, zien we een goede benadering voor de werkelijke kromme y = f (x). Merk op dat we wel een keuze hebben. Het eerste punt kan je vrij kiezen, de kromme die dan berekend wordt, zal altijd een oplossing zijn, we noemen dit eerste punt de beginvoorwaarde. In ons voorbeeld blijkt de oplossing de vorm van een parabool te zijn. In dit geval hadden we de algemene oplossing y = x22+c ook kunnen vinden via integratie.

(18)

We keren nu naar de vraag hoe we dit alles in de TI-84 Plus Color krijgen. Hiervoor moeten we een beetje programmeren. Volgend programma maakt een fieldplot van de differentiaalvergelijking y0 = G(x, y).

• De eerste regel zorgt ervoor dat geen enkele functie uit 





y= getekend

wordt, dit is nodig want we zullen y1 gebruiken om de functie G(x, y) in op te slaan.

• De tweede en de derde regel zorgen voor een standaardvenster zonder assenkruis (anders is het beeld niet meer overzichtelijk).

• We zullen nu het vlak onderverdelen in een raster van punten die in de x- en de y-richting op een afstand H van elkaar liggen. In elk van deze punten zullen we een (genormaliseerde) raakvector van lengte E tekenen.

• Na de definitie van H en E zorgen twee for-lussen ervoor dat elk punt in het raster wordt doorlopen. In elk van deze punten wordt via y1 de functie G(x, y) berekend. De waarde wordt opgeslagen in G.

• Vervolgens tekent men de genormaliseerde raakvector (√ 1

1+G(x,y)2,√G(x,y)

1+G(x,y)2) als een lijntje vanuit (x, y) met lengte E.

• Tenslotte worden beide for-lussen be¨eindigd.

Opdracht 34. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

(19)

We schrijven nu een programma dat de Eulermethode gebruikt om een oplossing te tekenen van de differentiaalvergelijking y0 = G(x, y).

• Eerst wordt er opnieuw voor gezorgd dat de functies uity= niet worden getekend, we zullen immers opnieuw y1 gebruiken om de functie G(x, y) in op te slaan. Het scherm wordt deze keer niet leeggemaakt d.m.v.

[zdecimal] omdat we eventuele output van FPLOT willen blijven zien.

• Daarna gebruiken weprgm [i/o][input] zonder bijkomend argument. De gebruiker krijgt dan het grafisch venster te zien en kan met de pijl- tjestoetsen de cursor bewegen en de gewenste x en y co¨ordinaten kiezen.

• Vanuit het gekozen startpunt, gaan we telkens met een stap H verder, en het programma zal uiteindelijk N punten uitrekenen.

• Hierna wordt de for-lus gestart en wordt via y1 de functie G(x, y) berekend en in de variabele G gestoken.

• Alvorens het volgende punt te berekenen worden de co¨ordinaten ont- houden in A en B, zodat we later vanuit dit punt naar het nieuwe een lijnstukje kunnen tekenen. Dan worden de nieuwe x en y waarden uitgerekend, het volgende punt wordt dus bepaald.

• Uiteindelijk wordt het lijnstukje getekend en sluit de lus zich.

Opdracht 35. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

We hebben dit programma zo geschreven dat we het kunnen laten aan- sluiten op het programma FPLOT. Doe dit door aan FPLOT volgende regels toe te voegen.

(20)

Opdracht 36. Gebruik de bovenstaande programma’s om de differentiaal- vergelijking y0 = −2xy op te lossen, bepaal ook de algemene oplossing. Doe hetzelfde voor y0 = e−x2. Wat is hierbij het probleem? Is dit een probleem voor onze programma’s op de TI-84 Plus Color ?

Opdracht 37. Het algoritme van Euler is niet echt bijzonder goed. Het vertoont zekere onstabiliteiten. Beschouw bijvoorbeeld eens y0 = −2y .

Opdracht 38. Wanneer de x-as de tijd voorstelt, zal een horizontale asymp- toot overeenstemmen met een evenwicht op lange termijn. Beschouw de differentiaalvergelijking y0 = sin 2y. Hoe hangt het evenwicht af van de be- ginwaarde?

(21)

Hoofdstuk 2

Symbolische wiskunde

Binnen de wiskunde worden zeer vaak berekeningen gemaakt met symbolen zoals bijvoorbeeld het uitwerken of ontbinden in factoren van veeltermen.

Sommige berekeningen zijn echter technisch van aard en duren lang. De moderne technologie is in staat om wiskundigen hierbij te helpen. In dit hoofdstuk bekijken we hoe een rekenmachine in staat is om abstracte sym- bolische berekeningen uit te voeren.

2.1 Veeltermen en hun bewerkingen

Opdracht 39. Formuleer de correcte definitie van een veelterm (of poly- noom) van de nde graad. Zoek op wat de verzamelingen R[x], Q[x] zijn.

De essentie van de veelterm

V (x) = anxn+ . . . + a1x + a0 zit vervat in de lijst van de co¨effici¨enten

an, . . . , a1, a0

We kunnen dus een veelterm weergeven aan de hand van een lijst. Dit kunnen we gebruiken om een veelterm in te geven op de TI-84 Plus Color . De veelterm V (x) = x3− x2+ 5x + 2 wordt dan

(22)

Deze vorm van veeltermen gebruiken op een rekentoestel heeft slechts zin indien je er ook bewerkingen mee kan uitvoeren. Lijsten kan je optellen en vermenigvuldigen met een getal. Alsdus kunnen we lineaire combinaties van veeltermen berekenen. We werken volgend voorbeeld uit.

3(x2− 3x + 2) − 2(−x2+ x + 5)

Wanneer veeltermen echter van graad verschillen komen we in de problemen.

Opdracht 40. Werk volgende bewerkingen uit aan de hand van de TI-84 Plus Color .

2(x3− 2x2+ x + 2) + 5(−x2 − 1) Wat merk je? Hoe komt dit?

We kunnen bovenstaand probleem oplossen door termen met co¨effici¨ent 0 toe te voegen tot de graden gelijk zijn. Dit gebeurt door het commando







2nd [list][ops][augment]. Zo wordt

(2x4+ x2+ 1) + (3x2− 2x) als volgt berekend

Opdracht 41. Reken nu opdracht 40 correct uit.

Opdracht 42. Indien L1 een veelterm voorstelt, wat doen dan volgende commando’s?

augment(L1,{0}) augment(L1,{0, 0})

(23)

Naast het optellen en vermenigvuldigen willen we graag een veelterm in een punt evalueren.

Opdracht 43. Bekijk volgend programma en bespreek regel per regel of maak een stroomdiagram. Σ vind je in math [summation]. Let op de volg- orde van de getallen in L1!

Opdracht 44. Wat gebeurt er wanneer we met bovenstaand programma een veelterm in x = 0 trachten uit te rekenen? Hoe komt dit?

Opdracht 45. Pas het programma aan zodat dit probleem opgelost wordt.

Je kan dezelfde techniek gebruiken om de grafiek van een veelterm te maken. Met 2nd [catalog][String>Equ] kan je de formule in Y 1 plaatsen zodat de grafiek gemaakt kan worden. Het berekenen van een functiewaarde vergt met deze methode wel extra tijd, vandaar dat Xres gelijk wordt gesteld aan 2, er zal dan maar om de twee pixels een functiewaarde berekend worden.

2.2 Uitwerken en ontbinden in factoren

Tot nu toe hebben we slechts een lineaire combinatie van polynomen sym- bolisch laten uitrekenen. We kunnen echter ook een product van polynomen laten uitrekenen. Veronderstel dat V1(x) en V2(x) veeltermen zijn en dat V2(x) = anxn+ . . . + a1x + a0. Dan is het product

V3(x) = V2(x) · V1(x) = an· xn· V1(x) + . . . + a1· x · V1(x) + a0· V1(x) De termen xk · V1(x) kunnen zeer snel bekomen worden via augment (zie opdracht 42).

(24)

• Eerst worden de lijsten L1, L2 en L3 leeg gemaakt. Het scherm wordt gewist en de titel afgedrukt.

• L1 wordt gelijkgesteld aan 1, klaar om vermenigvuldigd te worden met een factor.

• Voor het ingeven van de eerste factor wordt een label geplaatst, zodat het programma later naar deze plaats kan terugkeren om een tweede factor op te vragen.

• De berekening van het product an e veelterm in L1 met die in L2 begint door L1te vermenigvuldigen met L2(dim(L2)), dit is het laatste element van L2 (de constante term). We berekenen dus a0 · V1(x). Dit wordt tijdelijk in L3 opgeslagen.

• Nu begint een for-lus die de elementen van L2 in stijgende graad zal afgaan.

• L1 wordt aangepast zodat men achtereenvolgens x · V1(x), x2· V1(x), . . . bekomt in de for-lus.

• De graad van het tussenresultaat L3 wordt aangepast zodat men in de volgende stap dit tussenresultaat en ak· xk· V1(x) kan optellen.

• Na de for-lus staat het resultaat in L3. Dit wordt overgeplaatst naar L1 en afgedrukt.

• Het programma keert terug naar het label om een volgende factor op te vragen.

• Het programma stopt niet vanzelf. Om dit te doen druk je 





on en kies

je [Quit]. Het laatste resultaat steekt in L1, handig om nadien verder mee te werken.

Opdracht 46. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

(25)

Als voorbeeld berekenen we (x − 1)(x + 1)(2x + 3):

Opdracht 47. Gebruik het programma om voorbeelden van de verschillende merkwaardige producten uit te werken. Alsook de som- en productregel voor tweedegraadsveeltermen.

Opdracht 48. Wat wordt er hieronder uitgerekend? Leg het verband met de driehoek van Pascal en het Binomium van Newton. Wat zal de volgende regel zijn?

Opdracht 49. Reken uit en controleer:

(x3− x2+ x − 1)(3x3+ 2x2+ x)

Opdracht 50. Maak een veelterm met een dubbele nulwaarde en twee enkele nulwaarden. Maak tevens de grafiek.

Nu we producten van veeltermen kunnen uitrekenen, richten we ons naar het ontbinden in factoren. De meest gebruikte methode voor veeltermen van hogere graad is de methode van Horner. In onderstaand voorbeeld gebruiken we deze methode om V (x) = x3 − 6x2 + 11x − 6 te ontbinden in V (x) = (x − 2)(x2− 4x + 3).

1 -6 11 -6

2 2 -8 6

1 -4 3 |0 We herhalen kort enkele feiten:

(26)

• De co¨effici¨enten van de gegeven veelterm V (x) komen in de eerste rij te staan.

• Het Hornergetal (hier a = 2) komt helemaal links.

• Na het uitvoeren van de methode van Horner staat helemaal onderaan rechts de waarde van de veelterm in a. Hier is dit V (a) = 0. Dit betekent dat a een nulwaarde is.

• Indien V (a) = 0 dan is V (x) deelbaar door (x − a). De resterende factor (hier x2− 4x + 3) staat dan in de onderste regel.

• Wanneer a een geheel getal is, dan is dit een deler van de constante term uit V (x). Om de gehele Hornergetallen te vinden kan men dus zoeken naar de gehele delers van deze constante term.

Opdracht 51. Maak een overzicht van de verbanden tussen volgende begrip- pen voor veeltermen: ontbinding in factoren, veeltermvergelijking, Horner- getal, nulwaarden.

De methode van Horner leidt tot volgend programma:

• Eerst worden de nodige lijsten gewist. Daarna wordt de veelterm op- gevraagd en in L1 gestoken.

• Indien de graad van de veelterm 1 is, kan er zeker geen ontbinding gevonden worden en stopt het programma.

• De constante term wordt bepaald en een for-lus wordt gestart om de mogelijke Hornergetallen uit te proberen.

• De hoogstegraadsco¨effici¨ent laat men zakken in het Hornerschema en aan de hand van een tweede for-lus wordt het schema verder uitgere- kend. Het resultaat staat in L2.

(27)

• Indien het laatste getal van L2 nul is, weten we dat de factor (x − a) voorkomt in de ontbinding. Deze wordt dan afgedrukt. De laatste rij van het Hornerschema komt nu in L1 (in de juiste volgore van dalende machten). Hierna tracht het programma verder te ontbinden.

• Indien geen deler werd gevonden gaat het programma over naar een volgend Hornergetal.

• Indien tenslotte de for-lus geen verdere delers oplevert, stopt het pro- gramma. In L1 staat de laatst overblijvende factor.

Opdracht 52. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

Het programma kan je nu als volgt gebruiken.

Opdracht 53. Werk een aantal voorbeelden uit, die je eerst met EXPANDP hebt gemaakt.

Opdracht 54. Het programma zoekt de gehele wortels van een veelterm.

Wat als er ook rationale wortels zijn? Beschouw volgende voorbeelden (werk ze ook met de hand uit).

1. 2x3− 2x2− 60x + 144 2. 2x3− 3x2− 29x − 30 3. 6x3+ 19x2+ 19x + 6

Opdracht 55. Indien het programma geen ontbinding vindt, betekent dit niet dat er geen ontbinding bestaat. Het kan ook zijn dat de nulwaarden niet geheel zijn. In het geval van een tweedegraadsveelterm biedt de dis- criminantmethode uitsluitsel. Schrijf een programma dat de ontbinding in factoren bepaalt d.m.v. de discriminantmethode.

(28)

Opdracht 56. Voor veeltermen van de eerste en de tweede graad heb je uitgebreid geleerd om de nulwaarden of een ontbinding te zoeken. Voor veeltermen van hogere graden is dit veel moeilijker. Je hebt zeker voorbeelden gezien waar het ontbinden in factoren en de methode van Horner hulp kunnen bieden. Voor veeltermen van de derde en vierde graad bestaan er formules voor een ”veralgemeende” discriminantmethode. Voor veeltermen van graad vijf of hoger is bewezen dat er geen algemene methode of formule bestaat om deze te ontbinden in factoren! Dit bewijs hebben we te danken aan Niels Henrik Abel. Zoek informatie op over deze wiskundige en over de stelling die hij bewees.

2.3 Afgeleiden en primitieven

Nu we symbolisch veeltermen kunnen uitwerken en ontbinden in factoren (weliswaar in beperkte mate), zullen we trachten om afgeleiden en primitieven te laten uitrekenen.

Opdracht 57. Indien L1 een veelterm voorstelt, wat geeft dan volgend pro- gramma?

Opdracht 58. Schrijf een programma dat een primitieve bepaalt van de veelterm in L1.

Opdracht 59. Beschouw de veelterm S(x) = 1

362880 x9− 1

5040 x7+ 1

120 x5− 1

6 x3+ x 1. Maak de grafiek van S(x) op [−π, π]. Welke functie herken je?

2. Bepaal de afgeleide van S(x) en maak de grafiek ervan. Stemt dit overeen met je antwoord op de vorige vraag? Verklaar.

3. Bepaal een primitieve van S(x) en maak de grafiek ervan. Stemt dit overeen met je antwoord op de eerste vraag? Verklaar.

(29)

4. De stelling van Taylor zegt dat elke functie benaderd kan worden door een veelterm. Zoek deze stelling op en verklaar de notaties voor onder- staande veeltermen.

S(x) =

m

X

k=0

(−1)k x2k+1 (2k + 1)!

C(x) =

m

X

k=0

(−1)k x2k (2k)!

Het zijn trouwens deze twee veeltermen die in rekentoestellen en computers voorgeprogrammeerd zitten i.p.v. de echte goniometrische functies!

(30)

Hoofdstuk 3

Beveiliging d.m.v. codes

In onze huidige technologische maatschappij is het noodzakelijk om informa- tie op vertrouwelijke wijzen door te sturen zonder dat iemand deze informatie kan achterhalen. Bovendien gebeurt het wel eens dat de informatie tijdens de overdracht verstoord wordt. Is het dan nog mogelijk om de exacte oorspron- kelijke informatie terug te vinden? We behandelen hier enkele eenvoudige voorbeelden.

3.1 De Caesar-code

Reeds in de oudheid was het van belang om boodschappen door te sturen zon- der dat de vijand de boodschap kon begrijpen indien deze toch onderschept werd. Julius Caesar maakte veelvuldig gebruik van de naar hem genoemde Caesar-code.

Opdracht 60. Zoek de nodige achtergrondinformatie over Julius Caesar.

Om een bericht te encoderen werd vooraf een sleutel afgesproken tussen Caesar en de bestemmeling. Deze sleutel K was een getal van 1 t.e.m. 25.

Een bericht werd dan opgeschreven, waarna elke letter K plaatsen in het alfabet verschoven werd. Om het bericht te decoderen moest men gewoon elke letter van het alfabet in de andere zin verschuiven.

(31)

Opdracht 61. Om de Caesar-code te gebruiken was het nodig om een tabel te maken met het verschoven alfabet. Indien de afgesproken sleutel K = 7 is, vol dan onderstaande tabel aan.

alfabet A B C D E F G H I J K L M N O P Q R S T U V W X Y Z gecodeerd H . . .

Opdracht 62. Gebruik bovenstaande tabel om volgend bericht te decoderen.

YVVKRHWQL LU KL DVSM.

Telkens er een andere sleutel wordt gebruikt, moet je bovenstaande tabel opnieuw maken. In de 15de eeuw ontwierp de Italiaanse Leone Battista Al- berti een handig toestel om gemakkelijk de Caesar-code te kunnen gebruiken.

Alberti was een typische renaissance-man: hij was schilder, dichter, taalkun- dige, filosoof, cryptograaf, musicus en architect. Zijn toestel noemde hij een formula, het bestond uit twee draaiende schijven.

Opdracht 63. Maak zelf een formula.

1. Knip een schijf van diameter 10cm en eentje van diameter 8cm uit een stuk papier of karton.

2. Beide schijven verdeel je in 26 sectoren.

3. Langs de omtrek zet je in elke sector een letter van het alfabet, op de grootste schijf zet je ook telkens de bijpassend sleutel van 0 t.e.m. 25.

4. Plaats beide schijven op elkaar en maak ze in het midden vast met een plooiduimspijker, zodat beiden kunnen draaien.

Door de ene schijf te draaien t.o.v. de andere kan je telkens een andere Caesar- code bekomen.

(32)

Opdracht 64. Onderstaande tekst werd versleuteld met K = 17. Gebruik je formula om de oorspronkelijke tekst terug te vinden.

FG VVE UVI VVIJKV CVEKVURXVE MFVCUV NFCW UV YFEXVI BERXVE,

Opdracht 65. Nog voor Caesar en lang voor Alberti gebruikten de Sparta- nen reeds een ander hulpmiddel (nml. een skytale) om berichten te encoderen en te decoderen. Zoek op wat een skytale is en hoe het werkt.

Bij de skytale worden de letters van plaats veranderd, het is een per- mutatiecode. Bij de Caesar-code worden de letters echter vervangen door andere, dit is een voorbeeld van een substitutiecode.

Natuurlijk is het encoderen van een hele teksten soms een lange taak.

Tegenwoordig kunnen computers of in dit geval de TI-84 Plus Color hulp bieden. Om de Caesar-code te kunnen implementeren is het nodig om met strings te leren werken. In de informatica is een string een reeks charac- ters, meestal worden deze tussen aanhalingstekens geplaatst. Op de TI-84 Plus Color zijn er tien stringvariabelen die je vindt onder vars [string]. Strings kan je achter elkaar plaatsen d.m.v. de optelling. Wanneer je strings ingeeft, is het handig om 2nd [A-Lock] te gebruiken zodat je meerdere let- ters kunt ingeven.

We zullen twee commando’s zeer vaak gebruiken. Het eerste is [inString], te vinden via 2nd [catalog] bij de letter I (druk  I om in de cataloog onmiddellijk naar deze letter te gaan). Deze geeft weer of een bepaalde string

(33)

te vinden is in een andere. Indien ja, wordt aangegeven op welke plaats de string teruggevonden kan worden. Indien de tweede string niet voorkomt in de eerste zal het resultaat 0 zijn. We zullen dit gebruiken om de positie van een letter in het alfabet te bepalen. We zullen vanaf nu het alfabet onthouden in str0.

Het tweede commando dat we gaan gebruiken is [sub]. Je vindt dit terug via







2nd [catalog] (ga naar de letter T en scroll even terug naar boven). Met

dit commando kan je een deel van een string opvragen. In volgend voorbeeld halen we de 7 letters die volgen op D uit ons alfabet.

We kunnen nu de TI-84 Plus Color gebruiken om de Caesar-code te programmeren. Het programma ziet er als volgt uit.

• We beginnen met het te gebruiken alfabet in te geven in str0. We gaan ervan uit dat de boodschap in str1 zit en vragen de gebruiker om de sleutel K.

• Het resultaat komt tijdelijk in str0. Omdat de lege string niet bestaat op de TI-84 Plus Color beginnen we str2 met het symbool ”>”(te vinden in 2nd [test]). Nadien zullen we dit wegwerken.

(34)

• Met [length] (cfr. cataloog) bepalen we het aantal letters N in het gebruikte alfabet.

• Hierna begint een for-lus.

• Voor elk character in str1 bepalen we de plaats L in het alfabet.

• Indien het character werd gevonden in str0 wordt de nieuwe (geco- deerde) positie L+K. Indien deze nieuwe positie groter is dan de lengte van het alfabet, wordt er N aftgetrokken. We gebruiken hiervoor de verkorte versie if...:... van de if...then...else...end-structuur.

• Indien het character niet voorkomt in het alfabet (bijvoorbeeld een punt of een spatie) dan wordt het gewoon overgenomen.

• Tenslotte wordt de gecodeerde boodschap uit str2 gehaald en in str1 geplaatst, deze keer zonder het beginteken ”>”.

Opdracht 66. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

Indien we ”HELLO WORLD” encoderen door het alfabet ´e´en letter te verschuiven krijgen we:

Opdracht 67. Gebruik het programma om volgende zin te encoderen met sleutel K = 17:

WISKUNDE IS ZEER LEUK

Opdracht 68. Om een Caesar-code te decoderen hoef je geen nieuw pro- gramma te schrijven. Indien het gebruikte alfabet 26 tekens bevat kan je gewoon de nieuwe sleutel K0 = 26 − K gebruiken. Waarom?

Opdracht 69. Volgende bericht werd gecodeerd met het gewone alfabet en K = 19. Gebruik de vorige opgave om het te decoderen.

WNL DEHIMX ABC UBC ZKHHMFHX TTG.

WX TKFX ZKHHMFHX LVAKHD SBVA GTTK PTGM ABC OKTM ATTK HI FXM ANBW XG ATTK.

(35)

Opdracht 70. Doordat de spaties niet veranderen kan je zelfs aan het ge- codeerde bericht zien hoeveel woorde het oorspronkelijk bericht telt. Pas het programma aan zodat ook de spatie wordt gecodeerd. Versleutel dan het bericht ”HELLO WORLD” dmv. K = 12 en K = 21. Wat merk je?

Vanaf nu spreken we af om altijd het gewone alfabet te gebruiken (enkel de letters).

De Caesar-code is een zeer eenvoudige code en is bijgevolg gemakkelijk te kraken. Ten eerste kan men gemakkelijk een statistische analyse van een gecodeerde tekst maken. De meest voorkomende letter in het Nederlands is de ”E”. De meest voorkomende letter in de gecodeerde tekst stemt dus overeen met een ”E”. Hieruit vindt men gemakkelijk de sleutel K. Deze methode werkt zeer goed als de tekst lang is.

Opdracht 71. Breek volgend gecodeerd bericht.

’KX WL’K PZEOFBI PZEXOJFKHBI JLBQ GB XIP TLIC JFKPQBKP KLD BBK QLBQGB!’

Opdracht 72. Natuurlijk kan tegenwoordig ook een computer gebruikt wor- den om de Caesar-code te breken. Ga na hoe volgend programma exact werkt. Maak een stroomdiagram of bespreek regel per regel.

Opdracht 73. Gebruik bovenstaand programma om volgend bericht te kra- ken.

WTTIPFUOJ PBFR FQ LFZB QFSLX

RFFW ’Y PNSI QFHMYYJ JS YWTP NS JJS BNUOJ JJS WJATQAJW ZNY MFFW XQNUOJ

Opmerking: Het is niet nodig om alles opnieuw in te geven. Je kan in de programma-editor de recall-functie gebruiken 2nd [rcl] gevolgd door







program [exec] en dan het oorspronkelijk programma. Hierna wordt de

volledige code gekopieerd in het nieuwe programma.

(36)

3.2 De Vigen` ere-code

Zoals gezien was de Caesar-code ten tijde van de Romeinen misschien goed, maar met de opkomst van statistiek en de computer biedt deze code geen deftige beveiliging meer. In de 16de eeuw maakte Blaise de Vig`ere een nieuwe codeermethode populair: een polyalfabetische substitutiecode. Hij ge- bruikte voor deze code een tabel met alle verschuivingen van het alfabet.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ---

A | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B | B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E | E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F | F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G | G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K | K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L | L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M | M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O | O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P | P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q | Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S | S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U | U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V | V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W | W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X | X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y | Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z | Z A B C D E F G H I J K L M N O P Q R S T U V W X Y De zender en de ontvanger spreken een sleutelwoord af, bijvoorbeeld CIRKEL. De eerste letter van het bericht wordt gecodeerd volgens het al- fabet op lijn C via de Caesar-code. De tweede letter volgens het alfabet op lijn I, enz. . . . Wanneer de L werd gebruikt, begin je opnieuw met de C. We

(37)

maken hier de afspraak dat een spatie of leesteken ervoor zorgt dat een letter van het sleutelwoord wordt overgeslagen.

Opdracht 74. Encodeer met de Vigen`ere-code met seutelwoord CIRKEL de zin ”HELLO WORLD”.

De Vigen`ere-code komt dus tot stand door voor elke letter een andere Caesar-code te gebruiken, gebaseerd op de letters van het sleutelwoord. Dus wordt eenzelfde letter (de L in vorig voorbeeld) telkens door andere letters gecodeerd. Hierdoor wordt een statistische analyse onmogelijk. Men is zeer lang overtuigd geweest dat dit een onbreekbare code was vandaar dat de code de bijnaam ”le chiffre ind´echiffrable” kreeg. Pas in de 19de eeuw ontdekte o.a. Charles Babbage (uitvinder van de eerste mechanische computer) een methode om de code te breken.

Omdat de Vigen`ere-code gebaseerd is op de Caesar-code kunnen we ook deze code programmeren.

Opdracht 75. Leg regel per regel uit wat dit programma juist doet of maak een stroomdiagram. Enkele tips:

• Het sleutelwoord wordt opgevraagd en in str3 opgeslagen.

• T houdt bij met welke letter van het sleutelwoord gecodeerd moet wor- den.

• Na verloop van tijd moet T opnieuw 1 worden als alle letters van het sleutelwoord werden gebruikt.

• De sleutel K van de Caesar-code moet een getal tussen 0 en 25 zijn.

We gebruiken het programma om ons eerste bericht te controleren. Let erop dat je geen aanhalingstekens gebruikt bij het ingeven van het sleutel- woord.

(38)

Opdracht 76. Om de Vigen`ere-code te ontcijferen moet slechts een kleine aanpassing gebeuren aan het programma. Welke? Maak het programma om te ontcijferen (gebruik [rcl] om niet alles opnieuw te moeten ingeven).

Opdracht 77. Volgend bericht werd lijn per lijn gecodeerd met het sleutel- woord WISKUNDE. Ontcijfer het.

AV LYAJ, JWXA. . . LAO VV AZ QYJHIOB!

’PSVFB!’ ZAOJ CI DJYFVMO. ’JCR NA OOF IQBX CUEYPLSAR FKVLTUF ZWV GIYYJDWV!’

Opdracht 78. Als je alle gedecodeerde berichten uit dit hoofdstuk achter elkaar plaatst krijg je een deel van een bekend gedicht. Zoek de auteur en de volledige versie op.

3.3 Foutdetecterende en -verbeterende codes

De bovenstaande codes zijn cryptografische codes. Deze dienen om berichten te beveiligen. Een andere soort codes die voorkomt, zijn de foutdetecterende en -verbeterende codes.

Wanneer een bericht verzonden wordt (bijvoorbeeld een file via het inter- net), zal het vaak gebeuren dat er onderweg fouten optreden. Bij aankomst is het bericht beschadigd. In deze paragraaf zullen we een eenvoudige ma- nier bespreken om het oorspronkelijke bericht toch te kunnen terugvinden, ondanks mogelijke storingen.

Om te zien hoe krachtig de foutverbeterende codes wel kunnen zijn hoef je maar eens te kijken naar een cd. Deze staat vol muziek die probleemloos

(39)

afgespeeld wordt. Als je echter goed naar het cd-oppervlak kijkt, zul je mer- ken dat die vol met krassen staat. Een deel van de informatie is verdwenen, toch kan je cd-speler de fouten verbeteren! Het gaat zelfs zo ver dat je uit een cd een straal kan wegsnijden of met een (dunne) permanente viltstift kan aanduiden, zonder dat de muziek kwaliteit verliest. Probeer maar eens met een oude cd.

Hoe werken zulke foutdetecterende en -verbeterende codes? We geven hier de meest eenvoudige code, de repetitie-code. Veronderstel dat je de letter A wil doorsturen. Indien er storing is, kan het zijn dat je een compleet ander bericht krijgt. Je kan dit schematiseren als volgt.

A −→ storing −→ C

Veronderstel nu dat we i.p.v. A het bericht AA sturen, we gebruiken een 2-repetitie-code. We bekomen dus:

AA −→ storing −→ CA

Wanneer we het bericht CA binnenkrijgen weten we dat er een fout opgetre- den is. De 2-repetitie-code is dus een foutdetecterende code die in staat is om ´e´en fout te detecteren. Het nadeel is dan wel dat je oorspronkelijk bericht dubbel zo lang wordt.

Met een 3-repetitie-code kan je een fout niet alleen detecteren maar ook verbeteren.

AAA −→ storing −→ ACA

Omdat het bericht ACA een meerderheid van letters A heeft, weet je dat het oorspronkelijk bericht een A was. De 3-repetitie-code is een foutverbeterende code die in staat is om ´e´en fout te vebeteren en te detecteren.

Opdracht 79. Wat weet je als de 3-repetitie-code een resultaat CAZ geeft?

Wat kan je concluderen?

Opdracht 80. Op welke beperking stoot je bij de 3-repetitie-code voor vol- gend schema?

AAA −→ storing −→ QAQ

Opdracht 81. Analyseer de 4-repetitie-code. Geef de nodige voorbeelden.

We zullen nu de N -repetitie-code implementeren op de TI-84 Plus Co- lor . Bekijk volgend programma. Elke letter van de string in Str1 wordt N keer herhaald.

(40)

Opdracht 82. Bespreek lijn per lijn bovenstaand programma of maak een stroomdiagram. Geef nog enkele voorbeelden.

Wanneer een bericht wordt verzonden treden er storingen op. Elk teken in het bericht heeft een bepaalde kans P om verstoord te worden.

Opdracht 83. Met math [prb][rand] kan de TI-84 Plus Color een wil- lekeurig getal in [0, 1[ genereren. Met math [prb][randInt] kan een wille- keurig geheel getal gekozen worden en dus ook een willekeurige letter uit het gebruikte alfabet (hier met de spatie). Hiermee kan het programma NOISE (Engels voor storing) de verstoring van een transmissie nabootsen. Bespreek elke regel van dit programma of maak een stroomdiagram.

Opdracht 84. We simuleren nu een storing van 10% op de transmissie.

Ga zelf eens na tot welk percentage storing je kan gaan alvorens de boodschap verloren gaat.

We beschouwen de N -repetitie-code (N = 7):

AAAAAAA −→ storing −→ AABZABA

(41)

Om deze te gebruiken om een bericht terug te vinden moeten we het bericht AABZABA vertalen naar A. Hiervoor moeten we in het bekomen bericht de meest voorkomende letter terugvinden. We zullen eerst het bericht vertalen naar getallen 1, 1, 2, 26, 1, 2, 1 door de positie van elke letter in het alfabet te gebruiken. In de gegevens 1, 1, 2, 26, 1, 2, 1 moeten we nu het meest voor- komende getal terugvinden. Uit de statistiek weten we dat dit de modus is.

Opdracht 85. Ga na hoe onderstaand programma uit de lijst L5 de modus M bepaalt. Leg elke regel uit of maak een stroomdiagram.

Enkele tips:

• De lijst wordt gesorteerd.

• Er wordt via T geteld hoeveel keer een getal voorkomt.

• Indien dit meer voorkomt dan het vorige meest voorkomende getal M (dat S keer voorkwam), dan worden S en M aangepast.

• Buiten de for-lus gebeurt een uiteindelijke controle voor het laatste voorkomend getal.

• Uiteindelijk staat in M het meest voorkomend getal uit de lijst.

We zijn nu in staat om een programma te schrijven dat een N -repetitie- code decodeert.

(42)

Opdracht 86. Bespreek lijn per lijn wat dit programma doet of maak een stroomdiagram.

Opdracht 87. Bekijk volgend voorbeeld en maak er zelf ook een aantal.

Zonder de foutverbeterende code en met dezelfde storingsgraad zou dit kun- nen gebeuren:

(43)

Hoofdstuk 4

Algoritmische planten

In de biologie bestudeert men reeds eeuwen planten. Dankzij de moderne technologie en een beetje wiskunde kan men verschillende plantenfamilies omvormen tot formules. Hiermee kan men op computer en in de cinema nieuwe levensechte planten op het scherm toveren. We geven hier voorbeelden die op de TI-84 Plus Color gemaakt kunnen worden. Hiervoor zullen we een eigen programmeertaal maken.

4.1 Turtle graphics: een eigen programmeer- taal maken!

Vooraleer we zelf planten gaan maken zullen we eerst zelf een kleine pro- grammeertaal ontwikkelen om grafieken mee te maken.

We beschouwen een schildpad in een veld. Het diertje verplaatst zich vooruit over een welbepaalde lengte. Tussen twee verplaatsingen kan ze van richting veranderen, ze kan zich draaien over een bepaalde hoek. Op die manier laat ze een spoor achter.

Je kan de schildpad nu ”programmeren” om een bepaalde tekening te maken door te zeggen wanneer ze vooruit moet en wanneer ze moet draaien en over

(44)

welke hoek. We spreken af dat 0 wil zeggen dat ze 1 m vooruit moet gaan en dat 90 wil zeggen dat ze over 90 graden moet draaien. We kunnen nu een vierkant tekenen door de schildpad volgende opdracht te geven.

0, 90, 0, 90, 0, 90, 0

De afspraken die we hebben gemaakt leggen een eenvoudige programmeertaal vast, het programma om een vierkant te tekenen bestaat uit de bovenstaande opdrachten.

Opdracht 88. Wat is het programma om een gelijkzijdige driehoek te ma- ken? En een rechthoek met lengte 3 m en breedte 2 m?

We gaan onze programmeertaal uitbreiden met twee nieuwe commando’s.

Indien in het programma het getal 1 staat, wordt de huidige positie en rich- ting van de schidpad onthouden. Indien −1 tegengekomen wordt, dan keert de schildpad naar het laatst onthouden punt terug. Merk op dat het hierdoor niet meer mogelijk is om over een hoek van slechts 1 te draaien.

Opdracht 89. Wat doet volgend programma?

0, 90, 0, 1, 90, 0, 90, 0, −1, −90, 0, 90, 0, 90, 0, 90, 0

We zullen deze programmeertaal implementeren op de TI-84 Plus . We gaan ervan uit dat de schildpad altijd in (0, 0) start, met haar neus in de positieve x-richting. De stap die we telkens zetten, zal in de veranderlijke F staan. Het programma is een lijst getallen, we zullen hiervoor de lijst L6

gebruiken, zodat de andere lijsten vrij blijven. De richting waar de schildpad naartoe gaat wordt bijgehouden in de variabele T (de hoek gemeten vanaf de positieve x-as). De positie van de schildpad wordt bijgehouden in (A, B).

Het programma ziet er als volgt uit.

(45)

• Nadat we het scherm hebben leeggemaakt, schakelen we de TI-84 Plus om naar graden.

• De startpositie is de oorsprong en de schildpad is naar de positieve x-as gericht. Het geheugen M van de schildpad staat initieel op 0.

• Nu wordt het schildpad-programma uit lijst L6 gelezen.

• Als in L6 een nul staat, wordt de nieuwe positie berekend d.m.v. de stap F en de hoek T . Er wordt dan een lijnstukje getekend naar deze nieuwe positie.

• Indien 1 wordt gelezen uit L6 zal de huidige positie en hoek in het geheugen geplaatst worden via L3, L4 en L5.

• Indien −1 wordt tegengekomen zal een nieuwe positie uit het geheugen gehaald worden en is dit vanaf nu de huidige positie.

• Als L6 een andere waarde heeft, is dit een hoek en wordt de nieuwe richting in T opgeslagen.

Opdracht 90. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

Als we bovenstaand schildpad-programma willen uitvoeren om een vier- kant te tekenen, steken we het in L6 en leggen de afstand F vast. Daarna roepen we onze programmeertaal op. Je moet natuurlijk wel rekening houden met de grenzen van het grafisch venster.

Opdracht 91. Gebruik je schildpad-programma om een gelijkzijdige drie- hoek en een rechthoek te tekenen.

Opdracht 92. Met welk schildpad-programma kan je een rechthoekige drie- hoek tekenen? Welke stelling(en) heb je hiervoor nodig?

Opdracht 93. Schrijf een schildpad-programma om een mannetje te teke- nen.

(46)

4.2 Lindenmayer-systemen

Aristid Lindenmayer (1925-1989) was een Hongaars bioloog die werkt aan de universiteit van Utrecht. Hij bestudeerde de groeistructuur van planten. Hij ontwikkelde volgende methode om de vertakkingen van een plant te modele- ren. Het onderstaand plantje stelde hij voor door volgende rij symbolen:

L[+L]L[−L]L

De betekenis van deze symbolen legde hij vast als volgt.

• L geeft een takje aan als een recht lijnstuk in een bepaalde richting

• [ geeft het begin van een zijtakje aan

• + geeft een richtingsverandering weer naar links

• − geeft een richtingsverandering weer naar recht

• ] geeft het einde van een zijtakje aan

Opdracht 94. Met welke rij symbolen komt volgende plant overeen?

(47)

Het is tamelijk duidelijk dat een Lindenmayer-beschrijving van een plant omgezet kan worden naar een Turtle-programma:

• L wordt vertaald naar 0, d.w.z. een stap vooruit zetten

• [ en ] komen overeen met 1 en −1, het onthouden en terugkeren naar een voorgaande plaats

• + en − houden draaiingen in, we kunnen bijvoorbeeld kiezen voor +20 en −20.

We merken wel op dat planten in het algemeen verticaal groeien, we moeten ons programma dus starten met de richting van de schildpad te verande- ren (90, . . .). Indien we het eerste takje (L[+L]L[−L]L) van dit hoofdstuk vertalen naar een programma bekomen we

90, 0, 1, 20, 0, −1, 0, 1, −20, 0, −1, 0 We proberen dit uit.

Merk op dat het vaak niet evident is om een correct venster te vinden zodat de grafiek mooi over heel het scherm. Om dit te doen kan je vol- gende stappen gebruiken. Maak eerst de grafiek met zoom [zdecimal] of







zoom [zstandard]. Gebruik daarna zoom [zbox] om de grafiek mooi te centreren. Roep tenslotte het programma opnieuw aan.

(48)

De grote ontdekking van Lindenmayer was dat plantengroei werd beschre- ven door eenvoudige substitutieregels. Een plantje begint te groeien aan de hand van ´e´en scheut. Deze zal dan vertakken in een bepaald patroon. Tijdens de verdere groei zal elke tak opnieuw volgens datzelfde patroon vertakken.

De eerste stap bestaat uit ´e´en enkele tak.

L

De tweede groeistap geeft het groeipatroon. Elk uiteinde van een tak splitst in drie en de plant groeit verder vanuit de middenste tak.

L[+L][−L]L

(49)

Wanneer de plant blijft verdergroeien zullen onderaan kleine nieuwe takjes groeien, terwijl de bestaande takken verder in drie splitsen. De plant wordt nu beschreven door

L[+L][−L][+L[+L][−L]L][−L[+L][−L]]L[+L][−L]L

Lindemayer merkte op dat dit ingewikkeld patroon tot stand kwam door in de vorige stap telkens L te vervangen door het patroon L[+L][−L]L. De plant wordt dus volledig beschreven door

• de startfase: L

• het groeipatroon: L → L[+L][−L]L

Opdracht 95. Teken de plant met startfase L en groeipatroon L → L[+L] − L

Deze substitutiemethode om planten te tekenen kunnen we nu program- meren in de TI-84 Plus Color .

• Eerst wordt het patroon opgeslagen in L1, de startfase komt in L2.

• De schaalfactor H is in dit geval 12, omdat de plant in stappen groeit zullen we deze schaalfactor gebruiken om ervoor te zorgen dat de te- kening niet buiten het scherm komt. Afhankelijk van de plant moet deze factor aangepast worden. Indien de plant na ´e´en stap tweemaal zo groot wordt is de factor 12 .

• De staplengte F is 1. Het beginprogramma voor de schildpad is de startfase en komt in L6.

• Daarna wordt een lus gestart.

• prgmTURTLE wordt aangeroepen om de eerste tekening te maken, met





prgm [io][input] wordt gewacht tot de gebruiker op enter drukt voor de berekening van de volgende stap.

(50)

• Hierna volgt een for-lus, voor elk element uit L2 wordt nagegaan of dit een lijnstukje is (0).

• Als het een lijnstukje is, wordt d.m.v. een andere for-lus het patroon uit L1 naar het nieuwe programma L6 gekopi¨eerd.

• Anders wordt het commando gewoon overgenomen.

• Met K hou je de lengte van het nieuwe programma bij.

• Uiteindelijk staat in L6 het programma voor de volgende stap.

• Omdat dit het begin is van een volgende herhaling maken we een kopie ervan in L2, daarna wordt de nieuwe staplengte gegeven aan de hand van de schaalfactor en wordt de lus gesloten.

• De nieuwe tekening zal gemaakt worden en de volgende zal worden berekend.

• Het programma zal doorlopen tot je het met on onderbreekt of tot het geheugen vol is (lijsten kunnen maar 999 elementen bevatten). Het resultaat na 5 stappen is volgende plant.

Opdracht 96. Maak een stroomdiagram van het programma. Tracht dit zo overzichtelijk mogelijk te doen.

Merk op dat 5 stappen al relatief veel zijn. Meestal zal reeds na drie of vier stappen gestopt moeten worden. Indien je in bovenstaand geval een zesde stap wenst uit te rekenen stoot men op de grenzen van de TI-84 Plus Color .

Referenties

GERELATEERDE DOCUMENTEN

De kinderen leren de naam van de nieuwe categorie en de bijbehorende nieuwe regel, maar ook de eerder geleerde categorieën en regels worden iedere dag herhaald.. Hierdoor zakt

De kinderen leren de naam van de nieuwe categorie en de bijbehorende nieuwe regel, maar ook de eerder geleerde categorieën en regels worden iedere dag herhaald.. Hierdoor zakt

De kinderen leren de naam van de nieuwe categorie en de bijbehorende nieuwe regel, maar ook de eerder geleerde categorieën en regels worden iedere dag herhaald.. Hierdoor zakt

Persoonsvorm in de tegenwoordige tijd altijd stam+t, behalve bij ik en als jij erachter staat en bij de gebiedende wijs.. Verleden tijd van een klankveranderend werkwoord ik loop –

-eren, -enen, -elen Ik hoor twee keer de /u/, maar ik schrijf

JOKE VOOGT - UNIVERSITEIT VAN AMSTERDAM / HOGESCHOOL WINDESHEIM HENK SLIGTE - KOHNSTAMM INSTITUUT. ANTOINE VAN DEN BEEMT - EINDHOVEN SCHOOL OF EDUCATION JOHAN VAN BRAAK -

• Gesubsidieerde arbeid leidt niet tot extra uitstroom naar regulier werk.. • Stigma, onvoldoende extra menselijk kapitaal, verdringing

We gaan nu de printer configureren. 15) Klik op je bureaublad op de snelkoppeling PRINTER_DEEL3.* (snelkoppeling zie figuur 10) 16) Het scherm met de melding “Wilt u toestaan dat