Program med linspace som leter etter nullpunkter
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?
1 av 2 deloppgaver kan løses 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 laget programmet nedenfor. Hun har lagt inn kommentarer som viser hva programmet vil gjøre i linje 1, i linje 3 og 4, i linje 6 og 7 og i linje 9.
from numpy import linspace # Henter kommandoen linspace fra biblioteket numpy.
def f(x): # Definerer funksjonen f(x) = x² - 2
return x ** 2 - 2
X = linspace (-2, 2, 400) # Lager en liste med 400 x-verdier jevnt fordelt
# i intervallet [-2, 2].
Y = f(X) # Lager en liste med de 400 tilhørende y-verdiene.
for i in range(0,399):
if Y[i] * Y[i + 1] <= 0:
print("Jeg har funnet et nullpunkt.")
Forklar hva resultatet vil bli når Monica kjører programmet. Begrunn hvorfor resultatet vil bli slik.
Utvid programmet slik at det skriver ut tilnærmede verdier for eventuelle nullpunkter.
Fasit
LøsningsforslagKI-generert
Funksjonen har nullpunkter der , altså for og . Begge disse -verdiene ligger inni intervallet som linspace deler opp.
Listen X består av -verdier jevnt fordelt mellom og , og Y er de tilhørende -verdiene . For løkka som går gjennom nabopunktene, undersøker testen
om og har forskjellig fortegn (produktet av to tall med ulikt fortegn er negativt) eller om et av dem er null. Det betyr at grafen til har krysset -aksen et sted mellom og — altså at det finnes et nullpunkt mellom disse to nabopunktene.
Siden har to nullpunkter i intervallet (ett rundt og ett rundt ), vil testen slå til to ganger når løkka går gjennom alle nabopar. Programmet vil derfor skrive ut
Jeg har funnet et nullpunkt.
Jeg har funnet et nullpunkt.
Kjøring av det originale programmet bekrefter dette:
from numpy import linspace
def f(x):
return x ** 2 - 2
X = linspace(-2, 2, 400)
Y = f(X)
count = 0
for i in range(0, 399):
if Y[i] * Y[i + 1] <= 0:
print("Jeg har funnet et nullpunkt.")
count += 1
Utskrift:
Jeg har funnet et nullpunkt.
Jeg har funnet et nullpunkt.
Meldingen skrives altså ut to ganger, fordi har to nullpunkter i intervallet .
For å skrive ut tilnærmede verdier for nullpunktene, kan vi bruke gjennomsnittet av de to -verdiene og der fortegnsskiftet skjer, som en tilnærming til nullpunktet:
from numpy import linspace
def f(x):
return x ** 2 - 2
X = linspace(-2, 2, 400)
Y = f(X)
for i in range(0, 399):
if Y[i] * Y[i + 1] <= 0:
nullpunkt = (X[i] + X[i + 1]) / 2
print(f"Jeg har funnet et nullpunkt: x = {nullpunkt:.4f}")
Kjøring av programmet gir følgende utskrift:
Jeg har funnet et nullpunkt: x = -1.4135
Jeg har funnet et nullpunkt: x = 1.4135
Dette stemmer godt med de eksakte nullpunktene og — avviket skyldes at linspace bare gir et endelig antall punkter, slik at nullpunktet ligger et sted mellom to nabopunkter og ikke nødvendigvis nøyaktig i et av dem.
Tilnærmede nullpunkter: