📝 Halveringsmethode

De halveringsmethode is een numerieke methode om een nulpunt van een functie te berekenen.

De methode start met een gegeven functie, en twee startwaarden A en B waarvan de ene onder het nulpunt zit en de andere erboven. We laten hier buiten beschouwing hoe je aan deze startwaarden zou moeten komen.

Voorbeeld: de functie $f(x) = x^2-2$ met het nulpunt $\sqrt{2}$ en de startwaarden $A=1$ en $B=2$.

We starten hier met het punt A onder de x-as en het punt B boven de x-as. We berekenen dan het midden van de twee x-coördinaten en duiden het punt M aan op de grafiek.

Aangezien M boven de x-as ligt, wordt M de nieuwe B.

We zien nu dat we opnieuw in dezelfde situatie zitten met twee punten A en B met het nulpunt ertussen, maar de punten A en B liggen nu wel dichter bij elkaar.

Dat betekent dat hoe langer we deze stappen blijven herhalen, hoe dichter we rond het nulpunt zullen zitten.

Deze methode zal echter nooit exact op $\sqrt{2}$ uitkomen. Maar dat is ook niet de bedoeling van een numerieke methode. We zullen na een tijd het resultaat afronden wanneer we een nauwkeurigheid bereiken die hoog genoeg ligt.

Opdracht

Schrijf een programma dat de halveringsmethode kan uitvoeren. Je gebruikt de functie en startwaarden uit het voorbeeld hierboven. Laat de methode 100 keer herhalen.
ℹ️Definiëer een functie f(x) om de functiewaarden uit te rekenen.
ℹ️Definiëer een functie halvering(a,b) die vanuit een gegeven A en B de nieuwe A en B bepaalt en teruggeeft als tuple (A,B).
def f(x):
    ...


def halvering(a,b):
    ...
    return(anieuw,bnieuw)

Je functie werkt als de waarden van a en b steeds dichter bij $\sqrt{2}=1.414213562373095…$ naderen

Test je code ook eens uit op andere functies, nulpunten en startwaarden.

🧩Nauwkeurigheid

In de vorige opdracht heb je de halveringsmethode telkens 100 keer laten herhalen om een nauwkeurig resultaat te bekomen. Maar dit is niet de meest efficiënte manier om dit aan te pakken.

We willen dat de code blijft herhaald worden totdat er een bepaalde nauwkeurigheid wordt bereikt, bijvoorbeeld tot op 0.000001 decimalen. We kunnen hiervoor nagaan hoever het midden $M$ nog in elke stap opschuift van $A$ (of $B$). Indien deze stapjes klein genoeg worden, weten we dat we een bepaalde nauwkeurigheid hebben bereikt.

Opdracht

Pas je code van de halveringsmethode aan zodat de berekeningen stoppen wanneer er een bepaalde nauwkeurigheid $N$ wordt bereikt. Test waarden voor $N$ uit zoals 0.001, 0.0000001, 0.00000000001, ...