数式かコードか?物理学はすべて数字だ

数式かコードか?物理学はすべて数字だ

物理学では、誰もが既にコンピュータを使用しています。少なくとも学生はハンディタイプの電卓を使っています(計算尺式の電卓を使っている人はいないでしょう)。また、学生が独自のプログラムを作成してコーディングすることで物理学の問題を解くことも一般的になりつつあり、これは良いことだと思います。数値計算(計算物理学の別名)に馴染みのない方のために説明すると、基本的な考え方は、問題を多数のより小さく単純な問題に分割することです。これらの小さな問題は解きやすいですが、計算量が非常に多いため、基本的にコンピュータプログラムを作成して解く必要があります(ただし、技術的にはコンピュータを使用する必要はありません)。

しかし、数値解析手法がより一般的になるにつれ、科学の本質という観点から、これらの手法の役割についても議論する必要が生じています。「計算手法は物理学におけるツールセットを拡張します。今や科学は実験、理論、そして計算という3つの要素から成り立っています。」といった言葉をよく目にします。

しかし、これは全く正しくありません。科学を3つの異なる部分に分けることはできません。計算手法と理論は、実際には計算の2つのバージョンに過ぎず、実際にはそれほど違いはありません。これらがどのように同じなのかを説明していきますが、まず科学の本質について明確にしておきましょう。科学とは、モデルの構築と検証のことです。私たちは宇宙の仕組みに関するモデルを作成し、それを実験的証拠を用いて検証します。これらのモデルは、実際の物理モデル(地球儀など)、概念モデル、方程式、あるいはコンピュータプログラムなど、様々な形態をとることができます。つまり、「理論」と「計算」はどちらもモデルなのです。

まずは、バネにつながれた質量から始めましょう。正直に言うと、物理学者はこの状況が大好きです。解くのは簡単ですが、複雑なので、他の多くのものをバネにつながれた質量として近似することができます。例えば、ブロックがテーブルの上に置かれているとき、接触力はバネとしてモデル化できます。固体中の原子間の相互作用でさえ、バネ力として近似できます。実のところ、この問題はどこにでもあります。しかし、ここでは最も基本的な形で示します。

ビデオ: レット・アラン

この問題を2つの方法で解きます。まず、問題を小さな部分に分割して数値的に解きます(Pythonコードも使います)。次に、解析解を求めます。解析解とは、例えばコサイン関数のような閉関数の解です。これにより、任意の数値やパラメータを入力して、複数の解を得ることができます。最後に、この2つの方法は実際にはそれほど違いがないことをお伝えします。

数値解

バネに接続された質量の数値モデルを構築するには、バネが及ぼす力を表す式が必要です。バネを引っ張ると、バネはある力で引き戻されます。バネを伸ばせば伸ばすほど、引っ張る力は大きくなります。質量の位置が変数xで与えられ、それがバネの伸びでもあるとします。この場合、バネの力(1次元)は次のようになります。

フック法

イラスト: レット・アラン

この式において、kはバネの硬さを表す尺度(バネ定数)です。負の符号は、バネを正のx方向に引っ張ると、力は負の方向に引っ張られることを意味します。さて、質量には力が作用しています。力は物体にどのような影響を与えるのでしょうか?それは速度の変化を引き起こします。これはニュートンの第二法則(これも1次元の場合)で確認できます。

正味の力は質量×加速度に等しい

イラスト: レット・アラン

ここで、加速度は速度の変化率として定義され、速度は位置の変化率です。

aはvの変化÷tの変化に等しい

イラスト: レット・アラン

でも、これで問題がお分かりいただけたかもしれません。バネの力によって質量の速度が変わり、速度によって位置が変わり、それによって力が変わります。これは一見、解くことのできない循環的な問題のように見えますが(実際には不可能ではありません)、数値計算の鍵となるのは、この問題を短い時間間隔に分割することです。それぞれの時間間隔において、以下の操作を実行できます。

  • 質量の位置を使用して力を計算します。
  • この期間中、この力は一定であると仮定して、時間間隔の終了時の速度を求めます。
  • ここでも速度は一定であると仮定して、質量の新しい位置を計算します。
  • 必要なだけ、またはコンピュータが爆発するまで、これらの手順を繰り返します。

はい、これが計算の短縮版です。詳細を知りたい方は、こちらの古い投稿をご覧ください。

さて、あとはこれらの計算の指示を人間の言語からPythonに変換するだけです(それほど難しくはありません)。ただし、数値計算には数値が必要であることを覚えておくことが重要です。そうです、プロセスの各ステップでは、前の時間間隔の数値を使って新しいものを見つけます。つまり、位置、速度、質量、バネ定数の値が必要です。使用する任意の数値は次のとおりです(必要に応じて、以下のコードでこれらの数値を変更してください)。

  • 質量 = 0.1 kg
  • バネ定数 = 5 N/m
  • 初期速度 = 0 m/s
  • 初期位置 = 0.03 m

各時間間隔における質量の位置をプロットすると、次のグラフが得られます。注:これは単なるグラフではなく、実際のコードです。「鉛筆」アイコンをクリックすると、プログラムが表示され、値を変更することもできます。

質量が前後に振動して、非常に美しく滑らかなグラフが生成されていることがわかります。

