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
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