Tilbake
1.5
Numerisk modellering av bevegelse

1.5 Numerisk modellering av bevegelse

Bruk av numeriske metoder (Eulers metode) til å modellere komplekse bevegelser.

45 min
10 oppgaver
Eulers metodeTidsstegNumerisk integreringProgrammering av bevegelseFeilanalyse
Du leser den tradisjonelle versjonen
Din fremgang i kapitlet
0 / 10 oppgaver

Hvorfor trenger vi numeriske metoder?

I de tidligere kapitlene har vi løst bevegelseslikninger analytisk – det vil si at vi har funnet eksakte formler for posisjon og hastighet som funksjon av tid. For eksempel lærte vi at for konstant akselerasjon gjelder:

v(t)=v0+atv(t) = v_0 + at
x(t)=x0+v0t+12at2x(t) = x_0 + v_0 t + \frac{1}{2}at^2

Men i virkeligheten er akselerasjonen sjelden konstant. Tenk på:
- Luftmotstand som øker med hastigheten
- Fjærkrefter som avhenger av posisjon
- Gravitasjon som varierer med avstand
- Magnetiske krefter som avhenger av både posisjon og hastighet

For slike problemer finnes det ofte ingen analytisk løsning. Da bruker vi i stedet numeriske metoder – algoritmer som beregner tilnærmede verdier steg for steg.

Numeriske metoder:
- Deler opp tiden i små intervaller Δt\Delta t
- Beregner posisjon og hastighet trinnvis
- Gir tilnærmede, men ofte svært nøyaktige, løsninger
- Kan implementeres på datamaskiner

Anvendelser:
- Simulering av romfart og satellittbaner
- Værvarsling og klimamodeller
- Dataspill og animasjoner
- Partikkelfysikk og molekylsimuleringer
- Strukturanalyse i ingeniørfag

Numerisk metode
En numerisk metode er en algoritme som finner tilnærmede løsninger på matematiske problemer ved å utføre beregninger i små, diskrete steg.

I stedet for å finne en eksakt formel, beregner vi verdier punkt for punkt:

Ny verdi=Gammel verdi+Endring\text{Ny verdi} = \text{Gammel verdi} + \text{Endring}

Nøkkelbegreper:
- Tidsstepp (Δt\Delta t): Hvor lang tid mellom hver beregning
- Iterasjon: Ett beregningssteg i algoritmen
- Diskretisering: Å dele opp kontinuerlige størrelser i diskrete verdier

Eulers metode – matematisk bakgrunn

Eulers metode (oppkalt etter matematikeren Leonhard Euler, 1707-1783) er den enkleste numeriske metoden for å løse differensiallikninger.

Den deriverte som stigningstall

Husk at den deriverte av en funksjon f(t)f(t) er definert som:

f(t)=limΔt0f(t+Δt)f(t)Δtf'(t) = \lim_{\Delta t \to 0} \frac{f(t + \Delta t) - f(t)}{\Delta t}

Dette er stigningstallet til tangenten ved punktet tt.

Eulers approksimasjon

Hvis vi ikke tar grensen, men bruker en liten, men endelig Δt\Delta t, får vi en tilnærming:

f(t)f(t+Δt)f(t)Δtf'(t) \approx \frac{f(t + \Delta t) - f(t)}{\Delta t}

Ved å løse for f(t+Δt)f(t + \Delta t) får vi Euler-formelen:

f(t+Δt)f(t)+f(t)Δtf(t + \Delta t) \approx f(t) + f'(t) \cdot \Delta t

Geometrisk tolkning

Euler-metoden følger tangentlinjen i hvert punkt. I stedet for å følge den buede kurven eksakt, tar vi et lite skritt langs tangenten. Jo mindre Δt\Delta t, jo bedre følger vi den virkelige kurven.

Viktig innsikt:
Euler-metoden erstatter den buede løsningskurven med en rekke rette linjesegmenter (tangentene). Dette gir en tilnærmet løsning som blir bedre jo mindre tidssteg vi bruker.

Eulers metode (eksplisitt)
Eulers metode oppdaterer verdier trinnvis ved å bruke den nåværende endringsraten:

