De trapeziumregel en de regel van Simpson benaderen de te integreren functue door een veelterm van resp. 1ste en 2de graad. Niets belet om deze werkwijze verder uit te breiden, wat aanleiding geeft tot de zogenaamde formules van Newton-Cotes. In deze opgave bekijken we een kubische benadering, waarbij we dus een 3de graadsveelterm fitten door 4 punten, en de oppervlakte onder de functie benaderen door de oppervlakte onder die veelterm in het interval.
We beschouwen het interval $$[a_i,a_{i+3}]$$ en komen tot de volgende uitdrukking
waarbij $$|a_{i+1}-a_i|=h$$ (alle intervallen zijn dus even groot):
$$\int_{a_i}^{a_{i+3}} f(x) dx \approx \frac{3h}{8}\big[f(a_i)+3f(a_{i+1})+3f(a_{i+2})+f(a_{i+3})\big]$$
Hiermee kunnen we dan $$\int_a^b f(x)dx$$ berekenen, waarbij we het interval $$[a, b]$$ in $$N$$ deelintervallen opdelen, met $$N$$ een geheel drievoud.
Schrijf de methode newton_cotes_3()
met als argumenten:
f
: de te integreren functiea
: ondergrens van het integratie-intervalb
: bovengrens van het integratie-intervalN
: aantal subintervallen (je mag aannemen dat $$N$$ een geheel drievoud is)
Programmeer deze functie ZONDER lusconstructies en probeer zo weinig mogelijk functie-evaluaties (dus oproepen naar $$f(x)$$ vermijden) te gebruiken.
Het verbeterscript maakt gebruik van de functie veelterm()
die een argument lijst $$[a_0, a_1, ..., a_{N-1}]$$ omzet naar de veeltermfunctie
$$a_0 + a_1x+a_2x^2 + ... + a_{N-1}a^{N-1}$$. Deze functie hoef je niet zelf te programmeren.
NOOT: dit numeriek Newton-Cotes integratie schema van orde 3, staat ook bekend als "de tweede regel van Simpson".
v = veelterm([1, 2, 3]) #1 + 2x + 3x*x A = newton_cotes_3(v, 1, 5, 150) #152.0000