シミュレーション物理 4

15
シシシシシシシシシシ 4 シシシシシシシシ

Upload: jensen

Post on 06-Jan-2016

30 views

Category:

Documents


4 download

DESCRIPTION

シミュレーション物理 4. 運動方程式の方法. 運動方程式. 物理で最もよく出てくる。そもそも物理はものの運動を議論する学問から出発(つり合いは運動を行わないという意味で含まれる) 代表例 ニュートンの運動方程式 波動方程式 シュレーディンガー方程式. 運動方程式(微分方程式の解法). 高次の微分方程式を 1 階微分方程式に変形 N 変数の 2 階微分方程式  2N 変数の 1 階微分方程式 dy/dt=f(t,y) を考察( y はベクトルでもよいが説明のため, 1 次元で考える). 運動方程式の解き方 1. 最も原始的なとき(オイラー法) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: シミュレーション物理 4

シミュレーション物理 4

運動方程式の方法

Page 2: シミュレーション物理 4

運動方程式

• 物理で最もよく出てくる。そもそも物理はものの運動を議論する学問から出発(つり合いは運動を行わないという意味で含まれる)

• 代表例–ニュートンの運動方程式–波動方程式–シュレーディンガー方程式

Page 3: シミュレーション物理 4

運動方程式(微分方程式の解法)

• 高次の微分方程式を 1階微分方程式に変形– N変数の 2階微分方程式 2N変数の 1階微分方程式

– dy/dt=f(t,y)を考察( yはベクトルでもよいが説明のため, 1次元で考える)

Page 4: シミュレーション物理 4

運動方程式の解き方 1

• 最も原始的なとき(オイラー法)–時間を離散的に 0, t, 2t, 3 t …と刻む。– y(nt)=ynとして

1 ( , )n n n n

dyf y y f t y t

dt

Page 5: シミュレーション物理 4

運動方程式の解き方 2;オイラー法の改良

• オイラー法だと精度が悪い。 1タイムステップで t2の誤差。目標が t秒後の粒子の位置だとすると, N=t/t回のステップが必要。するとこの誤差が蓄積して, tt程度の誤差が生じる。

• オイラー法を改良して t3の誤差しか生じないようにする。そのためには?

Page 6: シミュレーション物理 4

2次の Runge-Kutta法(中点法)

1

12

31 2

( , )

( , )2 2

( )

n n

n n

n n

k t f t y

ktk t f t y

y y k O t

直感的な意味; yの時間変化を決める fが t, yに依存している。そこで fは tと t+t,yと y+yの中点で決めるとよい。

Page 7: シミュレーション物理 4

2次の Runge-Kutta法の証明1

22 3

2

2 3

2

2

( )

1( ) ( )

21

( ) ( )2

( ( , ( )), )

n n

n

n t y

t y t y

y y t t

dy d yy t t t O t

dt dt

y f t f f f t O t

dy d y dyf t y t f f f f f

dt dt dt

1 1

3

23

( / 2, / 2)

( / 2, / 2)

( )

2 2

( ) ( )2

n n n n

n n n

n t y

n t y

y y t f t t y k

y t f t t y t f

t t fy t f f f O t

ty tf f f f O t

通常のテイラー展開

Runge-Kutta法

Page 8: シミュレーション物理 4

4次の Runge-Kutta法txとして x, yで図で解釈

Page 9: シミュレーション物理 4

4th Order Runge-Kutta法1

2 1

3 2

4 3

531 2 41

( , )

( / 2, / 2)

( / 2, / 2)

( , )

( )6 3 3 6

n n

n n

n n

n n

n n

k t f t y

k t f t t y k

k t f t t y k

k t f t t y k

kk k ky y O t

1

2 1

3 2

4 3

531 2 41

( )

( / 2)

( / 2)

( )

( )6 3 3 6

n

n

n

n

n n

k t f y

k t f y k

k t f y k

k t f y k

kk k ky y O t

多くの場合,力は時間にはあらわに依存しない。

