Main Content

衝突する塊を使用したπの計算

この例では、よく知られた物理学の問題を使用し、1 秒もかからず発生する数万件の瞬時イベントを捕捉することで、ソルバーのパフォーマンスを示します。1 次元のパスで、大きい塊が、向こう側の壁によって制限されている小さい塊に近づきます。大きい塊が小さい塊に当たると、小さい塊が壁にぶつかって跳ね返り、方向を逆にして大きい塊に向かいます。各衝突は完全な弾性衝突です。大きい塊が壁に近づくにつれ、小さい塊と衝突する間隔が短くなります。そのうち、大きい塊が方向を逆にし、最終的には小さい塊が追いつくことのできない速度で逆方向に移動します。

大きい塊が小さい塊より 100^n 倍大きい場合、正確な合計衝突回数は、π の最初の n+1 桁になります。この結果になるのは、エネルギーの保存と運動量の保存の関係のためです。直交座標系に 2 つの塊の運動エネルギーの平方根をプロットすると、システムは 2 つの塊の合計エネルギーに依存する半径をもつ円周に沿った点に常に存在することになります。衝突するごとに、システムは円周上の片側からもう片側にある新しい点に移動します。壁と衝突すると、点は垂直に移動します。大きい塊と衝突すると、点は質量比の負の平方根に等しい勾配で移動します。

このモデルでは、反発係数設定をもつ Hard Stop ブロックを使用して弾性衝突を表します。ソルバーは 0.4 秒で合計 31,415 回の衝突を捕捉します。Collision Counter ブロックは、衝突イベントを捕捉するために設計されたカスタム ブロックです。

モデル

Scope からのシミュレーション結果

Simscape ログからのシミュレーション結果

次の図は、2 つの塊の位置と速度をプロットしたものです。小さい塊が壁または大きい塊に衝突するたびの速度の瞬時の変化、および小さい塊が大きい塊の方向を逆にしたときの大きい塊の速度の変化が示されています。

Simscape ログの結果のアニメーション

次の図は、時系列に沿って衝突する塊の位置を示しています。中央にある赤いブロックが小さい塊を表しており、上にある青いブロックが大きい塊を表しています。下にあるグレーのブロックは壁を表しています。