福井技術者の集い その5 発表資料スライド

47
UnityによるUnityによらない物理シミュレーショ @dc1394 福井技術者の集い その5 発表資料ス ライド

Upload: dc1394

Post on 13-Jan-2017

405 views

Category:

Education


3 download

TRANSCRIPT

Page 1: 福井技術者の集い その5 発表資料スライド

UnityによるUnityによらない物理シミュレーション

@dc1394

福井技術者の集いその5発表資料スライド

Page 2: 福井技術者の集い その5 発表資料スライド

自己紹介

Twitter: @dc1394

C++, C#, F#そしてRubyが好きです。

趣味はプログラミングではなく数値解析。

C++で量子力学の数値計算とかやってます。

Page 3: 福井技術者の集い その5 発表資料スライド

概要

「できる限り厳密な」振り子の物理シミュレーション

(1)空気抵抗を無視する場合

単振動で近似できる場合

厳密解

(2)空気抵抗を考慮する場合

(3)二重振り子

Page 4: 福井技術者の集い その5 発表資料スライド

使用するプログラム言語、ライブラリ等

数値計算のプログラム言語はC++14を使用する。

Boost.Odeintを用いるため、Boost C++ Librariesを使用する。

コンパイラには、Microsoft Visual C++ 2015

(VC14)を使用する。

シミュレーションの可視化のために、Unity 5とC#

を使用する。

Page 5: 福井技術者の集い その5 発表資料スライド

単振り子とは

伸び縮みしない軽い棒の一端を固定し、他端におもりを付けて吊るし、鉛直面内で振らせるもの。

図はWikipedia[1]より引用。

[1] 単振り子 -https://ja.wikipedia.org/wiki/%E6%8C%AF%E3%82%8A%E5%AD%90

Page 6: 福井技術者の集い その5 発表資料スライド

単振り子の運動方程式

空気抵抗を無視したとき、左図(Wikipedia[1]より引用)より、運動方程式は、

となる。従って、

なる常微分方程式を解けば、この運動が解析できる。

[1] 単振り子 -

https://ja.wikipedia.org/wiki/%E6%8C%AF%E3%82

%8A%E5%AD%90

Page 7: 福井技術者の集い その5 発表資料スライド

単振動で近似できる場合

θが非常に小さい場合( )、 と近似できるので、

となる。この常微分方程式の解は、初期条件、

を用いると、 となる。

これは周期 の単振動であり、周期Tは振幅θ0に依存しない。

Page 8: 福井技術者の集い その5 発表資料スライド

単振動で近似した場合のプロット(θ0

= 10°)

Page 9: 福井技術者の集い その5 発表資料スライド

単振動で近似した場合のプロット(θ0

= 30°)

Page 10: 福井技術者の集い その5 発表資料スライド

単振動で近似した場合のプロット(θ0

= 60°)

Page 11: 福井技術者の集い その5 発表資料スライド

単振動で近似した場合のプロット(θ0

= 90°)

Page 12: 福井技術者の集い その5 発表資料スライド

単振動で近似した場合のプロット(θ0

= 179°)

Page 13: 福井技術者の集い その5 発表資料スライド

厳密解

この常微分方程式は非線形方程式であり、厳密解を初等関数で表すことはできない。

初期条件、

を用いると、厳密解は、

となる(論文[1]より)。ここで、sn(u, k)はJacobiの楕円関数であり、K(k)は第一種完全楕円積分である。

[1] A. Beléndez et al., Revista Brasileira de Ensino de Física, 29, 645 (2007).

Page 14: 福井技術者の集い その5 発表資料スライド

厳密解の周期

同論文によると、厳密解の周期Tは、第一種完全楕円積分K(k)を用いて、

と書ける。従って、周期Tは振幅θ0に依存する。

Page 15: 福井技術者の集い その5 発表資料スライド

Boostライブラリに含まれる特殊関数の利用

Jacobiの楕円関数sn(u, k)は、Boostライブラリの「jacobi_sn」関数を用いれば、簡単に得られる( jacobi_sn関数では、引数の順序がsn(k, u)と逆になっていることに注意)。

また、第一種完全楕円積分K(k)は、同様に、Boost

ライブラリの「ellint_1」関数を用いれば、簡単に得られる。

Page 16: 福井技術者の集い その5 発表資料スライド

厳密解と単振動で近似した場合を比較したプロット(θ0 = 10°)

Page 17: 福井技術者の集い その5 発表資料スライド

厳密解と単振動で近似した場合を比較したプロット(θ0 = 30°)

Page 18: 福井技術者の集い その5 発表資料スライド

厳密解と単振動で近似した場合を比較したプロット(θ0 = 60°)

Page 19: 福井技術者の集い その5 発表資料スライド

厳密解と単振動で近似した場合を比較したプロット(θ0 = 90°)

Page 20: 福井技術者の集い その5 発表資料スライド

厳密解と単振動で近似した場合を比較したプロット(θ0 = 179°)

Page 21: 福井技術者の集い その5 発表資料スライド

空気抵抗を考慮する場合

空気抵抗を考慮する場合、運動方程式は、

となる。ここで、f(v)は物体の形状に依存する、極めて複雑な式であり、解析的には求められない。

そして、任意の形状の物体についてf(v)を求めるには、Navier–Stokes方程式を、与えられたvに対して数値的に解かなければならない。

これは非常に難しく、PCによるリアルタイムシミュレーションはまず不可能である。

Page 22: 福井技術者の集い その5 発表資料スライド

粘性抵抗と慣性抵抗

ここでは、振り子を完全な球体と近似して、それに働く空気抵抗力f(v)を考えることにする。