レポート課題: 2番目の場合について,証明せよ

Page 10: シミュレーション物理 4

問題

• まずは自由落下から。 t=0,y=0で初速 0でものを落とした場合を,– Euler法–中点法– Runge-Kutta法で解くこと。次に空気抵抗がある場合をとく。空気抵抗は速度に比例。

Page 11: シミュレーション物理 4

無次元化

2

2

20 0 0 0 0 0 0 0 0 0, , / , / , 1/

d x dxm mg mdt dtdv

g vdt x t v x t g x t tdx

vdt

dvg v

dt

d xv

dt

ここでは1秒、1メートルを基本単位とする。

Page 12: シミュレーション物理 4

課題:それぞれを数値的にといて解析的な式と比較しよう

2(1 ), (1 )t tg g

v e x e t

Page 13: シミュレーション物理 4

program euler!-------------------------! This is a program to investigate the free fall! Euler method! 2005/5/2 Written by T. Ohtsuki!-------------------------implicit none ! Always begin with this statementinteger,parameter::double=selected_real_kind(14) ! Type definedreal(kind=double), parameter::zero=0.0_double,one=1.0_double,&half=0.5_double ! Parameter definedreal(kind=double), parameter::pi=3.1415926535897932 ! Parameter definedreal(kind=double)::x,vx,deltat,xnew,vxnew,t,tmax,analytic ! Real variables definedreal(kind=double), parameter::g=9.8_double,gamma=1.0_double ! Parameter definedinteger::i,nmax ! integer defined

deltat=0.05_double ! Time interval

x=zero ! Initial positionvx=zero ! Initial velocitytmax=5._double! Target timenmax=int((tmax-deltat/2._double)/deltat)+1! Number of iteration required

do i=1,nmax ! Equation of motion vxnew=vx-g*deltat-gamma*vx*deltat ! Vx is slightly changed xnew=x+vx*deltat ! X is slightly changed vx=vxnew ! Set vxnew as vx x=xnew ! Set xnew as xend do

!Compare the analytic and numerical results tmax=deltat*nmax analytic=-g*tmax/gamma-g/gamma**2*exp(-gamma*tmax)+g/gamma**2 print *,tmax,x,analytic

stopend

Page 14: シミュレーション物理 4

program midpoint!-------------------------! This is a program to investigate the free fall! 2005/5/2 Written by T. Ohtsuki! midpoint method!-------------------------implicit none ! Always begin with this statementinteger,parameter::double=selected_real_kind(14)real(kind=double), parameter::zero=0.0_double,one=1.0_double,half=0.5_doublereal(kind=double), parameter::pi=3.1415926535897932real(kind=double), parameter::g=9.8_double,gamma=1._doublereal(kind=double)::x,vx,deltat,xnew,vxnew,t,tmax,analyticreal(kind=double)::xk1,xk2,vxk1,vxk2integer::i,nmax

deltat=0.05_doublex=zerovx=zerotmax=5._doublenmax=int((tmax-deltat/2._double)/deltat)+1

do i=1,nmax !ここだけ Euler法とちょっと違う vxk1=-deltat*(g+gamma*vx) xk1=deltat*vx vxk2=-deltat*(g+gamma*(vx+half*vxk1)) xk2=deltat*(vx+half*vxk1) vxnew=vx+vxk2 xnew=x+xk2 vx=vxnew x=xnewend do

!Compare the analytic and numerical resultstmax=deltat*nmaxanalytic=-g*tmax/gamma-g/gamma**2*exp(-gamma*tmax)+g/gamma**2print *,tmax,x,analytic

stopend

Page 15: シミュレーション物理 4

• コンパイル– f90 filename(必ず .f90で終わるファイル )– a.outというファイルができるのでそれを実行( a.outと打ち込む)

–もし a.outでなく、たとえば Euler1という名前の実行ファイル(キーボードで打ち込むと結果が出るものを実行ファイルという)がほしければ

• f90 -o Euler1 finename