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:

  1. Bereken het midden van het zoekinterval en noem dit $$c$$
  2. Indien $$|f(c)|$$ voldoende klein, is het gezochte nulpunt $$c$$, en stop je het algoritme
  3. Verklein het zoekinterval ($$c$$ is het startpunt of het eindpunt van dit interval) zodat de functiewaarden in de randpunten een verschillend teken hebben
  4. Ga naar stap 1.
Schrijf een functie $$\verb!bisectie!$$ met als argumenten: 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