物理 力学

2017/7-2013/2 Yuji.W

運動のシミュレイション

_ 運動 コンピューター シミュレイション simulation _

【 ベクトル】<A> 単位ベクトル<Au> 座標単位ベクトル<x> 内積* 外積#
【関数】積* 商/ 10^x=Ten(x) exp(i*x)=expi(x) 微分; 
時間微分' 積分$

運動のシミュレイションの原理

◆ 1質点 質量 m 1次元の運動 位置 x 速さ v 加速度 a

■ 時刻 t での、x(t),v(t),a(t) がわかったとしよう。微少時間 Δt 後の、x(t+Δt),v(t+Δt),a(t+Δt) を求めたい。

微少時間 Δt の間にも、v(t),a(t) は変化するのだが、微少時間 Δt は十分に小さく、v(t),a(t) は一定の値をとり続けるとみなす。そうすると、次の値を計算する事ができる。

 x(t+Δt)=x(t)+v(t)*Δt v(t+Δt)=v(t)+a(t)*Δt

x(t+Δt)とv(t+Δt)とが求められたので、運動方程式により、a(t+Δt)を求めることができる。

以下、同様に計算して、任意の時刻の x,v,a がわかる。

運動をシミュレイションする

◆ 1質点 質量 m 1次元の運動 位置 x 速さ v 加速度 a 力 F(x,v)

時間 初期値 t0 微少時間 Δt

t=t0 , t=t0+Δt , t=t0+2*Δt , … での位置 x0 , x1 , x2 , … と表す 他の物理量も同様に表す

■ x(t) を知りたい{!} 運動方程式より a(t)=F(x(t),v(t))/m

@ 適当に初期値 x0 , v0 を定める F0 , a0 も決まる

A 微少時間 Δt に対して、次の式が成り立つとして、その値を求める

 x1=x0+v0*Δt v1=v0+a0*Δt

x1 , v1 がわかったから、F1 , a1 も求める事ができる

B Aと同様にして、x2 , v2 , F2 , a2 を求める事ができる 以下、ABの繰り返し

時刻

t0

t0+Δt

t0+2*Δt

t0+3*Δt

位置

x0

x1

x2

速さ

v0

v1

v2

加速度

a0

a1

x2

 

運動をシミュレイションする-精度を上げた方法

◎ ファインマン流

■ F=F(x(t)) の場合 シミュレイションの精度を上げるために、次のようにする。

@ 適当に初期値 x0 , v0 を定める F0 , a0 も決まる

A 微少時間 Δt に対して、次の式が成り立つとして、その値を求める

 v0とv1の中間の値 v01=v0+a0*Δt/2

B その中間の値を使って x1=x0+v01*Δt   F1 , a1 も決まる

 ※ x1=x0+(v0+a0*Δt/2)*Δt=x0+v0*Δt+a0*Δt^2/2

C v1とv2の中間の値 v12=v01+a1*Δt

D その中間の値を使って x2=x1+v12*Δt   F2,a2 も決まる

E v23=v12+a2*Δt 以下、DEの繰り返し

時刻

t0

t0+Δt

t0+2*Δt

t0+3*Δt

位置

x0

x1

x2

速さ

v01

v12

v23

加速度

a0

a1

x2

 

運動をシミュレイションする-精度を上げた方法-2

◎ Yuji流

■ @ 初期値 x0 , v0 ⇒ F0 , a0

A v1=v0+a0*Δt

B x1=x0+[(v0+v1)/2]*Δt  {ここが工夫したところ!}

 ※ x1=x0+[(v0+v0+a0*Δt)/2]*Δt=x0+v0*Δt+a0*Δt^2/2 ファインマン流と同じ

以下同様

時刻

t0

t0+Δt

t0+2*Δt

t0+3*Δt

位置

x0

x1

x2

速さ

v0

v1

v2

加速度

a0

a1

x2

☆計算例☆

▲ x=500-5*t^2 Δt=0.2 精度を上げた方式でシミュレイションしたもの。

t の値を代入して、xの値を求めたものではない。しかし、数式通り、

 t=10 で、x=0 になっている。{素晴らしい!2013/2}

☆精度を上げた方法の精度☆

◎ 等加速度運動では、精度を上げた方法でシミュレイションすると、誤差が全く出ない。なぜか。

◆ 加速度 a0=a1=a2=…=a=一定

n*Δt 後の真の値 x=(1/2)*a*(n*Δt)^2+v0*(n*Δt)+x0

シミュレイション \v0=v0+a*Δt/2 x1=x0+\v0*Δt
 \v(n)=\v(n-1)+a*Δt xn=x(n-1)+\v(n-1)*Δt

■ \v0=v0+a*Δt/2
 \v1=\v0+a*Δt=(v0+a*Δt/2)+a*Δt=v0+1.5*a*Δt
 \v(n-1)=v0+(n-0.5)*a*Δt \v(n)=v0+(n+0.5)*a*Δt

 x1=x0+\v0*Δt=x0+(v0+a*Δt/2)*Δt=x0+v0*Δt+a*Δt^2/2

 x2
=x1+\v1*Δt
=(x0+v0*Δt+a*Δt^2/2)+(v0+1.5*a*Δt)*Δt
=x0+v0*(2*Δt)+(1/2)*a*(2*Δt)^2

 x3
=x2+\v2*Δt
=[x0+v0*(2*Δt)+(1/2)*a*(2*Δt)^2]+[v0+2.5*a*Δt]*Δt
=x0+v0*(3*Δt)+(1/2)*a*(3*Δt)^2

 xn=x0+v0*(n*Δt)+(1/2)*a*(n*Δt)^2=真の値

▲ 加速度 a=一定 の場合、精度を上げた方法を使えば、全く誤差なしで、速さや位置を求める事ができる。 

☆2次関数の場合☆

★ 上記の精度の問題は、次の問題と同じになる。

◆ 2次関数 f(x)=a*x^2+b*x+c で、

 [f(x2)-f(x1)]/(x2-x1)=f;x((x1+x2)/2)

■ 右辺の f;x=2*a*x+b だから、

 右辺=2*a*[(x1+x2)/2]+b=a*(x1+x2)+b

 左辺=[(a*x2^2+b*x2+c)-(a*x1^2+b*x1+c)]/(x2-x1)
=[(a*(x1+x2)*(x2-x1)+b*(x2-x1)]/(x2-x1)
=(x2-x1)*[a*(x1+x2)+b]/(x2-x1)
=a*(x1+x2)+b

 左辺=右辺 』

☆お勉強しようUz☆

inserted by FC2 system