De afgeleide in een punt heb je in de lessen wiskunde als volgt gedefinieerd:

Afgeleide in een punt

Indien een functie \(\mathsf{f}\) afleidbaar is in een punt \(\mathsf{a}\), dan wordt de afgeleide in dat punt \(\mathsf{f'(a)}\) gedefinieerd als volgt:

\[\mathsf{f'(a) = \lim_{h\to 0} \dfrac{f(a+h)-f(a)}{h}}\]

Opgave

Schrijf een functie afgeleide(a, f) dat van een functie f de afgeleide in het punt met x-coördinaat a bepaalt.

Een eerste implementatie van het algoritme werkt iteratief en herhaalt de definitie 20 keer. De eerste keer stel je h=1, daarna 0.5, daarna 0.25, enz…

Je geeft de benaderende waarde telkens weer op het scherm, afgerond op 15 cijfers na de komma. Uiteindelijk return je de laatste waarde.

Voorbeeld 1

Stel bijvoorbeeld dat f(x) de volgende functie is:

def f(x):
    return x**3 - 2

Hieronder vind je de grafische uitvoering van het algoritme:

De afgeleide in een punt iteratief benaderen.

De afgeleide in een punt iteratief benaderen.

Het uitvoeren van afgeleide( 1, f ) leidt tot:

In iteratie 1 is de benadering: 7.0
In iteratie 2 is de benadering: 4.75
In iteratie 3 is de benadering: 3.8125
In iteratie 4 is de benadering: 3.390625
In iteratie 5 is de benadering: 3.19140625
In iteratie 6 is de benadering: 3.0947265625
In iteratie 7 is de benadering: 3.047119140625
In iteratie 8 is de benadering: 3.02349853515625
In iteratie 9 is de benadering: 3.011734008789062
In iteratie 10 is de benadering: 3.005863189697266
In iteratie 11 is de benadering: 3.002930641174316
In iteratie 12 is de benadering: 3.001465082168579
In iteratie 13 is de benadering: 3.000732481479645
In iteratie 14 is de benadering: 3.000366225838661
In iteratie 15 is de benadering: 3.00018310919404
In iteratie 16 is de benadering: 3.000091553665698
In iteratie 17 is de benadering: 3.000045776600018
In iteratie 18 is de benadering: 3.000022888241801
In iteratie 19 is de benadering: 3.000011444091797
In iteratie 20 is de benadering: 3.000005722045898

De uiteindelijke return waarde bedraagt:

>>> afgeleide( 1, f )
3.000005722045898

Voorbeeld 2

Stel bijvoorbeeld dat f(x) de volgende functie is:

def f(x):
    return math.sin(x)

Het uitvoeren van afgeleide( 3.141592654, f ) leidt tot:

In iteratie 1 is de benadering: -0.841470984619325
In iteratie 2 is de benadering: -0.958851077107973
In iteratie 3 is de benadering: -0.989615836967082
In iteratie 4 is de benadering: -0.997397867056217
In iteratie 5 is de benadering: -0.999349085465268
In iteratie 6 is de benadering: -0.999837247524025
In iteratie 7 is de benadering: -0.999959310389331
In iteratie 8 is de benadering: -0.9999898275034
In iteratie 9 is de benadering: -0.999997456869629
In iteratie 10 is de benadering: -0.999999364216843
In iteratie 11 is de benadering: -0.999999841054088
In iteratie 12 is de benadering: -0.99999996026347
In iteratie 13 is de benadering: -0.999999990065843
In iteratie 14 is de benadering: -0.999999997516448
In iteratie 15 is de benadering: -0.999999999379106
In iteratie 16 is de benadering: -0.999999999844773
In iteratie 17 is de benadering: -0.999999999961192
In iteratie 18 is de benadering: -0.999999999990297
In iteratie 19 is de benadering: -0.999999999997574
In iteratie 20 is de benadering: -0.999999999999393

De uiteindelijke return waarde bedraagt:

>>> afgeleide( 3.141592654, f )
-0.9999999999993933