yn+1=yn+f(tn,yn)Δty_{n+1} = y_n + f(t_n, y_n) \cdot \Delta t

der f(tn,yn)f(t_n, y_n) er den deriverte ved tidspunkt tnt_n.

For bevegelse i én dimensjon:

vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
xn+1=xn+vnΔtx_{n+1} = x_n + v_n \cdot \Delta t

der:
- xnx_n er posisjonen ved tidspunkt tnt_n
- vnv_n er hastigheten ved tidspunkt tnt_n
- ana_n er akselerasjonen ved tidspunkt tnt_n
- Δt\Delta t er tidsssteget

Merk: Vi bruker den gamle hastigheten vnv_n for å oppdatere posisjonen. Dette kalles eksplisitt Euler-metode.

Implementasjon av Eulers metode

Algoritmen steg for steg

1. Sett startverdier: Velg x0x_0, v0v_0, og t0=0t_0 = 0
2. Velg tidsstegg: Bestem Δt\Delta t (mindre = mer nøyaktig, men flere beregninger)
3. Gjenta for hvert tidssteg:
- Beregn akselerasjonen an=Fn/ma_n = F_n / m (fra kreftene)
- Oppdater hastigheten: vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
- Oppdater posisjonen: xn+1=xn+vnΔtx_{n+1} = x_n + v_n \cdot \Delta t
- Oppdater tiden: tn+1=tn+Δtt_{n+1} = t_n + \Delta t
4. Fortsett til ønsket sluttid er nådd

Pseudokode

x = x0          # Startposisjon
v = v0          # Starthastighet
t = 0           # Starttid
dt = 0.01       # Tidsstegg

while t < t_slutt:
    a = F(x, v, t) / m    # Beregn akselerasjon fra krefter
    v = v + a * dt        # Oppdater hastighet
    x = x + v * dt        # Oppdater posisjon
    t = t + dt            # Oppdater tid

Valg av tidsstegg

Tommelregel: Δt\Delta t bør være mye mindre enn den karakteristiske tidsskalaen for systemet.

- Fritt fall (noen sekunder): Δt0.01 s\Delta t \approx 0.01 \text{ s} - 0.1 s0.1 \text{ s}
- Pendel (perioder på 1-2 s): Δt0.001 s\Delta t \approx 0.001 \text{ s} - 0.01 s0.01 \text{ s}
- Raske svingninger: Bruk enda mindre Δt\Delta t

✏️Eksempel 1: Fritt fall med Eulers metode

En ball slippes fra hvile fra en høyde på 20 m. Bruk Eulers metode med tidsstegg Δt=0.5\Delta t = 0.5 s til å finne høyden og hastigheten etter 1.0 s og 2.0 s.

Sammenlign med de analytiske formlene. Bruk g=10g = 10 m/s².

Gitt:
- Starthøyde: y0=20y_0 = 20 m
- Starthastighet: v0=0v_0 = 0 m/s (slippes fra hvile)
- Akselerasjon: a=g=10a = -g = -10 m/s² (negativ fordi nedover)
- Tidsstegg: Δt=0.5\Delta t = 0.5 s

Euler-formler:
vn+1=vn+aΔtv_{n+1} = v_n + a \cdot \Delta t
yn+1=yn+vnΔty_{n+1} = y_n + v_n \cdot \Delta t

Beregning steg for steg:

Steg 0 (t = 0 s):
- y0=20y_0 = 20 m
- v0=0v_0 = 0 m/s

Steg 1 (t = 0.5 s):
- v1=v0+aΔt=0+(10)0.5=5v_1 = v_0 + a \cdot \Delta t = 0 + (-10) \cdot 0.5 = -5 m/s
- y1=y0+v0Δt=20+00.5=20y_1 = y_0 + v_0 \cdot \Delta t = 20 + 0 \cdot 0.5 = 20 m

Steg 2 (t = 1.0 s):
- v2=v1+aΔt=5+(10)0.5=10v_2 = v_1 + a \cdot \Delta t = -5 + (-10) \cdot 0.5 = -10 m/s
- y2=y1+v1Δt=20+(5)0.5=17.5y_2 = y_1 + v_1 \cdot \Delta t = 20 + (-5) \cdot 0.5 = 17.5 m

