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

Kvifor treng vi numeriske metodar?

I dei tidlegare kapitla har vi løyst rørslelikningar analytisk – det vil seie at vi har funne eksakte formlar for posisjon og fart som funksjon av tid. Til dømes lærte vi at for konstant akselerasjon gjeld:

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 røynda er akselerasjonen sjeldan konstant. Tenk på:
- Luftmotstand som aukar med farten
- Fjørkrefter som avheng av posisjon
- Gravitasjon som varierer med avstand
- Magnetiske krefter som avheng av både posisjon og fart

For slike problem finst det ofte inga analytisk løysing. Då bruker vi i staden numeriske metodar – algoritmar som reknar ut tilnærma verdiar steg for steg.

Numeriske metodar:
- Deler opp tida i små intervall Δt\Delta t
- Reknar ut posisjon og fart trinnvis
- Gjev tilnærma, men ofte svært nøyaktige, løysingar
- Kan implementerast på datamaskiner

Bruksområde:
- Simulering av romfart og satellittbaner
- Vêrvarsling og klimamodellar
- Dataspel og animasjonar
- Partikkelfysikk og molekylsimuleringar
- Strukturanalyse i ingeniørfag

Numerisk metode
Ein numerisk metode er ein algoritme som finn tilnærma løysingar på matematiske problem ved å utføre utrekningar i små, diskrete steg.

I staden for å finne ein eksakt formel, reknar vi ut verdiar punkt for punkt:

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

Nøkkelomgrep:
- Tidssteg (Δt\Delta t): Kor lang tid mellom kvar utrekning
- Iterasjon: Eitt utrekningssteg i algoritmen
- Diskretisering: Å dele opp kontinuerlege storleikar i diskrete verdiar

Eulers metode – matematisk bakgrunn

Eulers metode (oppkalla etter matematikaren Leonhard Euler, 1707-1783) er den enklaste numeriske metoden for å løyse differensiallikningar.

Den deriverte som stigingstal

Hugs at den deriverte av ein 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 stigingstalet til tangenten ved punktet tt.

Eulers approksimasjon

Viss vi ikkje tek grensa, men bruker ein liten, men endeleg Δt\Delta t, får vi ei tilnærming:

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

Ved å løyse 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 tolking

Euler-metoden følgjer tangentlinja i kvart punkt. I staden for å følgje den bøygde kurva eksakt, tek vi eit lite steg langs tangenten. Jo mindre Δt\Delta t, jo betre følgjer vi den verkelege kurva.

Viktig innsikt:
Euler-metoden erstattar den bøygde løysingskurva med ei rekkje rette linjesegment (tangentane). Dette gjev ei tilnærma løysing som blir betre jo mindre tidssteg vi bruker.

Eulers metode (eksplisitt)
Eulers metode oppdaterer verdiar trinnvis ved å bruke den noverande 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 rørsle i éin 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 farten ved tidspunkt tnt_n
- ana_n er akselerasjonen ved tidspunkt tnt_n
- Δt\Delta t er tidssteget

Merk: Vi bruker den gamle farten vnv_n for å oppdatere posisjonen. Dette blir kalla eksplisitt Euler-metode.

Implementasjon av Eulers metode

Algoritmen steg for steg

1. Set startverdiar: Vel x0x_0, v0v_0, og t0=0t_0 = 0
2. Vel tidssteg: Fastsett Δt\Delta t (mindre = meir nøyaktig, men fleire utrekningar)
3. Gjenta for kvart tidssteg:
- Rekn ut akselerasjonen an=Fn/ma_n = F_n / m (frå kreftene)
- Oppdater farten: 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 tida: tn+1=tn+Δtt_{n+1} = t_n + \Delta t
4. Hald fram til ønskt 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

Val av tidssteg

Tommelregel: Δt\Delta t bør vere mykje mindre enn den karakteristiske tidsskalaen for systemet.

- Fritt fall (nokre sekund): Δt0.01 s\Delta t \approx 0.01 \text{ s} - 0.1 s0.1 \text{ s}
- Pendel (periodar på 1-2 s): Δt0.001 s\Delta t \approx 0.001 \text{ s} - 0.01 s0.01 \text{ s}
- Raske svingingar: Bruk endå mindre Δt\Delta t

