15.09.2013 Views

Don't panic!* Morten Dam Jørgensen - Computerfysik.dk

Don't panic!* Morten Dam Jørgensen - Computerfysik.dk

Don't panic!* Morten Dam Jørgensen - Computerfysik.dk

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Simulering I<br />

Don’t <strong>panic</strong>! *<br />

<strong>Morten</strong> <strong>Dam</strong> <strong>Jørgensen</strong><br />

* Large friendly letters


Oversigt<br />

• Hvad I skal tage med fra denne forelæsning<br />

• Hvad er simulering<br />

• Fra model til simulering<br />

• Numerisk løsning af differentialligninger<br />

• Frit fald<br />

• Luftmodstand<br />

• Sammenligning med den analytiske løsning<br />

• En advarsel om præcision<br />

• Et ikke-mekanisk system<br />

• Conway’s Life<br />

Simulation is the<br />

imitation of some real<br />

thing, state of affairs, or<br />

process. The act of<br />

simulating something<br />

generally entails<br />

representing certain key<br />

characteristics or<br />

behaviours of a selected<br />

physical or abstract<br />

system.<br />

wikipedia.org


Hvad er det I skal lære?<br />

• Fra mig: En måde at tænke på<br />

• Praktisk træning: Lab øvelsen i denne uge<br />

• Resten af Mek1 og Mek2: Bliv gode til at<br />

omsætte fysiske problemstillinger til<br />

simuleringer (tænk struktureret).<br />

• Statistik: Test af simulering i forhold til<br />

eksperiment (indirekte hypotesetest).


Fysik = Ændringer<br />

• Fysikkens store kvalitet er at den bygger på<br />

et kvantitativt grundlag.<br />

• Det er (typisk) ændringerne af en given<br />

størrelse vi opfatter som fysisk.<br />

• Differentialligninger er grundlaget for<br />

den teoretiske beskrivelse af stort set alle<br />

fysiske fænomener.


Ingredienser<br />

• Model (Et sæt differentialligninger)<br />

• Begyndelsesbetingelser (Positionen af objekterne i<br />

vores system)<br />

• Randbetingelser (Definition af fysikken omkring<br />

systemets grænser)


Ingredienser<br />

• Model (Et sæt differentialligninger)<br />

• Begyndelsesbetingelser (Positionen af objekterne i<br />

vores system)<br />

• Randbetingelser (Definition af fysikken omkring<br />

systemets grænser)<br />

Model<br />

“Ændringen i acceleration skal<br />

være proportional med<br />

kraftpåvirkningen”<br />

“Den elektromotoriske kraft<br />

genereret er proportional med<br />

ændringen i den magnetiske fluks<br />

i systemet”<br />

Begyndelsesbetingelser<br />

“Raketten befinder sig på et<br />

sfærisk objekt med en masse på<br />

10 22 kg, med en ækvatoriale<br />

hastighed på 465 m/s”<br />

“Gletsjerens hastighed er 28 m/<br />

døgn, den er 2 km tyk med et<br />

areal på 110.000 km 2 ”<br />

Randbetingelser<br />

“Partiklerne er spærret inde i en<br />

tæt og restitutionsløs boks med<br />

dimensionerne: 20x20x20 cm”<br />

“Bilens maksimumshastighed er<br />

begrænset til 210 km/t”<br />

“Vejen skifter fra asfalt til grus<br />

efter 400 m”


Randbetingelser<br />

Randbetingelser<br />

fluid hastighed = 0 ved<br />

vingerne<br />

Luftens bevægelse omkring<br />

Begyndelsesbetingelser<br />

Flyets hastighed, position af<br />

vingerne, luftens viskositet,<br />

volumen, densitet...<br />

en flyvinge<br />

“Navier-Stokes”<br />

Model for fluid<br />

bevægelse


Frit fald<br />

• Et objekt i frit fald (uden luftmodstand)<br />

Vi antager at tyngdeaccelerationen er konstant:<br />

m d2y = F<br />

dt2 Fg = mg<br />

Vi kan benytte Newtons 2. lov til at finde positionen y(t) ved at<br />