Steg 3 (t = 1.5 s):
- v3=v2+aΔt=10+(10)0.5=15v_3 = v_2 + a \cdot \Delta t = -10 + (-10) \cdot 0.5 = -15 m/s
- y3=y2+v2Δt=17.5+(10)0.5=12.5y_3 = y_2 + v_2 \cdot \Delta t = 17.5 + (-10) \cdot 0.5 = 12.5 m

Steg 4 (t = 2.0 s):
- v4=v3+aΔt=15+(10)0.5=20v_4 = v_3 + a \cdot \Delta t = -15 + (-10) \cdot 0.5 = -20 m/s
- y4=y3+v3Δt=12.5+(15)0.5=5y_4 = y_3 + v_3 \cdot \Delta t = 12.5 + (-15) \cdot 0.5 = 5 m

Sammenligning med analytisk løsning:

Analytisk: y(t)=y012gt2\displaystyle y(t) = y_0 - \frac{1}{2}gt^2 og v(t)=gtv(t) = -gt

t (s)Euler y (m)Analytisk y (m)Feil (m)Euler v (m/s)Analytisk v (m/s)
1.017.515.02.5-10-10
2.05.00.05.0-20-20

Observasjon: Hastigheten er eksakt, men posisjonen har feil fordi vi bruker den gamle hastigheten i posisjonsoppdateringen. Feilen øker med tid. Med mindre Δt\Delta t ville feilen vært mindre.

Feilkilder og nøyaktighet

Diskretiseringsfeil (avkuttingsfeil)

Den største feilkilden i Euler-metoden er diskretiseringsfeil. Denne oppstår fordi vi erstatter den glatte løsningskurven med rette linjesegmenter.

For Eulers metode gjelder:
- Feilen per steg er proporsjonal med (Δt)2(\Delta t)^2
- Total feil etter mange steg er proporsjonal med Δt\Delta t

Dette betyr at hvis vi halverer tidsstegget, halverer vi den totale feilen. Euler-metoden er derfor en førsteordens metode.

Akkumulering av feil

For hvert steg legges det til en liten feil. Over mange steg kan disse feilene akkumuleres og vokse:
- Feil i posisjon påvirker beregning av krefter
- Feil i hastighet påvirker beregning av posisjon
- Feilene kan forsterke hverandre

Numerisk stabilitet

For noen problemer kan Euler-metoden bli ustabil – feilene vokser eksponentielt. Dette skjer typisk når:
- Tidsstegget er for stort
- Systemet har raske svingninger
- Kreftene er sterkt avhengige av posisjon

Stabilitetsregel: Δt\Delta t må være mye mindre enn systemets karakteristiske tidsperiode.

Forbedrede metoder

Det finnes mange bedre metoder enn enkel Euler:
- Euler-Cromer (symplektisk Euler): Bruker vn+1v_{n+1} i stedet for vnv_n i posisjonsoppdateringen
- Midtpunktmetoden: Bruker hastigheten midt i intervallet
- Runge-Kutta: Mer nøyaktige, men mer komplekse metoder

Euler-Cromer-modifikasjon:
vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
xn+1=xn+vn+1Δt(bruker ny hastighet!)x_{n+1} = x_n + v_{n+1} \cdot \Delta t \quad \text{(bruker ny hastighet!)}

Denne enkle endringen gir mye bedre energibevaring for periodiske systemer.

Euler-Cromer-metoden
Euler-Cromer-metoden (også kalt symplektisk Euler) er en forbedring som bruker den oppdaterte hastigheten i posisjonsberegningen:

vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
xn+1=xn+vn+1Δtx_{n+1} = x_n + v_{n+1} \cdot \Delta t

Fordeler:
- Bevarer energien bedre i oscillerende systemer
- Mer stabil for pendler og fjærer
- Like enkel å implementere som vanlig Euler

Anbefaling: Bruk Euler-Cromer i stedet for vanlig Euler for de fleste fysikkproblemer!

✏️Eksempel 2: Sammenligning av Euler og Euler-Cromer

Bruk begge metodene til å simulere fritt fall fra 20 m med Δt=0.1\Delta t = 0.1 s i 2 sekunder. Sammenlign posisjonene med den analytiske løsningen.