半径rの完全な球体に働く空気抵抗力f(v)は、以下の式で与えられる(サイト[1]より)。

ここで、sgn(x)は符号関数である。

第一項は、物体表面に平行に働く粘性力の合力であり、粘性抵抗と呼ばれる。

第二項は、物体の慣性に起因するので慣性抵抗と呼ばれる。

[1] 球体の空気抵抗と係数 - http://slpr.sakura.ne.jp/qp/air-resistance/

Page 23: 福井技術者の集い その5 発表資料スライド

抗力係数とReynolds数

ここで、 μ [kg⋅m−1⋅s−1]:流体の粘性係数(粘度) ρ [kg⋅m−3]:流体の密度 CD:抗力係数と呼ばれ、下記Reynolds数の関数 Re:Reynolds数と呼ばれる無次元量であり、 として定義される

なお、20℃の空気の場合、 μ = 1.822×10−5(kg⋅m−1⋅s−1), ρ = 1.205(kg⋅m−3)

である(出典:サイト[1]より)

[1] 水・空気の物性 密度 粘度 動粘度 - http://www.mterm-pro.com/machine-yougo/fluid-dynamics/water-air-bussei.html

Page 24: 福井技術者の集い その5 発表資料スライド

球の周りの流れ

球の周りの低レイノルズ数流れ。下記サイト[1]より引用。

[1] http://www.caero.mech.tohoku.ac.jp/research/IBM/Spheres.gif

Page 25: 福井技術者の集い その5 発表資料スライド

抗力係数のグラフ

抗力係数CDは、Reynolds数の値により複雑に変化する(下図はWikimedia Commons[1]より引用)。

[1]https://commons.wikimedia.org/wiki/File:Drag_coefficient_of_a_sphere_as_a_function_of_Reynolds_number.png

Page 26: 福井技術者の集い その5 発表資料スライド

Stokes近似

のとき、 と近似できる(Stokes近似、図の青線)。

このとき、慣性抵抗は無視できるので、考慮する必要は無い。

Page 27: 福井技術者の集い その5 発表資料スライド

Reynolds数が大きいとき

Reynolds数が大きい場合の に対しては、実

験結果をフィッティングした以下の表式(論文[1]より)を用いる。

[1] Nian-Sheng Cheng, Powder Technology, 189, 395 (2009).

Page 28: 福井技術者の集い その5 発表資料スライド

解くべき常微分方程式

以上のことから、解くべき常微分方程式は、場合分けして、

(i) のとき、

(ii)それ以外の場合、

である。

この常微分方程式は、解析的には解けない。従って、 Boost.Odeintに実装されているBulirsch-Stoer法を用いて、数値的に解く。

Page 29: 福井技術者の集い その5 発表資料スライド

空気抵抗を考慮した場合のプロット(θ0 = 179°)

Page 30: 福井技術者の集い その5 発表資料スライド

空気抵抗を考慮した場合と考慮しない場合の比較(θ0 = 179°)

Page 31: 福井技術者の集い その5 発表資料スライド

球に発泡スチロールを使った場合の比較(θ0 = 179°)

Page 32: 福井技術者の集い その5 発表資料スライド

実行画面

Page 33: 福井技術者の集い その5 発表資料スライド

ソースコードとバイナリへのリンク

このプログラムのソースコードは、GitHub上で公開しています。

https://github.com/dc1394/simplependulum

また、バイナリも以下で公開しています。

https://github.com/dc1394/simplependulum/releas

es/tag/v0.12

ライセンスは2条項BSDライセンスとします。

Page 34: 福井技術者の集い その5 発表資料スライド

二重振り子

振り子の先にもうひとつの振り子を連結したもの。

図はWikipedia[1]より引用。

[1] Double pendulum -

https://en.wikipedia.org/wiki/Doubl

e_pendulum

Page 35: 福井技術者の集い その5 発表資料スライド

二重振り子の運動方程式

二重振り子の運動方程式は、Lagrangianと、Euler–

Lagrange方程式から、以下のように導出できる(ただし、簡単化のために、空気抵抗等は無視し、

とする)。

詳しい計算は下記サイト[1]を参照のこと。

[1] 2重振り子 - http://www.aihara.co.jp/~taiji/pendula-equations/present-

node2.html

Page 36: 福井技術者の集い その5 発表資料スライド

二重振り子の運動方程式

上記の二元連立常微分方程式は、解析的には解けない。

従って、Bulirsch-Stoer法を用いて、数値的に解く。

Page 37: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

10°)

Page 38: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

30°)

Page 39: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

60°)

Page 40: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

90°)

Page 41: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

90°)

Page 42: 福井技術者の集い その5 発表資料スライド

二重振り子のプロット( θ1,0= θ2,0 =

179°)

Page 43: 福井技術者の集い その5 発表資料スライド

θ1,0= θ2,0 = 179°と179.1°のθ1の比較

Page 44: 福井技術者の集い その5 発表資料スライド

θ1,0= θ2,0 = 179°と179.1°のθ2の比較

Page 45: 福井技術者の集い その5 発表資料スライド

実行画面

Page 46: 福井技術者の集い その5 発表資料スライド

ソースコードとバイナリへのリンク

このプログラムのソースコードは、GitHub上で公開しています。

https://github.com/dc1394/doublependulum

また、バイナリも以下で公開しています。

https://github.com/dc1394/doublependulum/relea

ses/tag/v0.11

ライセンスは2条項BSDライセンスとします。

Page 47: 福井技術者の集い その5 発表資料スライド

まとめ

以下の場合について、振り子の物理シミュレーションを行った。

(1)空気抵抗を無視する場合

単振動で近似できる場合

厳密解

(2)空気抵抗を考慮する場合

(3)二重振り子