Tolk og fiks program som finner bunnpunkt

Tolk og fiks program som finner bunnpunkt

Funksjonen ff er gitt ved

f(x)=2x29x2f(x)=2x^{2}-9x-2

Egil ønsker å lage et program som regner ut koordinatene til bunnpunktet på grafen til ff. Han har skrevet koden nedenfor.

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

def df(x,h):
    return (f(x+h) - f(x))/h

h = 0.001
a = 0

while df(a,h) < 0:
    a = a + 1
    
print("Bunnpunktet er", (a, f(a)))

Programmet gir utskriften Bunnpunktet er (3, -11)

Forklar hvilken strategi Egil har brukt.

Svaret han får, er ikke riktig.

Foreslå en endring i koden som vil gi Egil et riktigere svar.

Fasit

Egil sjekker om grafen synker ved å beregne tilnærmet stigningstall. Løkken stopper ved a=3a = 3, og programmet printer (3,11)(3, -11).

Endre a = a + 1 til a = a + 0.01

Løsningsforslag

Funksjonen df(x, h) beregner et tilnærmet stigningstall (den deriverte) i punktet xx:

df(a,h)=f(a+h)f(a)h\texttt{df}(a, h) = \frac{f(a+h) - f(a)}{h}

Egils strategi er å starte i a=0a = 0 og flytte seg til høyre i steg på 1. Så lenge df(a, h) < 0 synker grafen — man har altså ikke nådd bunnpunktet ennå. Når stigningstallet ikke lenger er negativt (grafen har sluttet å synke), betyr det at bunnpunktet er passert, og løkken stopper.

Det ekte bunnpunktet ligger i x=2,25x = 2{,}25. Siden aa øker fra 0 i heltallssteg, er verdiene som testes a=0,1,2,3a = 0, 1, 2, 3. Ved a=2a = 2 er df(2, 0.001) 429=1<0\approx 4 \cdot 2 - 9 = -1 < 0, så løkken fortsetter. Ved a=3a = 3 er df(3, 0.001) 439=3>0\approx 4 \cdot 3 - 9 = 3 > 0, og betingelsen df(a, h) < 0 er usann — løkken stopper.

Programmet printer derfor (3, f(3))=(3, 11)(3,\ f(3)) = (3,\ -11), selv om det ekte bunnpunktet er (2,25, 12,125)(2{,}25,\ -12{,}125).

Problemet er at steglengden 11 er for stor — programmet «hopper over» bunnpunktet. Ved å bruke et mindre steg vil aa komme mye nærmere x=2,25x = 2{,}25 når løkken stopper.

Endre linje 8 fra

    a = a + 1

til

    a = a + 0.01

Da stopper løkken ved a2,25a \approx 2{,}25 og programmet printer et bunnpunkt som er langt nærmere det ekte svaret (2,25, 12,125)\mathbf{(2{,}25,\ -12{,}125)}.

Sensorveiledning
2 poeng

Kandidaten trenger ikke å forklare hver linje for å få full uttelling. Kandidater som er upresise i forklaringen kan gi 1 poeng.

2 poeng

Forslag til endring i koden uten begrunnelse, kan gi 1 poeng.