Bruk g=10g = 10 m/s², y0=20y_0 = 20 m, v0=0v_0 = 0.

Euler-metoden (første 1 sekund):

t (s)vnv_n (m/s)yny_n (m)vn+1v_{n+1}yn+1y_{n+1} (Euler)
0.0020-120
0.1-120-219.9
0.2-219.9-319.7
0.3-319.7-419.4
...............
1.0-1015.5-1114.5

Euler-Cromer-metoden (første 1 sekund):
t (s)vnv_n (m/s)yny_n (m)vn+1v_{n+1}yn+1y_{n+1} (E-C)
0.0020-119.9
0.1-119.9-219.7
0.2-219.7-319.4
...............
1.0-1014.5-1113.4

Analytisk løsning ved t = 1 s:
y(1)=20121012=15.0 my(1) = 20 - \frac{1}{2} \cdot 10 \cdot 1^2 = 15.0 \text{ m}
Sammenligning ved t = 1 s:
- Euler: y=15.5y = 15.5 m, feil = +0.5 m (for høyt)
- Euler-Cromer: y=14.5y = 14.5 m, feil = -0.5 m (for lavt)

- Analytisk: y=15.0y = 15.0 m

Ved t = 2 s:
- Analytisk: y=0y = 0 m
- Euler: y=2.0y = 2.0 m (for høyt)
- Euler-Cromer: y=2.0y = -2.0 m (for lavt)
Konklusjon: Begge metodene har feil, men de ligger på hver sin side av den riktige verdien. Euler gir systematisk for høye posisjoner (fordi vi bruker for lav hastighet), mens Euler-Cromer gir for lave posisjoner.

Python-eksempel: Fritt fall

Her er et komplett Python-program som simulerer fritt fall med Euler-Cromer-metoden:

# Fritt fall med Euler-Cromer-metoden
import matplotlib.pyplot as plt

# Fysiske konstanter
g = 9.81  # Tyngdeakselerasjon (m/s^2)

# Startverdier
y = 100   # Starthøyde (m)
v = 0     # Starthastighet (m/s)
t = 0     # Starttid (s)

# Numeriske parametere
dt = 0.01  # Tidsstegg (s)
t_slutt = 5  # Sluttid (s)

# Lister for å lagre resultater
t_liste = [t]
y_liste = [y]
v_liste = [v]

# Hovedløkke - Euler-Cromer
while t < t_slutt and y > 0:  # Stopp når ballen treffer bakken
    # Akselerasjon (konstant for fritt fall)
    a = -g

    # Oppdater hastighet først
    v = v + a * dt

    # Deretter posisjon (med ny hastighet - Euler-Cromer)
    y = y + v * dt

    # Oppdater tid
    t = t + dt

    # Lagre verdier
    t_liste.append(t)
    y_liste.append(y)
    v_liste.append(v)

# Plot resultatene
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))

ax1.plot(t_liste, y_liste, 'b-', label='Numerisk')
ax1.set_xlabel('Tid (s)')
ax1.set_ylabel('Høyde (m)')
ax1.set_title('Fritt fall - Posisjon')
ax1.grid(True)
ax1.legend()

ax2.plot(t_liste, v_liste, 'r-', label='Numerisk')
ax2.set_xlabel('Tid (s)')
ax2.set_ylabel('Hastighet (m/s)')
ax2.set_title('Fritt fall - Hastighet')
ax2.grid(True)
ax2.legend()

plt.tight_layout()
plt.show()

# Skriv ut sluttresultat
print(f"Ballen traff bakken etter {t:.2f} sekunder")
print(f"Sluthastighet: {v:.2f} m/s")

Forventet resultat:
- Ballen treffer bakken etter ca. 4.52 sekunder
- Sluthastighet: ca. -44.3 m/s

Analytisk kontroll:
t=2hg=21009.81=4.52 st = \sqrt{\frac{2h}{g}} = \sqrt{\frac{2 \cdot 100}{9.81}} = 4.52 \text{ s}
v=gt=9.814.52=44.3 m/sv = gt = 9.81 \cdot 4.52 = 44.3 \text{ m/s}

