最近の「怪しい伝説」のエピソードで、ブライアンとジョン(新怪しい伝説)は、矢を真上に放つと何が起こるかを調べようとしていました。矢は当然戻ってきますが、それでも人を殺せるほどの速度で飛んでいるでしょうか?怪しい伝説の探求者なら、実際に矢を真上に放ち、着弾時の速度を測定するのが最善策でしょう。しかし、普通の人なら、最終的な矢の速度を計算する方がよいかもしれません。ちなみに、私は現在この番組の科学コンサルタントを務めています。
では、基本的な物理学の問題から始めましょう。300フィート(91.4メートル)の高さから物体を落とした場合、どれくらいの速度で移動するでしょうか?物体が自由落下しているときは、重力だけが作用します。加速度と重力はどちらも質量に依存するため、すべての物体は質量に関係なく同じ加速度で落下し、速度はg = 9.8 m/s 2となります。もちろん、これは空気抵抗を無視した場合に限られますが、その点については後ほど説明します。
物体が垂直位置 y = hから出発し、開始速度 0 m/s で y = 0 メートルで終了した場合、最終速度は次の式で求められます。運動学についてさらに詳しく知りたい場合は、こちらのリソースをご覧ください。

開始高度を91.4メートルとすると、最終速度は毎秒42.3メートル(時速94.6マイル)となります。これは矢の動きをかなり正確に推定していることがわかります。しかし、この分析では重要な側面、つまり空気抵抗が考慮されていません。物体が空気中を移動すると、物体の速度と反対方向に押し返す力が働きます。この空気抵抗の大きさは速度とともに大きくなり、空気の状態や物体の大きさにも依存します。この空気抵抗は、次の式で表すことができます。

vは当然ながら物体の速度、Cは物体の形状に依存する係数、Aは断面積、 ρ は空気の密度です。
空気抵抗は確かに問題ないのですが、落下する矢に大きな問題を引き起こします。矢は落下するにつれて速度が増していきます。速度が増加すると、抗力も増加します。つまり、落下する矢は一定ではない力と一定ではない加速度を持つことになります。通常の入門レベルの物理学の運動方程式(上記で使用したようなもの)は、一定加速度の場合にしか適用できません。つまり、この落下する矢の問題を解決するには、何らかのトリックが必要になります。確かに、本質的にはズルをする必要があります。しかし、それがうまくいくのであれば、それはズルとは言えません。
ここで用いる手法はオイラー法と呼ばれます。基本的な考え方は、落下する矢の問題を多くの小さな問題に分割することです。矢を地面まで落下させるのではなく、ごく短い時間、例えば0.01秒間だけ落下させます。この短い時間の間、落下する物体の速度はあまり変化しません(非常に短い時間であるため)。つまり、空気抵抗もあまり変化しないということです。実際、この時間の間、この力は一定であると近似できます。これで、私たちが扱える問題、つまり一定の力による運動に戻りました。
しかし、私たちは大きな犠牲を払いました。短い時間間隔を選ぶことで計算はできますが、解決すべき問題が山積みになっています。物体の動きを1秒という長い時間間隔でモデル化したい場合、(0.01秒という小さなステップを使って)100回の計算をしなければなりません。これだけの計算量では、かなり大変です。そんなに多くの計算はしたくないので、やめておこうと思います。コンピューターにやらせるつもりです。
心配しないでください。この装置を動かすのにプログラミングの達人になる必要はありませんが、コンピュータプログラムを書く必要があります。正直なところ、あなたが思っているほど難しくはありません。それに、誰もが(少なくとも少しは)コンピュータをプログラムできるべきだと私は考えています。これがコンピュータプログラムの基本的な(ごく基本的な)計画です。0.01秒という小さな時間ステップごとに、物体にかかる力の合計を計算します。次に、その力の合計を使って、この時間間隔の終了時における物体の加速度と速度を計算します。最後に、この最終速度を使って、時間間隔の終了時における物体の位置を計算します。あとは、物体が地面に着くまで、コンピュータにこれらの計算を繰り返させるだけです。
さあ、始めましょう。こちらがPythonで書かれたコードです。さあ、コードを実行して(再生ボタンをクリックして)、何が起こるか見てみましょう。
もう少しコメントすべき点があります。コード行にナンバー記号(#)があると、それ以降の部分はコメントとして扱われ、コンピューターはそれを無視します(コメントは人間だけが使うものです)。何が起こっているのかがわかるように十分なコメントを付けることにしましたが、それよりも重要なのは、コードの中で変更した方が良い箇所を指摘している点です。確かに、何かを変更して再度実行し、何が起こるかを確認してみる価値はあります。もちろん、何かを永久に壊してしまうことはできませんが、矢印の質量や抗力係数などを変えてみるのも良いでしょう。きっと楽しいですよ。
ああ、でもコード内の「終端速度」の計算はどうなっているのでしょうか?物体が落下すると速度が増し、空気抵抗も増加します。ある時点で空気抵抗は重力とほぼ同じ大きさになり、物体にかかる力の合計はほぼゼロニュートンになります。正味の力がゼロになると、加速度はゼロになり、物体は一定の速度で落下します。これを終端速度と呼びます。なぜこれが重要なのでしょうか?最終的な速度が終端速度に比べて非常に小さい場合、空気抵抗はほぼ無視でき、オイラー法は全く使用しなくて済みます。これは単に、実験的に使える方法の一つに過ぎないからです。
次は少し変わった例です。矢印が上下に動く動きをモデル化したい場合はどうすればよいでしょうか?さらに、比較のために、同じ速度で動き始めるものの空気抵抗がないオブジェクトも追加します。その様子は以下のようになります。「鉛筆」アイコンをクリックすると、コードを表示・編集できます。
覚えておいてください、空気抵抗の値の一部は推定値です。実際には、最も推定が難しいパラメータは抗力係数(C)です。それでも、数値モデル全体は近似値として十分に優れているように見えます。
しかし最終的に、この数値モデル(こういう計算のことをそう呼びます)は、怪しい伝説のミステリーハンターがカメラを使って測定した最終的な矢の速度とほぼ一致しました。あ、もし現実世界で試してみたいという方がいらっしゃいましたら、やめてください。彼らはまた、この矢の速度が致命的になる可能性があることも発見しました。