Een continue functie $$f(x)$$ die in de punten $$a$$ en $$b$$ een ander teken heeft
(m.a.w. $$f(a) \times f(b) < 0$$) heeft zeker een nulpunt in het interval $$[a, b]$$.
Een methode om dit nulpunt te vinden, wordt hieronder geschetst:
- Bereken het midden van het zoekinterval en noem dit $$c$$
- Indien $$|f(c)|$$ voldoende klein, is het gezochte nulpunt $$c$$, en stop je het algoritme
- Verklein het zoekinterval ($$c$$ is het startpunt of het eindpunt van dit interval) zodat
de functiewaarden in de randpunten een verschillend teken hebben
- Ga naar stap 1.
Schrijf een functie $$\verb!bisectie!$$ met als argumenten:
- de functie waarvan een nulpunt moet gezocht worden
(dit is een functie met 1 reƫel argument)
- het randpunt $$a$$
- het randpunt $$b$$
- naamargument $$\verb!tol!$$ met als defaultwaarde 1E-6. Dit argument geeft aan wanneer
een nulpunt als voldoende nauwkeurig wordt beschouwd
- naamargument $$\verb!maxIter!$$ met als defaultwaarde 10. Dit argument geeft het maximaal
aantal iteraties aan. Is dit maximum bereikt, dan wordt de huidige benadering van het nulpunt
als resultaat teruggegeven. Een iteratie is hierbij elke aanpassing van de variabele $$c$$ uit het
algoritme hierboven geschetst (na stap 1 heb je dus al 1 iteratie achter de rug.)
Je mag hierbij veronderstellen dat $$f(a) \times f(b) < 0$$, $$\verb!tol! > 0$$ en $$maxIter \ge 0$$.
Indien de waarde 0 opgegeven wordt voor het argument $$\verb!maxIter!$$, dan is het aantal iteraties
onbeperkt.
Argumenten
Drie positionele argumenten en twee naamargumenten, zoals hierboven beschreven
Resultaat
Een benadering voor een nulpunt in het interval $$[a, b]$$.
Voorbeeld
bisectie(lambda x:x*x - 4, 0, 10) = 2.001953125
bisectie(lambda x:x*x - 4, 0, 10, tol = 0.1) = 1.9921875
bisectie(lambda x:x*x - 4, 0, 10, maxIter = 5) = 2.1875
bisectie(lambda x:x*x - 4, 0, 10, maxIter = 0) = 1.9999998807907104
bisectie(lambda x:x*x - 4, 0, 10, tol = 1E-12) = 2.001953125
bisectie(lambda x:x*x - 4, 0, 10, tol = 1E-12, maxIter = 0) = 1.9999999999998863