sætte F = Fg<br />

d2y = g<br />

dt2 Vi ønsker at løse denne 2. ordens-differentialligning...<br />

HHGTTG


• 2-ordens ligning<br />

For at lette den numeriske<br />

løsning omskriver vi,<br />

d2y = g<br />

dt2 Til et system af to<br />

1. ordens differentialligninger,<br />

dy<br />

dt<br />

= v<br />

dv<br />

dt<br />

Frit fald<br />

= g<br />

(Analytisk løsning)<br />

y(t) =y(0) + v(0)t<br />

1<br />

2 gt2<br />

v(t) =v(0) + v(0) gt<br />

Husk<br />

Enhver normal differentialligning<br />

(ODE) af n-orden kan omskrives<br />

til et system af n første-ordens<br />

differentialligninger.


Frit fald<br />

• Vi kan approksimere de afledede, hvis vi<br />

husker grundantagelsen bag differentiering, og<br />

i stedet laver endelige skridtstørrelser ∆t...<br />

y(t + t) y(t)<br />

t<br />

v(t + t) v(t)<br />

t<br />

= v(t)<br />

= g<br />

lim<br />

t!0 !<br />

dy<br />

dt<br />

dv<br />

dt<br />

= v<br />

= g


Frit fald<br />

• Differensligningen kan nu omskrives sådan<br />

at vi får den næste værdi af funktionen y(t)<br />

givet den forrige og ændringsforholdet.<br />

y(t + t) y(t)<br />

t<br />

v(t + t) v(t)<br />

t<br />

= v(t)<br />

= g<br />

t & 0<br />

For små men endelige ∆t værdier, kan vi<br />

omskrive udtrykket for y(t+∆t)<br />

y(t + t) =y(t)+v(t) t<br />

v(t + t) =v(t) g t


y(t + t) =y(t)+v(t) t<br />

v(t + t) =v(t) g t<br />

Vi kan nu løse “differens”-<br />

ligningerne med summering,<br />

som numerisk analogi til<br />

integration ved analytisk<br />

løsning.<br />

Frit fald<br />

g = -9.8;<br />

y0 = 100; v0 = 0; % start<br />

y = y0; v = v0; % sæt start<br />

t = 0; dt = 0.1; % tid<br />

% Euler metoden<br />

while y > 0 % stop ved y=0<br />

t = t + dt;<br />

y = y + v .* dt;<br />

v = v + g .* dt;<br />

plot(t,y,'b+')<br />

end<br />

% Analytisk løsning<br />

t = 0:0.1:t;<br />

y = y0 + v0 + (0.5 .* g .*<br />

t.^2);<br />

plot(t,y,'r')


y(t + t) =y(t)+v(t) t<br />

v(t + t) =v(t) g t<br />

Frit fald<br />

g = -9.8;<br />

y0 = 100; v0 = 0; % start<br />

y = y0; v = v0; % sæt start<br />

t = 0; dt = 0.1; % tid<br />

% Euler metoden<br />

while y > 0 % stop ved y=0<br />

t = t + dt;<br />

y = y + v .* dt;<br />

v = v + g .* dt;<br />

plot(t,y,'b+')<br />

end<br />

% Analytisk løsning<br />

t = 0:0.1:t;<br />

y = y0 + v0 + (0.5 .* g .*<br />

t.^2);<br />

plot(t,y,'r')


• Spørgsmål:<br />

Hvis vi ville indføre<br />

luftmodstand (drag),<br />

hvordan skulle vi bære os<br />

ad?<br />

⇢<br />

~v<br />

Cd<br />

A<br />

~Fdrag = 1<br />

Densitet af mediet (luft)<br />

2 ⇢~v2 CdA<br />

Hastigheden af legemet relativt til mediet<br />

Drag koefficient (dimensionsløs)<br />

Tværsnittet af objektet i bevægelsesretningen<br />

http://en.wikipedia.org/wiki/Drag_(physics)<br />

Frit fald<br />

g = -9.8;<br />

y0 = 100; v0 = 0; % start<br />

y = y0; v = v0; % sæt start<br />

