#物理 #数楽 #Julia言語
バネで繋がった2つの質点の片方が自由な質点に弾性衝突する様子を数値計算で動画にしてみました。
衝突時に運動エネルギーがバネの振動エネルギーに移行し、非弾性衝突のようになります。
ソースコード↓
nbviewer.jupyter.org/gist/genkuroki…
ううむ、上下にマージンを入れた方が良かったな。
#Julia言語 動画を全部作り直した。
ソースコード↓
nbviewer.jupyter.org/gist/genkuroki…
丸の直径は質量の3乗根に比例しています。
添付動画では、左側から質量は 1, 1, 2 です。
真ん中の質点と右側の質点は弾性衝突しているのですが、バネにエネルギーが移動して、非弾性衝突っぽくなっています。
#Julia言語 赤いバネで繋がった質点の右の方の質量に割合を増やしたり減らしたりすると、色々面白いことが起こります。
左から質量が 0.002, 1,998, 2.000 の場合
ほぼ、弾性衝突になります。
#Julia言語
左から質量が 0.02, 1.98, 2.00 の場合
ほぼ弾性衝突なのですが、バネにほんの少しだけ運動エネルギーが移動している様子が見えます。
#Julia言語
左から質量が 1, 1, 2 の場合
衝突時にバネにエネルギーが移動しまくって、質点の動く速さが遅くなっている。
nbviewer.jupyter.org/gist/genkuroki…
#Julia言語
猫パンチ動画!
左から質量が 1.8, 0.2, 2.0 の場合
何度もネコパンチをあびせかけています。
#Julia言語
左から質量が 1.998, 0.002, 2.000 の場合
実際には超微小かつ超高速な猫パンチが発生しているはずなのですが、単に右側の質点がバネを押して互いに反発し合っているように見える。
#Julia言語
微分方程式は DifferentialEquations.jl で Yoshida6 という symplectic integrator を使って数値的に解いています。衝突も DifferentialEquations.jl で扱えます。
DifferentialEquations.jl は超便利!
数値解法を適切に選択しないとエネルギーが保存しなくなりました。
#Julia言語 たぶん、この例は DifferentialEquations.jl の基本的な使い方を知るために非常に良い例になっていると思います。
グラフのプロットや動画の作成まで全部やっている。
ソースコードへのリンクを再掲しておきます↓
nbviewer.jupyter.org/gist/genkuroki…
#Julia言語 高校で物理について勉強するときに、このスレッドで私が作って見せたような動画を自分で試行錯誤して作れれば、直観的な部分でもかなり理解が進むような気がします。
ただし、微分方程式の取り扱いが必須になる。
#Julia言語 DifferentialEquations.jlでは、微分方程式ではなく、ハミルトニアン函数を与えて正準方程式を数値的に解かせることもできます。デフォルトで沢山のsymplectic integratorsを使えます。
#Julia言語
以下のリンク先の動画のように質点の弾性衝突が1回だけの場合の exact solution を求めるのは易しいです。しかし、複数回衝突する場合は面倒。
その様子を見たくて、DifferentialEquations.jl で数値的に解いてみました。かけた手間の大部分がプロット用コードの部分です。
色々満足!
#Julia言語 は以上のような話題について、「コンピュータを使って問題を解決する」というようなことに関する教育に非常に向いていると思います。
まずは高校や大学で普及するとよいと思います。
MIT周辺ではたぶんすでにそうなっている。
お気楽極楽で高速計算を楽しめる。
#物理 #数楽 #Julia言語
左から右に質点の質量の比を a : 1-a : 1 と書くとき、上から順に a の値は
0.01, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99
です。バネで繋がった2つの質点の片方と自由な質点が弾性衝突しているが、全体的には被弾性衝突に見える。
nbviewer.jupyter.org/gist/genkuroki…
#物理 #数楽 #Julia言語
質点の表示の丸の直径は質量の3乗根に比例
質量比は a : 1-a : 1 で、上から順に
a = 0.01, 0.1, 0.2, …, 0.8, 0.9, 0.99
一番上の a = 0.01 はバネがない場合の弾性衝突とほぼ同じ。
a = 0.1, …, 0.5 では有効反発係数が単調に下がっている。
nbviewer.jupyter.org/gist/genkuroki…
#物理 #数楽 質点の衝突は弾性衝突と仮定しているので、最初の衝突時の「有効反発係数」e を得るためには、質量比 1-a : 1 の2つの質点が左右から同じ速さでやって来て弾性衝突をする場合を計算すればよいので、
e = (2 - 3a)/(2 - a) = 1 - 2a/(2 - a)
となることが分かります。
#物理 #数楽 質点の質量比が a : 1-a : 1 の場合を扱っている。
aが0に近い場合には「左端の質点が無い場合」に近い結果になることは自明だと思う。
非自明で面白いのは 、a が1に近くて、バネの右側に繋がっている質点の質量が 0 に近い場合。添付画像は a=0.999 の場合。
#物理 #数楽 1つ前の動画の a=0.999 の動画では見えないのですが、バネに繋がった小さな質量の質点と右側からやって来た質点は弾性衝突を何度も繰り返しています。
以下の添付画像は a=0.9 の場合。
猫パンチのごとく、何度も衝突を繰り返していることがわかります。
#物理 #数楽 もう一度 a=0.999 の場合の動画を見てみましょう。
小さな赤い質点と青の質点が弾性衝突を繰り返しているようには見えず、青の質点が単にバネを押して反発しているように見える。
単にバネを押して反発する場合も数値解を求めてみました。(数値解にする必要は皆無だがあえてそうする。)
#物理 #数楽 #Julia言語
グラフの左側は「単にバネを押して反発する設定」で、右側は「バネの右端の微小な質点と右側から来る質点が弾性衝突する設定」(a=0.999)です。
真ん中の微小な質点を無視すればよく一致していることが分かります。
めでたしめでたし😊
nbviewer.jupyter.org/gist/genkuroki…
#Julia言語 DifferentialEquations.jl
この動画が弾性衝突を扱っているとは普通思わないよな。
nbviewer.jupyter.org/gist/genkuroki…
Share this Scrolly Tale with your friends.
A Scrolly Tale is a new way to read Twitter threads with a more visually immersive experience.
Discover more beautiful Scrolly Tales like this.