✏️Eksempel 3: Fall med luftmotstand

En fallskjermhopper (masse 80 kg) hopper fra et fly. Luftmotstanden er gitt ved FL=bv2F_L = -bv^2, der b=0.25b = 0.25 kg/m.

a) Sett opp bevegelseslikningen.
b) Finn terminalhastigheten analytisk.
c) Forklar hvorfor dette problemet egner seg for numerisk løsning.

a) Bevegelseslikning:

Krefter på hopperen (positiv retning nedover):
- Tyngde: Fg=mgF_g = mg (nedover)
- Luftmotstand: FL=bvvF_L = -bv|v| (motsatt bevegelsesretningen)

Siden hopperen faller nedover (v>0v > 0), blir:
Fnetto=mgbv2F_{\text{netto}} = mg - bv^2

Newtons 2. lov:
ma=mgbv2ma = mg - bv^2
a=gbmv2a = g - \frac{b}{m}v^2

b) Terminalhastighet:

Ved terminalhastighet er a=0a = 0:
0=gbmvt20 = g - \frac{b}{m}v_t^2
vt2=mgbv_t^2 = \frac{mg}{b}
vt=mgb=809.810.25=3139=56.0 m/sv_t = \sqrt{\frac{mg}{b}} = \sqrt{\frac{80 \cdot 9.81}{0.25}} = \sqrt{3139} = 56.0 \text{ m/s}

Dette tilsvarer ca. 200 km/t.

c) Hvorfor numerisk løsning?

Bevegelseslikningen dvdt=gbmv2\displaystyle \frac{dv}{dt} = g - \frac{b}{m}v^2 er en ikke-lineær differensialligning fordi akselerasjonen avhenger av v2v^2.

Selv om denne likningen faktisk kan løses analytisk (med hyperbolske funksjoner), er løsningen komplisert:
v(t)=vttanh(gtvt)v(t) = v_t \tanh\left(\frac{gt}{v_t}\right)

Med numeriske metoder kan vi enkelt:
- Løse likningen uten å kjenne den analytiske løsningen
- Legge til mer realistiske modeller (f.eks. bb som avhenger av høyde)
- Simulere åpning av fallskjerm (brå endring i bb)
- Inkludere vind og andre effekter

Python-eksempel: Fall med luftmotstand

# Fall med luftmotstand - kvadratisk drag
import matplotlib.pyplot as plt
import numpy as np

# Fysiske parametere
g = 9.81      # Tyngdeakselerasjon (m/s^2)
m = 80        # Masse (kg)
b = 0.25      # Luftmotstandskoeffisient (kg/m)

# Terminalhastighet (for sammenligning)
v_terminal = np.sqrt(m * g / b)
print(f"Terminalhastighet: {v_terminal:.1f} m/s")

# Startverdier
y = 4000  # Starthøyde (m)
v = 0     # Starthastighet (m/s)
t = 0     # Starttid (s)

# Numeriske parametere
dt = 0.01     # Tidsstegg (s)
t_slutt = 60  # Sluttid (s)

# Lister for resultater
t_liste = [t]
y_liste = [y]
v_liste = [v]

# Hovedløkke - Euler-Cromer
while t < t_slutt and y > 0:
    # Akselerasjon med luftmotstand
    # F = mg - b*v^2 (positiv v betyr nedover)
    a = g - (b/m) * v * abs(v)

    # Euler-Cromer oppdatering
    v = v + a * dt
    y = y - v * dt  # Minus fordi y er høyde, v er positiv nedover
    t = t + dt

    # Lagre
    t_liste.append(t)
    y_liste.append(y)
    v_liste.append(v)

# Analytisk løsning for hastighet
t_analytisk = np.linspace(0, max(t_liste), 100)
v_analytisk = v_terminal * np.tanh(g * t_analytisk / v_terminal)

# Plot
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))

ax1.plot(t_liste, y_liste, 'b-')
ax1.set_xlabel('Tid (s)')
ax1.set_ylabel('Høyde (m)')
ax1.set_title('Fall med luftmotstand - Posisjon')
ax1.grid(True)