✏️Døme 1: Fritt fall med Eulers metode

Ein ball blir sleppt frå kvile frå ei høgd på 20 m. Bruk Eulers metode med tidssteg Δt=0.5\Delta t = 0.5 s til å finne høgda og farten etter 1.0 s og 2.0 s.

Samanlikn med dei analytiske formlane. Bruk g=10g = 10 m/s².

Gitt:
- Starthøgd: y0=20y_0 = 20 m
- Startfart: v0=0v_0 = 0 m/s (blir sleppt frå kvile)
- Akselerasjon: a=g=10a = -g = -10 m/s² (negativ fordi nedover)
- Tidssteg: Δt=0.5\Delta t = 0.5 s

Euler-formlar:
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

Utrekning 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

Samanlikning med analytisk løysing:

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: Farten er eksakt, men posisjonen har feil fordi vi bruker den gamle farten i posisjonsoppdateringa. Feilen aukar med tid. Med mindre Δt\Delta t ville feilen vore mindre.

Feilkjelder og nøyaktigheit

Diskretiseringsfeil (avkuttingsfeil)

Den største feilkjelda i Euler-metoden er diskretiseringsfeil. Denne oppstår fordi vi erstattar den glatte løysingskurva med rette linjesegment.

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

Dette tyder at viss vi halverer tidssteget, halverer vi den totale feilen. Euler-metoden er derfor ein førsteordens metode.

Akkumulering av feil

For kvart steg blir det lagt til ein liten feil. Over mange steg kan desse feila akkumulerast og vekse:
- Feil i posisjon påverkar utrekning av krefter
- Feil i fart påverkar utrekning av posisjon
- Feila kan forsterke kvarandre

Numerisk stabilitet

For nokre problem kan Euler-metoden bli ustabil – feila veks eksponentielt. Dette skjer typisk når:
- Tidssteget er for stort
- Systemet har raske svingingar
- Kreftene er sterkt avhengige av posisjon

Stabilitetsregel: Δt\Delta t må vere mykje mindre enn den karakteristiske tidsperioden til systemet.

Forbetra metodar

Det finst mange betre metodar enn enkel Euler:
- Euler-Cromer (symplektisk Euler): Bruker vn+1v_{n+1} i staden for vnv_n i posisjonsoppdateringa
- Midtpunktmetoden: Bruker farten midt i intervallet
- Runge-Kutta: Meir nøyaktige, men meir komplekse metodar

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 fart!)x_{n+1} = x_n + v_{n+1} \cdot \Delta t \quad \text{(bruker ny fart!)}

Denne enkle endringa gjev mykje betre energibevaring for periodiske system.

Euler-Cromer-metoden
Euler-Cromer-metoden (òg kalla symplektisk Euler) er ei forbetring som bruker den oppdaterte farten i posisjonsutrekninga:

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

Fordelar:
- Bevarer energien betre i oscillerande system
- Meir stabil for pendlar og fjører
- Like enkel å implementere som vanleg Euler

Tilråding: Bruk Euler-Cromer i staden for vanleg Euler for dei fleste fysikkproblem!

✏️Døme 2: Samanlikning av Euler og Euler-Cromer

Bruk begge metodane til å simulere fritt fall frå 20 m med Δt=0.1\Delta t = 0.1 s i 2 sekund. Samanlikn posisjonane med den analytiske løysinga.

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øysing ved t = 1 s:
y(1)=20121012=15.0 my(1) = 20 - \frac{1}{2} \cdot 10 \cdot 1^2 = 15.0 \text{ m}
Samanlikning ved t = 1 s:
- Euler: y=15.5y = 15.5 m, feil = +0.5 m (for høgt)
- Euler-Cromer: y=14.5y = 14.5 m, feil = -0.5 m (for lågt)

- 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øgt)
- Euler-Cromer: y=2.0y = -2.0 m (for lågt)
Konklusjon: Begge metodane har feil, men dei ligg på kvar si side av den rette verdien. Euler gjev systematisk for høge posisjonar (fordi vi bruker for låg fart), medan Euler-Cromer gjev for låge posisjonar.

