Programmering maksimum av funksjon med while-løkke
Lest inn av KI og ikke kontrollert manuelt enda — kan inneholde feil.
En elev har skrevet programkoden nedenfor.
def f(x):
return x/(1+x**2) # Definerer funksjonen f(x)=x/(1+x^2)
x = 0
h = 0.001
while f(x) <= f(x+h):
x = x+h
print(x)
Forklar hva som skjer når programmet kjøres. Hva ønsker eleven å finne ut?
Gjør nødvendige beregninger, og bestem svaret som eleven ønsker å finne.
Fasit
Programmet finner (tilnærmet) x-verdien der har sitt maksimum.
har maksimum i , og
LøsningsforslagKI-generert
Programmet starter med og en liten skrittlengde .
while-løkken sammenligner med : så lenge neste verdi er større enn nåværende verdi (dvs. ), økes med . Løkken fortsetter altså oppover langs grafen så lenge funksjonen stiger.
Når , er vi «over toppen» — neste steg ville gi en lavere funksjonsverdi — og løkken stopper. er da tilnærmet det punktet der har sitt maksimum.
Eleven ønsker å finne x-verdien der har sitt maksimum (og indirekte maksverdien ).
For å finne eksakt maksimum deriverer vi med kvotientregelen:
Vi setter :
Siden er definert for alle reelle og vi søker maksimum for (programmet starter i og øker), er løsningen.
Vi kontrollerer at det er et maksimum: for og for , så gir lokalt (og globalt) maksimum.
Maksimalverdien er:
Programmet vil skrive ut (det numeriske svaret avviker med høyst fra eksakt svar).