Halveringsmetoden med programmering og feilgrense
Lov på eksamen
- Kalkulator
- CAS
- Graftegner og regneark
- Lærebok, formelsamling og egne notater
Ikke åpent internett, kommunikasjon med andre eller kunstig intelligens.
Kan den løses uten PC?
Ingen av deloppgavene kan løses helt uten PC.
Fra 2027 er det bare kalkulator og skriftlige hjelpemidler på del 2. Vurderingen er gjort med KI og kan inneholde feil.
Lest inn av KI og ikke kontrollert manuelt enda — kan inneholde feil.
Monica har skrevet programkoden nedenfor.
def f(x): # Definerer funksjonen f(x) = x^2 - 2
return x ** 2 - 2
a = -2
e = 0.01
while a < 2:
if f(a) * f(a + e) <= 0:
print("Jeg har funnet et nullpunkt.")
a = a + e
Forklar hva resultatet vil bli når Monica kjører programmet. Begrunn hvorfor resultatet vil bli slik.
Utvid programmet, og gjør eventuelle endringer slik at det skriver ut tilnærmede verdier for eventuelle nullpunkter med fire desimalers nøyaktighet.
Fasit
Programmet skriver ut «Jeg har funnet et nullpunkt.» to ganger.
Se kode i løsningsforslaget. Nullpunktene er og .
LøsningsforslagKI-generert
Funksjonen har to nullpunkter, siden gir .
Programmet lar løpe fra til i steg på . For hver verdi av sjekker programmet fortegnet til produktet . Hvis og har motsatt fortegn, er produktet negativt, og det betyr at grafen til krysser -aksen et sted mellom og — altså at intervallet inneholder et nullpunkt.
Siden og , vil nøyaktig ett av intervallene inneholde , og ett annet intervall inneholde , når løper gjennom verdiene . I alle andre intervaller har og samme fortegn, og produktet blir positivt.
Dette betyr at testen blir sann nøyaktig to ganger under kjøringen — én gang nær og én gang nær . Programmet skriver derfor ut
Jeg har funnet et nullpunkt.
to ganger totalt.
For å finne nullpunktene med fire desimalers nøyaktighet, kan vi bruke halveringsmetoden: når vi har funnet et lite intervall som inneholder et nullpunkt, halverer vi intervallet gjentatte ganger og beholder hver gang den halvdelen der fortsatt skifter fortegn, helt til intervallet er smalt nok.
def f(x): # Definerer funksjonen f(x) = x^2 - 2
return x ** 2 - 2
a = -2
e = 0.01
while a < 2:
if f(a) * f(a + e) <= 0:
# Halveringsmetoden: finner nullpunktet mer nøyaktig
# innenfor intervallet [a, a + e]
venstre = a
hoyre = a + e
while hoyre - venstre > 0.0001:
midtpunkt = (venstre + hoyre) / 2
if f(venstre) * f(midtpunkt) <= 0:
hoyre = midtpunkt
else:
venstre = midtpunkt
nullpunkt = (venstre + hoyre) / 2
print(f"Jeg har funnet et nullpunkt: x = {nullpunkt:.4f}")
a = a + e
Den indre while-løkken halverer intervallet helt til bredden er mindre enn , som garanterer fire desimalers nøyaktighet. Midtpunktet av det gjenværende intervallet brukes som tilnærming til nullpunktet.
Kjøres programmet, gir det utskriften
Jeg har funnet et nullpunkt: x = -1.4142
Jeg har funnet et nullpunkt: x = 1.4142
som stemmer godt overens med de eksakte nullpunktene .