Pi Dayの場合、2つの衝突ボールを使用してPiを計算します


これは Pi Dayについて書くのは私の9年目が少なかった – ここに2010年からの投稿がある。もちろん、3/14という日付はpiの最初の3桁(3.1415…)に似ているのでPi Dayと呼ばれる。この時点で、私はPi Dayを記念して楽しいもののライブラリ全体を作り上げました。

これは新しいものです。質量の異なる2つのオブジェクトと壁の間の弾性衝突を使用して、円周率の桁数を計算できます。この図で説明しましょう。

レット・アラン

AとBの2つのボールがあります。ボールAの方が質量が大きく、最初は動いています。ボールBがスピードアップし、ボールAが少し遅くなるようにボールBと衝突します(これは完全に弾性的な衝突です)。この後、ボールBは壁に向かって動き始め、最終的には別の衝突のためにボールAに向かって跳ね返ります。これはボールAが壁に向かってではなく壁から離れて移動するまで続き、衝突は起こりません。

今度はpiの部分です。あなたがボールAの質量がボールBのそれの100倍大きいことを知っているならば、31の衝突があるでしょう。質量の比が10,000対1の場合、衝突は314回発生します。はい、それはパイの最初の3桁です。質量比が100万対1の場合、衝突数は3,141になります。 (円周率の最初の数桁が3.1415であることを忘れないでください。)一般に、円周率の "d"桁が欲しい場合は、質量Aを質量Bで割って100をd-1乗にする必要があります。

これはpiの桁数を計算するための非常に効率的な方法ではありませんが、うまくいくようです。これがこの状況を説明する3Brown1Blueからの素晴らしいビデオです。また、これはNumberphileの古いビデオで、この問題も解決しています。

これはすごいです。私はそれがどのように機能するのかさえ理解していません。しかし、それが私がここにいる理由ではありません。代わりに、この現象を数値計算でモデル化する方法を説明します。楽しくなるでしょう。

私が最初に取り組むべきことは次のようになると思います。一体何が弾性衝突ですか?衝突で考慮すべきことが本当に2つあります。運動量は質量と速度の積であるところに、物体の運動量があります。衝突する2つのオブジェクトに外力がない場合(または衝突が非常に短い時間枠で発生する場合)、衝突前のオブジェクトの合計ベクトル運動量は、衝突後の運動量と等しくなります。これを運動量の保存と呼びます。

衝突で考慮するべき他の量は運動エネルギーです。運動量と同様に、これも物体の質量と速度に依存します。しかし、2つの重要な違いがあります。第一に、運動エネルギーは質量と速度の2乗の積に比例します。第二に、運動量はベクトルなので方向を持っていますが、運動エネルギーは方向を持たないスカラーです。

ほとんどの衝突では、運動量は保存されますが、運動エネルギーは保存されません。しかし、弾性衝突と呼ばれる特殊な衝突では、運動量と運動エネルギーの両方が保存されます。これらは、piを計算するために必要な衝突です。

2つのボールが衝突する回数を調べるために運動量と運動エネルギーを使用することは確かに可能ですが、私はそれをするつもりはありません。代わりに、これを数値モデルとして行います。数値モデルでは、いくつかの基本的な計算を行い、それから問題を小さなステップの集まりに分割します。この場合、小さなステップは短い時間間隔になるでしょう、私はものが一定であると仮定します。私を信頼してください、これは働きます。

しかし、どのように衝突をモデル化しますか? 1つの方法は、ボールの中にボールがあることを装うことです(これは完全に間違っているわけではありません)。 2つのボールの半径が重なると、それらを引き離すバネ力が発生します。このばね力の大きさは、2つの物体が重なる量に比例します。このバネ力が2つの物体に作用する唯一の力になるので、運動量は保存されます。そして春に蓄えられたエネルギーはエネルギー損失がないので、運動エネルギーも保存されます。それは完全に弾力的な衝突です。

壁との衝突はどうですか?その場合は、2つのボール間の衝突に似ていますが、1つの違いがあります。壁の位置や運動量を変えさせてはいけません。壁だからです。

今数値計算のために。これは、100の質量比を持つ2つのボール間の衝突です。もう一度実行したい場合は、再生ボタンをクリックしてください。コードを見て編集したい場合は、鉛筆をクリックしてください。

できます。このモデルには31個の衝突があります。これは、piの最初の2桁です。 3桁が必要な場合はどうすればいいですか?質量を変えてみることはできますが、うまくいきません。問題は、大きなマスが小さなマスを挟んで壁に非常に近づくと、意図したとおりに物事が起こらないことです。実際には、小質量が壁と大質量の両方と同時に相互作用することがあります。これは現実的ですが、それは私たちにpiの最良の計算を与えるわけではありません。

それで、どのようにそれを修正しますか?私にはいくつかの選択肢があります(そしてあなたは宿題としてこれを試すことができます)。最初の方法は、この数値スプリングベースのモデルを修正することです。ボールが衝突したときにタイムステップ(dt)とバネ定数(k)を変更すれば、より良い答えが得られると思います。これがあなたがすることです。ボールが互いに近づくにつれて、小さなタイムステップと大きなスプリング定数を作ります。これにより、小さいボールが押しつぶされている場合にボールとボールの衝突がより正確になります。

次の選択肢は、スプリングベースの衝突モデルを放棄することです。代わりに、衝突ごとにボールの速度を解析的に計算できます。驚くべきことに、一次元の、完全に弾性的な衝突は、それほど簡単な問題ではありません。しかし、心配しないでください、私はあなたのためにそれをしました、そしてすべての詳細をカバーしました。私は、2つのオブジェクトを開始速度で受け取り、衝突後の速度を返すPython関数を作成しました。はい、私は本当にこの最後の問題についてあなたに有利なスタートを切りました。たぶん私は来年のPi Dayのためにこれを節約するつもりです。


もっと素晴らしいWIREDストーリー