9.4 Numeriske metodar og simulering
Finne nullpunkt ved forteiknsskifte, tilnærme areal med rektangel, løyse likningar ved prøving og simulere utvikling steg for steg.
Når rekning for hand ikkje strekk til
Mange likningar kan ikkje løysast eksakt med metodane vi har, og mange storleikar er for tungvinte å rekne ut for hand. Med eit program kan vi i staden
- prøve oss fram systematisk til vi har eit svar med ønskt nøyaktigheit
- dele eit problem opp i mange små bitar og leggje saman
- simulere ei utvikling steg for steg
Slike metodar blir kalla numeriske metodar. Svaret blir ei tilnærming, og vi må alltid seie kor nøyaktig det er.
Dersom grafen til heng saman på intervallet og og har ulikt forteikn, har minst eitt nullpunkt mellom og .
I eit program sjekkar vi ulikt forteikn med f(a) * f(b) < 0: produktet av eit positivt og eit negativt tal er negativt.
Finn nullpunktet til med to desimalars nøyaktigheit. Bruk at og .
def f(x):
return x ** 3 + x - 3
for i in range(100, 200):
x = i / 100
if f(x) * f(x + 0.01) < 0:
print("Nullpunkt mellom",
x, "og", x + 0.01)Nullpunkt mellom 1.21 og 1.22Vi bruker x = i / 100 i staden for å leggje til 0,01 i kvar runde, slik at avrundingsfeil ikkje hopar seg opp.
Svar: Nullpunktet ligg mellom 1,21 og 1,22.
I halveringsmetoden deler vi intervallet i to i kvar runde og held på den halvdelen der forteiknet skiftar. Kva skriv programmet ut?
def f(x):
return x ** 3 + x - 3
a = 1
b = 2
for runde in range(20):
m = (a + b) / 2
if f(a) * f(m) <= 0:
# nullpunktet er i [a, m]
b = m
else:
# nullpunktet er i [m, b]
a = m
print(a, b)Intervallet startar med lengd 1 og blir halvert 20 gonger.
1.2134113311767578 1.2134122848510742Svar: Nullpunktet ligg i eit intervall med lengd om lag rundt .
Kva skriv programmet ut? Kva kan du seie om nullpunktet til ?
def f(x):
return x ** 2 - 7
print(f(2), f(3))Programmet skriv ut ein verditabell for . Mellom kva for heiltal ligg nullpunkta?
def f(x):
return x ** 2 - 4 * x + 1
for x in range(0, 6):
print(x, f(x))Lag eit program som finn nullpunktet til mellom 2 og 3 med éin desimals nøyaktigheit.
Endre programmet i døme 2 slik at det finn som nullpunktet til mellom 2 og 3. Kor mange desimalar kan du stole på etter 20 rundar?
Areal under ein graf med rektangel
Arealet mellom grafen til og -aksen frå til kan vi tilnærme med rektangel som er like breie:
- breidda er
- rektangel nummer (frå 0) startar i
- høgda er funksjonsverdien i venstre endepunkt
Di fleire rektangel, di nærare kjem summen det eksakte arealet.
Arealet under grafen til frå til skal tilnærmast med rektangel.
a) Rekn ut summen av areala av 6 rektangel med breidd 1.
b) Lag eit program, og finn arealet med 6, 60, 600 og 6000 rektangel.
a) , , , , ,
def f(x):
return (-0.5 * x ** 2
+ 2 * x + 6)
a = 0
b = 6
# talet på rektangel
n = 6
bredde = (b - a) / n
areal = 0
for i in range(n):
# venstre endepunkt
x = a + i * bredde
areal = areal + f(x) * bredde
print(n, areal)6 38.5Svar: Summen av dei 6 rektangla er 38,5.
b)
def f(x):
return (-0.5 * x ** 2
+ 2 * x + 6)
def areal(n):
bredde = 6 / n
s = 0
for i in range(n):
h = f(i * bredde)
s = s + h * bredde
return s
for n in [6, 60, 600, 6000]:
print(n, areal(n))6 38.5
60 36.295
600 36.02995000000001
6000 36.002999500000016Svar: Summane nærmar seg 36 når talet på rektangel aukar. Arealet er om lag 36.
Arealet under grafen til frå til skal tilnærmast med rektangel med høgd i venstre endepunkt.
Rekn ut summen med 4 rektangel for hand.
Lag eit program som reknar ut summen med 4 og med 1000 rektangel.
Endre programmet i førre oppgåve slik at høgda i kvart rektangel er funksjonsverdien i høgre endepunkt. Samanlikn med resultata i førre oppgåve, og forklar skilnaden.
Systematisk prøving
Likningar som kan vi løyse grafisk, i CAS (NLøys(1.05^x = 2)) eller ved systematisk prøving: vi aukar i små steg til venstre side blir minst like stor som høgre side.
Eit beløp veks med 5 % per år. Finn med to desimalar kor mange år det tek før beløpet er dobla, altså løys .
i = 0
while 1.05 ** (i / 100) < 2:
i = i + 1
print(i / 100)14.21Kontroll: og
Svar: . Beløpet er dobla etter om lag 14,2 år.
Lag eit program som løyser likninga ved systematisk prøving med to desimalar.
Simulering steg for steg
Når vi veit korleis ein storleik endrar seg frå eitt år (eller eitt minutt) til det neste, kan programmet rekne ut utviklinga steg for steg. Det blir kalla å simulere utviklinga. Ei while-løkke finn når storleiken passerer ei grense.
Det er 2000 fisk i eit vatn. Kvart år aukar bestanden med 8 %, og så blir 120 fisk fiska. Kor mange år tek det før det er meir enn 3000 fisk?
Bestanden neste år:
bestand = 2000
år = 0
while bestand <= 3000:
bestand = bestand * 1.08 - 120
år = år + 1
print(år, round(bestand))15 3086Svar: Etter 15 år er det meir enn 3000 fisk (om lag 3086).
Verdiane frå eit program kan framstillast grafisk med biblioteket matplotlib. Programmet lagrar - og -verdiane i to lister og teiknar grafen:
import matplotlib.pyplot as plt
def f(x):
return x ** 3 + x - 3
xverdier = []
yverdier = []
for i in range(0, 21):
x = i / 10
xverdier.append(x)
yverdier.append(f(x))
plt.plot(xverdier, yverdier)
plt.grid()
plt.show()Grafen viser at kryssar -aksen litt over , slik vi fann i døme 1.
Endre programmet i døme 5 slik at bestanden startar på 1400 fisk. Finn kor mange år det tek før det er færre enn 1000 fisk.
Oppgåver i eksamensform
Funksjonen er gitt ved . Thea vil finne arealet av området mellom grafen til og -aksen frå til .
Thea deler området i 8 rektangel med breidd 1 og høgd i venstre endepunkt. Rekn ut summen av areala.
Lag eit program Thea kan bruke når ho skal auke talet på rektangel.
Bruk programmet til å finne arealet med 8000 rektangel.
Funksjonen har tre nullpunkt mellom og .
def f(x):
return x ** 3 - 6 * x + 2
for i in range(-300, 300):
x = i / 100
if f(x) * f(x + 0.01) < 0:
print(round(x, 2),
round(x + 0.01, 2))Forklar korleis programmet finn nullpunkta.
Kva skriv programmet ut?
Kvifor bruker programmet round?
Ein kopp kaffi held 90 °C i eit rom der det er 20 °C. Kvart minutt søkk temperaturen med 10 % av skilnaden mellom kaffien og rommet.
Forklar at temperaturen etter eitt minutt er 83 °C.
Lag eit program som finn kor mange heile minutt det tek før kaffien er under 40 °C.
Lag ein tabell over temperaturen kvart minutt dei 12 første minutta, og kontroller svaret i b).
Oppsummering
- Ulikt forteikn: f(a) * f(b) < 0 tyder at eit nullpunkt ligg mellom og .
- Små steg gir eit intervall med nullpunktet; halveringsmetoden halverer intervallet i kvar runde.
- Areal under ein graf: summen av over mange smale rektangel.
- Systematisk prøving løyser likningar som med så mange desimalar vi ønskjer.
- Simulering: rekn ut neste verdi frå den førre i ei løkke, og stopp ved ei grense.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.