ax2.plot(t_liste, v_liste, 'b-', label='Numerisk')
ax2.plot(t_analytisk, v_analytisk, 'r--', label='Analytisk')
ax2.axhline(y=v_terminal, color='g', linestyle=':',
            label=f'Terminal: {v_terminal:.1f} m/s')
ax2.set_xlabel('Tid (s)')
ax2.set_ylabel('Hastighet (m/s)')
ax2.set_title('Fall med luftmotstand - Hastighet')
ax2.legend()
ax2.grid(True)

plt.tight_layout()
plt.show()

Viktige observasjoner:
1. Hastigheten øker raskt i starten
2. Økningen avtar når luftmotstanden blir betydelig
3. Hastigheten nærmer seg terminalhastigheten asymptotisk
4. Den numeriske løsningen matcher den analytiske svært godt

Python-eksempel: Matematisk pendel

For en pendel med lengde LL og utslag θ\theta er akselerasjonen:
α=gLsinθ\alpha = -\frac{g}{L}\sin\theta

For små vinkler (θ<15°\theta < 15°) kan vi bruke sinθθ\sin\theta \approx \theta og få en analytisk løsning. Men for store vinkler må vi løse numerisk.

# Matematisk pendel - numerisk løsning
import matplotlib.pyplot as plt
import numpy as np

# Fysiske parametere
g = 9.81   # Tyngdeakselerasjon (m/s^2)
L = 1.0    # Pendellengde (m)

# Startverdier
theta = np.radians(45)  # Startvinkel (45 grader)
omega = 0               # Startvinkelhastighet (rad/s)
t = 0

# Numeriske parametere
dt = 0.001    # Tidsstegg (s) - må være lite for pendel!
t_slutt = 10  # Sluttid (s)

# Lister for resultater
t_liste = [t]
theta_liste = [theta]
omega_liste = [omega]

# Beregn total mekanisk energi (for å sjekke bevaring)
def energi(theta, omega):
    E_kin = 0.5 * L**2 * omega**2  # Kinetisk (per masse)
    E_pot = g * L * (1 - np.cos(theta))  # Potensiell (per masse)
    return E_kin + E_pot

E0 = energi(theta, omega)
E_liste = [E0]

# Hovedløkke - Euler-Cromer
while t < t_slutt:
    # Vinkelakselerasjon
    alpha = -(g/L) * np.sin(theta)

    # Euler-Cromer
    omega = omega + alpha * dt
    theta = theta + omega * dt
    t = t + dt

    # Lagre
    t_liste.append(t)
    theta_liste.append(theta)
    omega_liste.append(omega)
    E_liste.append(energi(theta, omega))

# Plot
fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 10))

ax1.plot(t_liste, np.degrees(theta_liste))
ax1.set_xlabel('Tid (s)')
ax1.set_ylabel('Vinkel (grader)')
ax1.set_title('Pendel - Vinkelutslag')
ax1.grid(True)

ax2.plot(t_liste, omega_liste)
ax2.set_xlabel('Tid (s)')
ax2.set_ylabel('Vinkelhastighet (rad/s)')
ax2.set_title('Pendel - Vinkelhastighet')
ax2.grid(True)

# Energibevaring
ax3.plot(t_liste, np.array(E_liste)/E0)
ax3.set_xlabel('Tid (s)')
ax3.set_ylabel('E/E0')
ax3.set_title('Energibevaring (bør være 1.0)')
ax3.set_ylim(0.99, 1.01)
ax3.grid(True)

plt.tight_layout()
plt.show()

# Beregn periode
perioder = []
forrige_null = None
for i in range(1, len(theta_liste)):
    if theta_liste[i-1] > 0 and theta_liste[i] <= 0:
        if forrige_null is not None:
            perioder.append(t_liste[i] - forrige_null)
        forrige_null = t_liste[i]

if perioder:
    print(f"Målt periode: {np.mean(perioder):.3f} s")
    print(f"Liten-vinkel-formel: {2*np.pi*np.sqrt(L/g):.3f} s")

Viktige observasjoner:
1. Euler-Cromer bevarer energien godt (viktig for oscillerende systemer!)
2. For store vinkler er perioden litt lengre enn liten-vinkel-formelen gir
3. Vanlig Euler-metode ville gitt økende energi over tid (ustabilt)