t = 0; dt = 0.1; % tid<br />

% Euler metoden<br />

while y > 0 % stop ved y=0<br />

t = t + dt;<br />

y = y + v .* dt;<br />

v = v + g .* dt;<br />

plot(t,y,'b+')<br />

end


⇢<br />

~v<br />

Cd<br />

A<br />

~Fdrag = 1<br />

Densitet af mediet (luft)<br />

2 ⇢~v2 CdA<br />

Hastigheden af legemet relativt til mediet<br />

Drag koefficient (dimensionsløs)<br />

Tværsnittet af objektet i bevægelsesretningen<br />

http://en.wikipedia.org/wiki/Drag_(physics)<br />

Fdrag(vn) =madrag(vn)<br />

adrag(vn) =Fdrag(vn)/m<br />

vdrag = tF(v)/m<br />

vtyngde = tg<br />

vn+1 = vn + vdrag + vtyngde<br />

Frit fald<br />

g = -9.8;<br />

y0 = 100; v0 = 0; % start<br />

y = y0; v = v0; % sæt start<br />

m = 1; % masse af objekt<br />

rho = 0.1; C_d = 1.2; A = 1;<br />

t = 0; dt = 0.1; % tid<br />

while y > 0 % stop ved y=0<br />

t = t + dt;<br />

y = y + v .* dt;<br />

end<br />

dv_g = g .* dt;<br />

dv_d = dt./m .* ...<br />

(0.5*rho* v^2*C_d*A);<br />

v = v + dv_g + dv_d<br />

plot(t,y,'b+')


• Hvis vi hopper ud fra en Airbus<br />

A380 i 10 kilometers højde, har<br />

har ændringen i atmosfærens<br />

densitet så betydning?<br />

• Let’s find out!<br />

~Fdrag = 1<br />

2 ⇢(y)~v 2 CdA<br />

En adiabatisk atmosfære (don’t ask):<br />

⇢(y) =⇢0<br />

✓<br />

1<br />

1 y<br />

y0<br />

Frit fald<br />

◆ 1/( 1)<br />

rho0 = 1.2; % kg/m^4-1<br />

gamma = 1.4;<br />

y0 = 29400; % m<br />

rho = @(y) rho0 *(1 -<br />

(gamma-1)./gamma* y/y0).^(1/<br />

(gamma-1));<br />

while y > 0 % stop ved y=0<br />

t = t + dt;<br />

y = y + v .* dt;<br />

end<br />

dv_g = g .* dt;<br />

dv_d = dt./m .*<br />

(0.5*rho(y)* v^2*C_d*A);<br />

v = v + dv_g + dv_d<br />

plot(t,y,'b+')


Resultatet


Modellens præcision


Valg af skridtstørrelse<br />

• Euler metoden er ikke den<br />

bedste i verden, og størrelsen af<br />

tidsskridtet har stor betydning<br />

for resultatet<br />

• Lokale fejl<br />

• Akkumulerende fejl<br />

• En god “regl”, sæt dt til den<br />

højeste værdi du kan, som ikke<br />

ændrer resultatet i forhold til en<br />

lavere værdi. ∆t={0,0001,<br />

0.001,0.01,0.1,1,...,42}<br />

• Vi vil se på mere præcise<br />

metoder i Mek2.<br />

Jo længere man kører en simulering<br />

des større betydning får præcisionen,<br />

da små fejl i hvert tidsskridt<br />

akkumulerer indtil simuleringen løber<br />

løbsk<br />

Demo: jumper.m


Conway’s Game of Life<br />

• Et zero-player “spil” i.e. en<br />

simulering<br />

• "Universet" er et uendeligt<br />

gitter (som en uendelig<br />

skakplade), hver celle i<br />

gitteret har en af to<br />

tilstande: levende eller død.<br />

• Hver celler har i alt otte<br />

naboceller.


Conway’s Game of Life<br />

• I hvert tidskridt sker følgende,<br />

• Alle levende celler med mindre end 2 levende<br />

naboer dør pga. underbefolkning.<br />

• Alle levende celler med to eller tre levende<br />

