Schrijf een functie trapezium_adaptief()
met als argumenten
f
: te integreren functie
a
: ondergrens van het integratie-interval
b
: bovengrens van het integratie-interval
h
: startwaarde voor de integratie-stap
tol
: gewenste nauwkeurigheid
max_iter
: maximum aantal iteraties
Omdat het niet zeker is dat we de gewenste nauwkeurigheid ook kunnen bereiken (wegens afrondingsfouten), zorgen we ervoor dat het aantal iteraties beperkt is. Het berekenen van de integraalwaarde met de startwaarde voor $h$ telt hierbij als eerste iteratie.
Het resultaat van de functie is een tuple, bestaande uit
- de integraalwaarde, bepaald via de adaptieve trapeziumregel. Indien het maximum aantal iteraties bereikt wordt, geef je de meest nauwkeurige benadering voor de gezochte integraalwaarde als resultaat.
- het aantal iteraties dat hiervoor nodig was
Het aantal subintervallen voor de eerste iteratie neem je gelijk aan $$N = int(\frac{b-a}{h})$$, met $$h$$ de startwaarde voor de integratiestap.
Probeer je functie efficiƫnt te implementeren (vermijd m.a.w. onnodige herhalingen van berekingen van functiewaarden).
NOOT: Dodona beschikt over de functies veelterm()
en trapezium()
. Als je die dus gebruikt in je functie, hoef
je die NIET mee in te dienen (i.h.b. de functie trapezium()
).
Voorbeeld
v = veelterm([1, 2, 3])
A, it = trapezium_adaptief(v, 1, 5, 1.0, 0.1, 100) #(152.0312, 4)