Anvendelser av numerisk modellering

1. Skrått kast med luftmotstand

Uten luftmotstand har vi den kjente parabelbanen. Med luftmotstand:
- Banen blir asymmetrisk (brattere nedstigning)
- Rekkevidden reduseres betydelig
- Optimal kastevinkel er under 45°

2. Fallskjermhopping

Simulering med varierende luftmotstandskoeffisient:
- Fritt fall: lav bb, hastighet ca. 200 km/t
- Fallskjerm utløst: høy bb, hastighet ca. 20 km/t
- Brå endring i bb gir rask oppbremsing

3. Planetbaner

For elliptiske baner der gravitasjonen varierer med avstand:
F=GMmr2F = -\frac{GMm}{r^2}

Må løses numerisk fordi akselerasjonen avhenger av posisjon.

4. Bilkjøring og bremsing

- Bremskraft avhengig av hastighet (ABS-bremser)
- Friksjon som varierer med underlaget
- Luftmotstand ved høye hastigheter

5. Sportsanalyse

- Golfball med spin (Magnus-effekt)
- Fotball som svinger i lufta
- Skihopperes luftmotstand og oppdrift

6. Værmodellering

- Atmosfæriske bevegelser
- Havsirkulasjon
- Klimaendringer over tid

📝Oppgave 1.1

Hva er hovedfordelen med numeriske metoder sammenlignet med analytiske løsninger?

📝Oppgave 1.2

I Euler-metoden, hva skjer hvis vi gjør tidsstegget Δt\Delta t mindre?

📝Oppgave 1.3

En ball faller fra hvile (v0=0v_0 = 0) fra høyden y0=10y_0 = 10 m.

Bruk Euler-metoden med Δt=0.5\Delta t = 0.5 s og g=10g = 10 m/s² til å finne posisjonen og hastigheten ved t=0.5t = 0.5 s.

📝Oppgave 1.4

Fortsett fra oppgave 1.3. Bruk Euler-metoden til å finne posisjonen og hastigheten ved t=1.0t = 1.0 s og t=1.5t = 1.5 s.

Sammenlign med de analytiske formlene y(t)=y012gt2\displaystyle y(t) = y_0 - \frac{1}{2}gt^2 og v(t)=gtv(t) = -gt.

📝Oppgave 1.5

Bruk Euler-Cromer-metoden på samme problem som i oppgave 1.3 og 1.4.

Start med y0=10y_0 = 10 m, v0=0v_0 = 0, Δt=0.5\Delta t = 0.5 s, og g=10g = 10 m/s². Finn posisjon og hastighet ved t=0.5t = 0.5, 1.01.0 og 1.51.5 s.

Sammenlign resultatene med Euler-metoden og den analytiske løsningen.

📝Oppgave 1.6

En bil med masse 1200 kg bremser med en konstant bremskraft på 6000 N. Starthastigheten er 20 m/s.

a) Finn akselerasjonen.
b) Bruk Euler-Cromer med Δt=0.5\Delta t = 0.5 s til å finne posisjon og hastighet ved t=1t = 1, 22, og 33 s.
c) Når stopper bilen (numerisk og analytisk)?

📝Oppgave 1.7

En fallskjermhopper med masse 70 kg faller fra et fly. Luftmotstanden er FL=0.5v2F_L = 0.5 v^2 (der vv er i m/s og FLF_L i N).

a) Finn terminalhastigheten.
b) Sett opp akselerasjonsuttrykket som funksjon av vv.
c) Beskriv kort hvordan du ville programmert dette i Python.

📝Oppgave 1.8

En pendel med lengde L=1L = 1 m slippes fra hvile ved θ0=30°\theta_0 = 30°.

a) Skriv opp formelen for vinkelakselerasjonen α\alpha.
b) Bruk Euler-Cromer med Δt=0.1\Delta t = 0.1 s til å beregne θ\theta og ω\omega ved t=0.1t = 0.1, 0.20.2 og 0.30.3 s.
c) Sammenlign med liten-vinkel-tilnærmingen: θ(t)=θ0cos(g/Lt)\theta(t) = \theta_0 \cos(\sqrt{g/L} \cdot t).

