福井技術者の集い その5 発表資料スライド
TRANSCRIPT
![Page 1: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/1.jpg)
UnityによるUnityによらない物理シミュレーション
@dc1394
福井技術者の集いその5発表資料スライド
![Page 2: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/2.jpg)
自己紹介
Twitter: @dc1394
C++, C#, F#そしてRubyが好きです。
趣味はプログラミングではなく数値解析。
C++で量子力学の数値計算とかやってます。
![Page 3: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/3.jpg)
概要
「できる限り厳密な」振り子の物理シミュレーション
(1)空気抵抗を無視する場合
単振動で近似できる場合
厳密解
(2)空気抵抗を考慮する場合
(3)二重振り子
![Page 4: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/4.jpg)
使用するプログラム言語、ライブラリ等
数値計算のプログラム言語はC++14を使用する。
Boost.Odeintを用いるため、Boost C++ Librariesを使用する。
コンパイラには、Microsoft Visual C++ 2015
(VC14)を使用する。
シミュレーションの可視化のために、Unity 5とC#
を使用する。
![Page 5: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/5.jpg)
単振り子とは
伸び縮みしない軽い棒の一端を固定し、他端におもりを付けて吊るし、鉛直面内で振らせるもの。
図はWikipedia[1]より引用。
[1] 単振り子 -https://ja.wikipedia.org/wiki/%E6%8C%AF%E3%82%8A%E5%AD%90
![Page 6: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/6.jpg)
単振り子の運動方程式
空気抵抗を無視したとき、左図(Wikipedia[1]より引用)より、運動方程式は、
となる。従って、
なる常微分方程式を解けば、この運動が解析できる。
[1] 単振り子 -
https://ja.wikipedia.org/wiki/%E6%8C%AF%E3%82
%8A%E5%AD%90
![Page 7: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/7.jpg)
単振動で近似できる場合
θが非常に小さい場合( )、 と近似できるので、
となる。この常微分方程式の解は、初期条件、
を用いると、 となる。
これは周期 の単振動であり、周期Tは振幅θ0に依存しない。
![Page 8: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/8.jpg)
単振動で近似した場合のプロット(θ0
= 10°)
![Page 9: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/9.jpg)
単振動で近似した場合のプロット(θ0
= 30°)
![Page 10: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/10.jpg)
単振動で近似した場合のプロット(θ0
= 60°)
![Page 11: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/11.jpg)
単振動で近似した場合のプロット(θ0
= 90°)
![Page 12: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/12.jpg)
単振動で近似した場合のプロット(θ0
= 179°)
![Page 13: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/13.jpg)
厳密解
この常微分方程式は非線形方程式であり、厳密解を初等関数で表すことはできない。
初期条件、
を用いると、厳密解は、
となる(論文[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 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/14.jpg)
厳密解の周期
同論文によると、厳密解の周期Tは、第一種完全楕円積分K(k)を用いて、
と書ける。従って、周期Tは振幅θ0に依存する。
![Page 15: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/15.jpg)
Boostライブラリに含まれる特殊関数の利用
Jacobiの楕円関数sn(u, k)は、Boostライブラリの「jacobi_sn」関数を用いれば、簡単に得られる( jacobi_sn関数では、引数の順序がsn(k, u)と逆になっていることに注意)。
また、第一種完全楕円積分K(k)は、同様に、Boost
ライブラリの「ellint_1」関数を用いれば、簡単に得られる。
![Page 16: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/16.jpg)
厳密解と単振動で近似した場合を比較したプロット(θ0 = 10°)
![Page 17: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/17.jpg)
厳密解と単振動で近似した場合を比較したプロット(θ0 = 30°)
![Page 18: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/18.jpg)
厳密解と単振動で近似した場合を比較したプロット(θ0 = 60°)
![Page 19: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/19.jpg)
厳密解と単振動で近似した場合を比較したプロット(θ0 = 90°)
![Page 20: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/20.jpg)
厳密解と単振動で近似した場合を比較したプロット(θ0 = 179°)
![Page 21: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/21.jpg)
空気抵抗を考慮する場合
空気抵抗を考慮する場合、運動方程式は、
となる。ここで、f(v)は物体の形状に依存する、極めて複雑な式であり、解析的には求められない。
そして、任意の形状の物体についてf(v)を求めるには、Navier–Stokes方程式を、与えられたvに対して数値的に解かなければならない。
これは非常に難しく、PCによるリアルタイムシミュレーションはまず不可能である。
![Page 22: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/22.jpg)
粘性抵抗と慣性抵抗
ここでは、振り子を完全な球体と近似して、それに働く空気抵抗力f(v)を考えることにする。
半径rの完全な球体に働く空気抵抗力f(v)は、以下の式で与えられる(サイト[1]より)。
ここで、sgn(x)は符号関数である。
第一項は、物体表面に平行に働く粘性力の合力であり、粘性抵抗と呼ばれる。
第二項は、物体の慣性に起因するので慣性抵抗と呼ばれる。
[1] 球体の空気抵抗と係数 - http://slpr.sakura.ne.jp/qp/air-resistance/
![Page 23: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/23.jpg)
抗力係数と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 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/24.jpg)
球の周りの流れ
球の周りの低レイノルズ数流れ。下記サイト[1]より引用。
[1] http://www.caero.mech.tohoku.ac.jp/research/IBM/Spheres.gif
![Page 25: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/25.jpg)
抗力係数のグラフ
抗力係数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 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/26.jpg)
Stokes近似
のとき、 と近似できる(Stokes近似、図の青線)。
このとき、慣性抵抗は無視できるので、考慮する必要は無い。
![Page 27: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/27.jpg)
Reynolds数が大きいとき
Reynolds数が大きい場合の に対しては、実
験結果をフィッティングした以下の表式(論文[1]より)を用いる。
[1] Nian-Sheng Cheng, Powder Technology, 189, 395 (2009).
![Page 28: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/28.jpg)
解くべき常微分方程式
以上のことから、解くべき常微分方程式は、場合分けして、
(i) のとき、
(ii)それ以外の場合、
である。
この常微分方程式は、解析的には解けない。従って、 Boost.Odeintに実装されているBulirsch-Stoer法を用いて、数値的に解く。
![Page 29: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/29.jpg)
空気抵抗を考慮した場合のプロット(θ0 = 179°)
![Page 30: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/30.jpg)
空気抵抗を考慮した場合と考慮しない場合の比較(θ0 = 179°)
![Page 31: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/31.jpg)
球に発泡スチロールを使った場合の比較(θ0 = 179°)
![Page 32: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/32.jpg)
実行画面
![Page 33: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/33.jpg)
ソースコードとバイナリへのリンク
このプログラムのソースコードは、GitHub上で公開しています。
https://github.com/dc1394/simplependulum
また、バイナリも以下で公開しています。
https://github.com/dc1394/simplependulum/releas
es/tag/v0.12
ライセンスは2条項BSDライセンスとします。
![Page 34: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/34.jpg)
二重振り子
振り子の先にもうひとつの振り子を連結したもの。
図はWikipedia[1]より引用。
[1] Double pendulum -
https://en.wikipedia.org/wiki/Doubl
e_pendulum
![Page 35: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/35.jpg)
二重振り子の運動方程式
二重振り子の運動方程式は、Lagrangianと、Euler–
Lagrange方程式から、以下のように導出できる(ただし、簡単化のために、空気抵抗等は無視し、
とする)。
詳しい計算は下記サイト[1]を参照のこと。
[1] 2重振り子 - http://www.aihara.co.jp/~taiji/pendula-equations/present-
node2.html
![Page 36: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/36.jpg)
二重振り子の運動方程式
上記の二元連立常微分方程式は、解析的には解けない。
従って、Bulirsch-Stoer法を用いて、数値的に解く。
![Page 37: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/37.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
10°)
![Page 38: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/38.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
30°)
![Page 39: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/39.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
60°)
![Page 40: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/40.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
90°)
![Page 41: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/41.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
90°)
![Page 42: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/42.jpg)
二重振り子のプロット( θ1,0= θ2,0 =
179°)
![Page 43: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/43.jpg)
θ1,0= θ2,0 = 179°と179.1°のθ1の比較
![Page 44: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/44.jpg)
θ1,0= θ2,0 = 179°と179.1°のθ2の比較
![Page 45: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/45.jpg)
実行画面
![Page 46: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/46.jpg)
ソースコードとバイナリへのリンク
このプログラムのソースコードは、GitHub上で公開しています。
https://github.com/dc1394/doublependulum
また、バイナリも以下で公開しています。
https://github.com/dc1394/doublependulum/relea
ses/tag/v0.11
ライセンスは2条項BSDライセンスとします。
![Page 47: 福井技術者の集い その5 発表資料スライド](https://reader035.vdocuments.net/reader035/viewer/2022062412/5878d93e1a28ab917a8b6b51/html5/thumbnails/47.jpg)
まとめ
以下の場合について、振り子の物理シミュレーションを行った。
(1)空気抵抗を無視する場合
単振動で近似できる場合
厳密解
(2)空気抵抗を考慮する場合
(3)二重振り子