naboer lever videre til den næste generation.<br />

• Alle levende celler med mere end tre levende<br />

naboer dør af overbefolkning.<br />

• Alle døde celler med præcis tre levende naboer<br />

bliver levende ved reproduktion.<br />

• Det er begyndelsesbetingelserne som er afgørende<br />

for dynamikken


Conway’s Game of Life<br />

• < 2 levende naboer<br />

• 2 || 3 levende naboer<br />

• 3 > levende naboer<br />

• Døde med 3 levende<br />

naboer


Conway’s Game of Life<br />

• < 2 levende naboer<br />

• 2 || 3 levende naboer<br />

• 3 > levende naboer<br />

• Døde med 3 levende<br />

naboer<br />

Grafik fra:<br />

http://www.leda-tutorial.org/en/official/ch02s02s02.html


n = 100; % grid size (n x n)<br />

X = randi(2,n,n)-1; % MAGIC GOES HERE!!!!<br />

Y = X; colormap bone<br />

for t=1:1000000 % number of steps<br />

image(Y) % Tegn gitter<br />

for x=1:size(X,1)<br />

for y=1:size(X,2)<br />

if x == 1<br />

if y == 1<br />

s = sum(sum(X(x:x+1, y:y+1))) - X(x,y);<br />

B<br />

elseif y == size(X,2)<br />

s = sum(sum(X(x:x+1, y-1:y))) - X(x,y);<br />

else<br />

E<br />

s = sum(sum(X(x:x+1, y-1:y+1))) - X(x,y);<br />

end<br />

elseif x == size(X,1)<br />

K<br />

if y == 1<br />

s = sum(sum(X(x-1:x, y:y+1))) - X(x,y);<br />

elseif y == size(X,2)<br />

L<br />

s = sum(sum(X(x-1:x, y-1:y))) - X(x,y);<br />

else<br />

s = sum(sum(X(x-1:x, y-1:y+1))) - X(x,y);<br />

A<br />

end<br />

else<br />

if y == 1<br />

s = sum(sum(X(x-1:x+1, y:y+1))) - X(x,y);<br />

G<br />

elseif y == size(X,2)<br />

s = sum(sum(X(x-1:x+1, y-1:y))) - X(x,y);<br />

else<br />

E<br />

s = sum(sum(X(x-1:x+1, y-1:y+1))) - X(x,y);<br />

end<br />

end<br />

R<br />

if X(x,y) == 1 && s < 2 % Too few neighbours, underpopulation<br />

Y(x,y) = 0;<br />

elseif X(x,y) == 1 && (s == 2 || s == 3) % balance<br />

Y(x,y) = X(x,y);<br />

elseif X(x,y) == 1 && s > 3 % over-population<br />

Y(x,y) = 0;<br />

elseif X(x,y) == 0 && s == 3 % Spawn new cell<br />

Y(x,y) = 1;<br />

end<br />

end<br />

end<br />

pause(0.01)<br />

X = Y;<br />

end


Opsummering<br />

• Modeller ~= løsninger, løsninger er næsten umulige af finde<br />

eksakt<br />

• Simulering og numerisk løsning i stedet<br />

• Numerisk løsning af ODEer er nemt, men præcisionen er<br />

en vigtig detalje<br />

• Hvor realistisk skal vores simulering være?<br />

• Der findes andre typer simulering end bare løsning af<br />

differentialligninger, nogle benytter slet ikke matematiske<br />

strukturer<br />

• <strong>Morten</strong> kan også skrive grimt kode..


Aflevering 2<br />

• Programmering<br />

• Betingelser<br />

• Løkker<br />

• Variable<br />

• Datastrukturer<br />

• Funktioner<br />

• Forvent at i skal kode lidt selv<br />

• Åben så MATLAB!<br />

• (P.s. I var rigtig gode i aflevering 1 - awesome!)


Næste uge<br />

• Statistik (med Troels Petersen)<br />

• Det I kender: middelværdi, spredning osv..<br />

• Det I ikke kender: Fitting, hypotesetest og<br />

andre lækkerier

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!