Python-døme: Fritt fall

Her er eit 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")

Forventa resultat:
- Ballen treff bakken etter ca. 4.52 sekund
- Sluttfart: 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}

✏️Døme 3: Fall med luftmotstand

Ein fallskjermhoppar (masse 80 kg) hoppar frå eit fly. Luftmotstanden er gitt ved FL=bv2F_L = -bv^2, der b=0.25b = 0.25 kg/m.

a) Set opp rørslelikninga.
b) Finn terminalfarten analytisk.
c) Forklar kvifor dette problemet eignar seg for numerisk løysing.

a) Rørslelikning:

Krefter på hopparen (positiv retning nedover):
- Tyngde: Fg=mgF_g = mg (nedover)
- Luftmotstand: FL=bvvF_L = -bv|v| (motsett rørsleretninga)

Sidan hopparen fell 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) Terminalfart:

Ved terminalfart 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 svarar til ca. 200 km/t.

c) Kvifor numerisk løysing?

Rørslelikninga dvdt=gbmv2\displaystyle \frac{dv}{dt} = g - \frac{b}{m}v^2 er ei ikkje-lineær differensiallikning fordi akselerasjonen avheng av v2v^2.

Sjølv om denne likninga faktisk kan løysast analytisk (med hyperbolske funksjonar), er løysinga komplisert:
v(t)=vttanh(gtvt)v(t) = v_t \tanh\left(\frac{gt}{v_t}\right)

Med numeriske metodar kan vi enkelt:
- Løyse likninga utan å kjenne den analytiske løysinga
- Leggje til meir realistiske modellar (t.d. bb som avheng av høgd)
- Simulere opning av fallskjerm (brå endring i bb)
- Inkludere vind og andre effektar

Python-døme: 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 observasjonar:
1. Farten aukar raskt i starten
2. Auken avtek når luftmotstanden blir monaleg
3. Farten nærmar seg terminalfarten asymptotisk
4. Den numeriske løysinga matchar den analytiske svært godt

Python-døme: Matematisk pendel

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

For små vinklar (θ<15°\theta < 15°) kan vi bruke sinθθ\sin\theta \approx \theta og få ei analytisk løysing. Men for store vinklar må vi løyse 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 observasjonar:
1. Euler-Cromer bevarer energien godt (viktig for oscillerande system!)
2. For store vinklar er perioden litt lengre enn liten-vinkel-formelen gjev
3. Vanleg Euler-metode ville gitt aukande energi over tid (ustabilt)

Bruksområde for numerisk modellering

1. Skrått kast med luftmotstand

Utan luftmotstand har vi den kjende parabelbanen. Med luftmotstand:
- Banen blir asymmetrisk (brattare nedstiging)
- Rekkjevidda blir monaleg redusert
- Optimal kastevinkel er under 45°

2. Fallskjermhopping

Simulering med varierande luftmotstandskoeffisient:
- Fritt fall: låg bb, fart ca. 200 km/t
- Fallskjerm utløyst: høg bb, fart ca. 20 km/t
- Brå endring i bb gjev rask oppbremsing

3. Planetbaner

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

Må løysast numerisk fordi akselerasjonen avheng av posisjon.

4. Bilkøyring og bremsing

- Bremsekraft avhengig av fart (ABS-bremser)
- Friksjon som varierer med underlaget
- Luftmotstand ved høge fartar

5. Sportsanalyse

- Golfball med spinn (Magnus-effekt)
- Fotball som svingar i lufta
- Luftmotstand og oppdrift til skihopparar

6. Vêrmodellering

- Atmosfæriske rørsler
- Havsirkulasjon
- Klimaendringar over tid

📝Oppgave 1.1

Kva er hovudfordelen med numeriske metodar samanlikna med analytiske løysingar?

📝Oppgave 1.2

I Euler-metoden, kva skjer viss vi gjer tidssteget Δt\Delta t mindre?

📝Oppgave 1.3