📝Oppgave 1.9

Skriv et Python-program som simulerer en ball som kastes skrått opp med følgende verdier:
- Starthøyde: y0=0y_0 = 0 m
- Starthastighet: v0=20v_0 = 20 m/s
- Kastevinkel: 45°45°
- Luftmotstand: Ingen (for enkelhet)

Programmet skal finne:
a) Maksimal høyde
b) Total tid i luften
c) Horisontal rekkevidde

Bruk Δt=0.01\Delta t = 0.01 s.

📝Oppgave 1.10
Modifiser Python-programmet fra oppgave 1.9 til å inkludere luftmotstand proporsjonalt med v2v^2:

FL=12CDρAv2F_L = -\frac{1}{2}C_D \rho A v^2

Bruk:
- Masse: m=0.145m = 0.145 kg (baseball)
- Tverrsnittsareal: A=0.0042A = 0.0042
- Lufttetthet: ρ=1.2\rho = 1.2 kg/m³
- Dragkoeffisient: CD=0.35C_D = 0.35

Sammenlign rekkevidden med og uten luftmotstand.

📝Oppgave 1.11

En fjærvekt med masse m=0.2m = 0.2 kg henger i en fjær med fjærkonstant k=50k = 50 N/m. Fjærvekten trekkes 0.1 m ned fra likevektsposisjonen og slippes.

a) Finn svingefrekvensen og perioden analytisk.
b) Skriv opp akselerasjonen som funksjon av posisjon.
c) Bruk Euler-Cromer med Δt=0.01\Delta t = 0.01 s til å simulere de første 3 periodene.
d) Hvorfor er Euler-Cromer bedre enn vanlig Euler for dette problemet?

📝Oppgave 1.12
En bil (masse 1500 kg) kjører med 30 m/s (108 km/t) når sjåføren begynner å bremse. Bremskraften øker lineært med tiden de første 0.5 sekundene (reaksjonstid i bremsesystemet), og er deretter konstant.

Fb(t)={24000tfor t<0.5 s12000 Nfor t0.5 sF_b(t) = \begin{cases} -24000t & \text{for } t < 0.5 \text{ s} \\ -12000 \text{ N} & \text{for } t \geq 0.5 \text{ s} \end{cases}

a) Bruk numerisk simulering (Δt=0.05\Delta t = 0.05 s) til å finne:
- Hastighet og posisjon ved t=0.5t = 0.5 s
- Total bremselengde (når v=0v = 0)
- Total tid for å stoppe

b) Sammenlign med bremselengden hvis kraften var konstant lik 12000 N fra starten.

Oppsummering

Viktige konsepter:

1. Numeriske metoder brukes når analytiske løsninger ikke eksisterer eller er for komplekse

2. Eulers metode er den enkleste numeriske metoden:
- vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
- xn+1=xn+vnΔtx_{n+1} = x_n + v_n \cdot \Delta t

3. Euler-Cromer-metoden er en forbedring som bruker ny hastighet i posisjonsoppdateringen:
- vn+1=vn+anΔtv_{n+1} = v_n + a_n \cdot \Delta t
- xn+1=xn+vn+1Δtx_{n+1} = x_n + v_{n+1} \cdot \Delta t

4. Tidsstegg Δt\Delta t: Mindre steg gir bedre nøyaktighet, men krever flere beregninger

5. Feilkilder:
- Diskretiseringsfeil (avkuttingsfeil)
- Akkumulering av feil over tid
- Numerisk ustabilitet

6. Anvendelser:
- Bevegelse med luftmotstand
- Pendler og svingninger
- Planetbaner
- Komplekse systemer med variable krefter

Programmeringstips:
- Bruk Euler-Cromer for oscillerende systemer (bevarer energi bedre)
- Velg Δt\Delta t mye mindre enn systemets karakteristiske tidsskala
- Kontroller resultater mot analytiske løsninger når mulig
- Sjekk energibevaring for å verifisere stabilitet

Neste kapittel:
Vi skal se på gravitasjon og planetbevegelse, der numeriske metoder er essensielle for å beregne satellittbaner og interplanetære reiser.

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.