解析解

では、もう一度この問題を解いてみましょう。ただし、コンピューターは使いません。注意:少し数学的な要素が出てきます。特に、微分を使います。全部理解する必要はありません。ただ、これが正しいと信じてください。

もう一度、ニュートンの第2法則とバネによって及ぼされる力から始めます。

m 掛ける a は負の k 掛ける x に等しい

イラスト: レット・アラン

加速度を速度の変化率と定義する代わりに、速度の時間微分と定義することもできます。すると、速度は位置の時間微分になります。つまり、加速度は位置の2階微分です。はい、他にも微分はあります。大丈夫です。

2階微分は常にk÷m×xに等しい

イラスト: レット・アラン

はい、両辺を質量で割って、2次導関数を単独で求めました。厳密に言うと、これは微分方程式です。でも、ちょっと待ってください。少し考えれば解けます。この方程式は、xの関数があることを示しています。この関数を2回微分すると、-k/mという係数が加わった同じ関数が得られます。微分して似たような結果が得られる関数にはどんなものがあるでしょうか?いくつか使える関数はありますが、私は余弦関数を使うことにします。次のような解を推測してみましょう。

x/tはA/ωtのcosに等しい

イラスト: レット・アラン

この式では、Aとωは単なる定数です。1次導関数と2次導関数を取ると、次のようになります。

画像にはテキストや手書きが含まれている場合があります

この機能が動作するには、定数 ω がバネ定数と質量に関連付けられている必要があります。

オメガはkをmで割った値の平方根である。

イラスト: レット・アラン

定数Aの値は、t = 0秒の時点でx座標が0.03メートル(前の例から)であることを知っていれば得られます。しかし、これはAがコサイン関数の振幅であることを意味します。さあ、できました!これで振動質量の位置が求められました。ああ、見てください。上の数値解もコサイン関数と全く同じように見えます。実際、この2つの方法で同じ数値が得られるというのは、実に素晴らしいことです。

でも、それらは違うんですよね?数値解法では、ただのコサイン関数のプロットが得られるだけです。ただの数字です。解析解法では三角関数が得られます。コサイン関数は上下に振動するので、数値を入力しなくても解が上下に振動していることがわかります。大きな違いですよね?それとも違いますか?

元の値に戻りましょう。1.0秒後(この数字を選びました)の質量の正確な位置を知りたい場合はどうすればよいでしょうか。数値解の場合は、グラフを見て、t = 1.0秒の時点のデータの値を調べればよいのです(約0.0201メートルです)。解析解の場合はどうでしょうか?まず、これらの定数を計算する必要があります。Aの値は0.03メートルです。定数ωは7.07ラジアン/秒です。素晴らしいですね。あとは、ωに1秒の時間を掛けて、その余弦を取るだけです。

ああ、困った。7.07のコサインはどうやって取るの?確かに、電卓に数値を入力すれば答えは出る。でも、電卓は実質的にミニコンピュータみたいなもの(この場合は文字通り!)。ある関数のコサインを取るのは、実はそんなに簡単じゃないんだ。ちょっと説明しよう。

さあ、電卓を用意しましょう。電卓がラジアンモードになっていることを確認し、7.07と入力して「cos」ボタンを押してください。すると、0.706104のような数値が表示されます。でも、どうやってその数値を求めるのでしょうか? 実は、2つの方法があります(あなたの電卓がどちらを採用しているかは分かりません)。1つ目は「ルックアップ」テーブルを使う方法です。これは文字通り、0から2πまでの数値とコサインの値のリストです。コサインは周期関数なので、2πより大きい任意の値から2πを引いて、ルックアップテーブルを使うことができます。

2つ目の選択肢は…ちょっと待ってください…数値計算です。確かに、コサインの値は簡単な計算をいくつか組み合わせることで計算できます。古くからある(そして最も一般的な)方法の一つに、CORDICアルゴリズムがあります。しかし、実際には、値のコサインを計算するには、表で調べるか数値計算を行う以外に方法はありません。

さあ、ここに来ました。科学のモデルの性質に戻りましょう。バネ上の質量の運動を求めるのにPythonを使うか微分方程式を使うかは関係ありません。それはあくまでモデルであり、この2つの方法は実際にはそれほど違いはありません。好むと好まざるとにかかわらず、すべて数値的なものです。


WIREDのその他の素晴らしい記事

  • 📩 テクノロジー、科学、その他の最新情報を知りたいですか?ニュースレターにご登録ください!
  • 穏やかに話し、巨大なサイバー軍を指揮する男
  • Amazonは「ゲームで勝つ」ことを望んでいる。では、なぜそれが実現していないのだろうか?
  • 森の床の遊び場が子供と細菌について教えてくれること
  • 図書館の仮想棚から電子書籍が消えていくことに出版社は懸念を抱いている
  • PCゲームで調整する価値のある5つのグラフィック設定
  • 🎮 WIRED Games: 最新のヒントやレビューなどを入手
  • 🏃🏽‍♀️ 健康になるための最高のツールをお探しですか?ギアチームが選んだ最高のフィットネストラッカー、ランニングギア(シューズとソックスを含む)、最高のヘッドフォンをご覧ください