Ein ball fell frå kvile (v0=0v_0 = 0) frå høgda 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 farten ved t=0.5t = 0.5 s.

📝Oppgave 1.4

Hald fram frå oppgåve 1.3. Bruk Euler-metoden til å finne posisjonen og farten ved t=1.0t = 1.0 s og t=1.5t = 1.5 s.

Samanlikn med dei analytiske formlane 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å same problem som i oppgåve 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 fart ved t=0.5t = 0.5, 1.01.0 og 1.51.5 s.

Samanlikn resultata med Euler-metoden og den analytiske løysinga.

📝Oppgave 1.6

Ein bil med masse 1200 kg bremsar med ei konstant bremsekraft på 6000 N. Startfarten er 20 m/s.

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

📝Oppgave 1.7

Ein fallskjermhoppar med masse 70 kg fell frå eit fly. Luftmotstanden er FL=0.5v2F_L = 0.5 v^2 (der vv er i m/s og FLF_L i N).

a) Finn terminalfarten.
b) Set opp akselerasjonsuttrykket som funksjon av vv.
c) Skildr kort korleis du ville programmert dette i Python.

📝Oppgave 1.8

Ein pendel med lengd L=1L = 1 m blir sleppt frå kvile 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 å rekne ut θ\theta og ω\omega ved t=0.1t = 0.1, 0.20.2 og 0.30.3 s.
c) Samanlikn med liten-vinkel-tilnærminga: θ(t)=θ0cos(g/Lt)\theta(t) = \theta_0 \cos(\sqrt{g/L} \cdot t).

📝Oppgave 1.9

Skriv eit Python-program som simulerer ein ball som blir kasta skrått opp med følgjande verdiar:
- Starthøgd: y0=0y_0 = 0 m
- Startfart: v0=20v_0 = 20 m/s
- Kastevinkel: 45°45°
- Luftmotstand: Ingen (for enkelheit)

Programmet skal finne:
a) Maksimal høgd
b) Total tid i lufta
c) Horisontal rekkjevidd

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

📝Oppgave 1.10
Modifiser Python-programmet frå oppgåve 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
- Lufttettleik: ρ=1.2\rho = 1.2 kg/m³
- Dragkoeffisient: CD=0.35C_D = 0.35

Samanlikn rekkjevidda med og utan luftmotstand.

📝Oppgave 1.11

Ei fjørvekt med masse m=0.2m = 0.2 kg heng i ei fjør med fjørkonstant k=50k = 50 N/m. Fjørvekta blir trekt 0.1 m ned frå likevektsposisjonen og sleppt.

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 dei første 3 periodane.
d) Kvifor er Euler-Cromer betre enn vanleg Euler for dette problemet?

📝Oppgave 1.12
Ein bil (masse 1500 kg) køyrer med 30 m/s (108 km/t) når sjåføren byrjar å bremse. Bremsekrafta aukar lineært med tida dei første 0.5 sekunda (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:
- Fart og posisjon ved t=0.5t = 0.5 s
- Total bremselengd (når v=0v = 0)
- Total tid for å stoppe

b) Samanlikn med bremselengda viss krafta var konstant lik 12000 N frå starten.

Oppsummering

Viktige konsept:

1. Numeriske metodar blir brukte når analytiske løysingar ikkje finst eller er for komplekse

2. Eulers metode er den enklaste 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 ei forbetring som bruker ny fart i posisjonsoppdateringa:
- 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. Tidssteg Δt\Delta t: Mindre steg gjev betre nøyaktigheit, men krev fleire utrekningar

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

6. Bruksområde:
- Rørsle med luftmotstand
- Pendlar og svingingar
- Planetbaner
- Komplekse system med variable krefter

Programmeringstips:
- Bruk Euler-Cromer for oscillerande system (bevarer energi betre)
- Vel Δt\Delta t mykje mindre enn den karakteristiske tidsskalaen til systemet
- Kontroller resultat mot analytiske løysingar når det er mogleg
- Sjekk energibevaring for å verifisere stabilitet

Neste kapittel:
Vi skal sjå på gravitasjon og planetrørsle, der numeriske metodar er essensielle for å rekne ut 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.