ロケットが宇宙へ飛び立つ原理、自動車のブレーキで体が前に押し出される感覚、手から離れたりんごが地面へ落ちる仕組み — これらは全て、たった3つの法則で統一的に説明できます。それがニュートンの運動の3法則です。
1687年にアイザック・ニュートンが著書『自然哲学の数学的諸原理(プリンキピア)』で発表したこの3法則は、古典力学の根幹を成す基本原理です。300年以上が経った現在でも、橋やビルの構造設計、人工衛星の軌道計算、自動車の衝突安全設計、ロボットの制御に至るまで、工学のあらゆる分野でこの法則が日常的に使われ続けています。
「力学なんて高校でやった」と思う方もいるかもしれません。しかし、ニュートンの法則を数式で厳密に理解し、微分方程式として解く能力は、大学以降の物理学や工学のほぼ全ての領域の出発点です。たとえば、宇宙ステーションの軌道を予測する問題も、自動運転車のブレーキ制御を設計する問題も、出発点は同じ $\bm{F} = m\bm{a}$ という方程式です。応用先として具体的に挙げると、次のようなものがあります。
- ロケット工学・軌道力学: 質量が時間とともに変化するロケットの推進を、運動量形式の第2法則で解析します。打上げ時のステージング最適化や万有引力とケプラーの法則による軌道設計もここから始まります
- 構造設計・材料力学: 建物や橋に作用する力の釣り合い(第1法則の静力学的側面)と、部材内部の応力とひずみの関係を解析します
- 制御工学: 機械系の運動方程式を立てたうえでフィードバック制御を設計するには、第2法則を正確に立式する力が欠かせません
- スポーツ科学: 投球や走行の動作分析は、人体の各セグメントに対して運動方程式を立てることで行います
本記事では、これらの基盤となるニュートンの3法則を、直感的なイメージから出発し、数学的な定式化、具体例の計算、そしてPythonシミュレーションまでを丁寧に解説します。
本記事の内容
- 第1法則(慣性の法則)の直感的理解と数学的定式化
- 第2法則(運動方程式)の一般形と成分表示、具体的な解法
- 第3法則(作用反作用の法則)とその応用
- 自由落下、空気抵抗付き落下、斜面運動、放物運動の解析
- ロケット推進のモデリング
- Pythonによる各種運動シミュレーション
前提知識
この記事を読む前に、以下の概念を理解しておくと良いでしょう。
- ベクトルの基本演算(和、スカラー倍、内積)
- 微分の基本(速度が位置の時間微分、加速度が速度の時間微分であること)
- 微分方程式の初歩的な解法(変数分離法)があるとなお望ましいですが、記事内で丁寧に解きますので必須ではありません
第1法則(慣性の法則)
直感的な理解 — 宇宙空間での思考実験
まずは、日常を離れた場所を想像してみましょう。あなたは宇宙ステーションの船外にいて、手にボールを持っています。そっとボールを前方に押し出したら、ボールはどうなるでしょうか?
答えは「どこまでも一直線に、同じ速さで飛んでいく」です。宇宙空間には空気がないため空気抵抗もなく、地面がないため摩擦もありません。ボールを加速させるものも減速させるものも何もないのですから、一度動き出したボールは永遠に同じ速度で直進し続けます。
逆に、宇宙空間に静止しているボールを誰も触らなければ、ボールは永遠にその場にとどまります。
「そんなの当たり前じゃないか」と感じるかもしれません。しかし、これは地上の直感とは真逆です。地上でボールを転がすと、必ず減速して止まりますよね。私たちの日常的な直感は「物体は放っておけば止まる」というものです。しかし実は、それは摩擦力や空気抵抗という外力が物体を減速させているからであって、物体そのものの本質的な性質ではありません。
この「物体は外力がなければ現在の運動状態を維持し続ける」という性質を慣性と呼びます。これがニュートンの第1法則の核心です。
日常で体験する慣性
慣性は私たちの身近にも溢れています。
- 電車が急ブレーキをかけたとき: 体が前に倒れそうになるのは、体が「それまでの速度で動き続けようとする」慣性を持っているからです。電車は減速しても、あなたの体はそのまま前に進もうとします
- テーブルクロス引き: テーブルクロスを素早く引くと、上の食器はその場に残ります。クロスとの接触時間が短すぎて、食器を動かすのに十分な力が伝わらないため、食器は慣性で静止し続けます
- 自動車のシートベルト: 衝突時に体が前方に飛び出すのを防ぐのが目的です。車は止まっても、体は慣性で動き続けようとするからこそ、シートベルトが必要なのです
数学的定式化
この直感を数式で表現しましょう。物体に作用する全ての外力の合力が零ベクトルであるとき、物体の速度は一定に保たれます。
$$ \begin{equation} \sum \bm{F} = \bm{0} \implies \bm{v} = \text{const} \end{equation} $$
ここで $\sum \bm{F}$ は物体に作用する全ての力のベクトル和(合力)を表し、$\bm{v}$ は物体の速度ベクトルです。「$\bm{v} = \text{const}$」には2つの場合が含まれています。
- $\bm{v} = \bm{0}$(静止): 静止している物体に外力が作用しなければ、静止し続けます
- $\bm{v} \neq \bm{0}$(等速直線運動): 運動している物体に外力が作用しなければ(あるいは合力がゼロであれば)、等速直線運動を続けます
この2つの状態は物理的に等価です。等速直線運動している物体にとっては自分こそが静止しているのであり、どちらが「本当に」静止しているかを絶対的に判定する方法はありません。これがガリレイの相対性原理へとつながる考え方です。
慣性系の定義 — 第1法則が果たす役割
第1法則は単なる「第2法則の特殊な場合($\bm{F}=\bm{0}$ のとき $\bm{a}=\bm{0}$)」ではありません。第1法則には、もう一つ重要な役割があります。それは慣性系(慣性基準系)を定義することです。
慣性系とは、第1法則が成り立つ座標系のことです。つまり「外力を受けない物体が等速直線運動する座標系」を慣性系と定義します。第2法則 $\bm{F} = m\bm{a}$ は、慣性系でのみ正しく成り立ちます。加速している電車の中(非慣性系)では、何もないのにボールが転がり出すように見えるなど、第1法則が成り立ちません。非慣性系で運動方程式を使うには、遠心力やコリオリ力などの「見かけの力」を追加する必要があります。
つまり第1法則は、第2法則・第3法則が適用される舞台(慣性系)を規定する、いわば法則の法則としての役割を持っています。
ここまでで「力が加わらなければ物体は動きを変えない」という慣性の概念を理解しました。では、力が加わったとき、物体の運動はどのように変化するのでしょうか? それを定量的に記述するのが第2法則です。
第2法則(運動方程式)
直感的な理解 — 買い物カートのアナロジー
スーパーマーケットで買い物カートを押す場面を想像してください。次の2つの状況を比べてみましょう。
状況1: 押す力を変える
空のカートを弱く押すと、ゆっくり加速します。同じカートを強く押すと、素早く加速します。つまり、力が大きいほど加速度が大きくなるということです。力と加速度は比例の関係にあります。
状況2: カートの中身を変える
空のカートと、飲料ケースを山ほど積んだカートを同じ力で押してみましょう。空のカートはスッと動きますが、重いカートはなかなか加速しません。つまり、質量が大きいほど加速しにくいということです。質量と加速度は反比例の関係にあります。
この2つの観察を一つの式にまとめると、次のようになります。「力は、質量と加速度の積に等しい」。これがニュートンの第2法則であり、物理学で最も重要な方程式の一つです。
数学的定式化
第2法則を数式で表すと、以下のようになります。
$$ \begin{equation} \bm{F} = m\bm{a} = m\frac{d^2\bm{r}}{dt^2} \end{equation} $$
ここで各記号の意味を整理しておきましょう。
| 記号 | 意味 | SI単位 |
|---|---|---|
| $\bm{F}$ | 物体に作用する合力(全ての力のベクトル和) | N(ニュートン) |
| $m$ | 物体の質量(慣性の大きさを表すスカラー量) | kg |
| $\bm{a}$ | 加速度ベクトル | m/s$^2$ |
| $\bm{r}$ | 位置ベクトル | m |
1ニュートン(1 N)は、1 kg の物体に 1 m/s$^2$ の加速度を与える力として定義されます。つまり $1 \, \text{N} = 1 \, \text{kg} \cdot \text{m/s}^2$ です。
この式は、物体に力 $\bm{F}$ が加わったとき、その物体がどう加速するかを完全に決定します。これが運動方程式と呼ばれる所以です。初期条件(初期位置と初期速度)さえ与えれば、任意の時刻における物体の位置と速度を求めることができます。天体の軌道予測も、砲弾の弾道計算も、全てこの方程式を解くことに帰着します。
より一般的な形式 — 運動量を用いた表現
実はニュートン自身がプリンキピアで述べた第2法則の形は、$\bm{F} = m\bm{a}$ ではなく、運動量(momentum)$\bm{p} = m\bm{v}$ の時間変化率として表現されていました。
$$ \begin{equation} \bm{F} = \frac{d\bm{p}}{dt} = \frac{d(m\bm{v})}{dt} \end{equation} $$
質量 $m$ が時間とともに変化しない場合、微分の中から $m$ を定数として出すことができます。
$$ \frac{d(m\bm{v})}{dt} = m\frac{d\bm{v}}{dt} = m\bm{a} $$
したがって $m$ が一定なら $\bm{F} = m\bm{a}$ に帰着します。しかし、ロケットのように推進剤を噴射して質量が刻々と変化する系では、この運動量形式でなければ正しい方程式を立てられません。ロケットの推進については本記事の後半で詳しく扱います。
運動量 $\bm{p}$ の概念は後に運動量保存則へと発展し、衝突や爆発など力の詳細がわからない現象の解析に不可欠な道具となります。
成分表示 — 3次元空間での運動方程式
実際の問題では、運動方程式をベクトルのまま解くのではなく、各成分に分解して連立方程式として解きます。3次元空間では以下の3本の方程式になります。
$$ \begin{align} F_x &= m\ddot{x} \\ F_y &= m\ddot{y} \\ F_z &= m\ddot{z} \end{align} $$
ここで $\ddot{x} = \frac{d^2x}{dt^2}$ は $x$ 方向の加速度を表します。ドットはニュートンの表記法で、時間微分を表します($\dot{x} = \frac{dx}{dt}$、$\ddot{x} = \frac{d^2x}{dt^2}$)。
各成分の方程式は独立に解けることが多いため、複雑な3次元の問題でも1次元ずつ処理できます。たとえば放物運動では、水平方向(等速運動)と鉛直方向(等加速度運動)に分けて解くのが定石です。
第2法則から第1法則を導く
第2法則で $\bm{F} = \bm{0}$ とすると、
$$ m\bm{a} = \bm{0} $$
$m > 0$ より $\bm{a} = \bm{0}$、すなわち $\frac{d\bm{v}}{dt} = \bm{0}$ となり、$\bm{v} = \text{const}$ が得られます。これは第1法則そのものです。このことから「第1法則は第2法則に含まれるのでは?」という疑問が生まれますが、先に述べたように、第1法則は慣性系を定義するという独立した役割を持っているため、独立した法則として位置づけられています。
ここまでで、1つの物体に力が加わったときの運動を記述できるようになりました。しかし現実の世界では、力は常に2つの物体の間で発生します。物体Aが物体Bを押すとき、物体Bは物体Aに何をするのでしょうか? 第3法則がこの問いに答えます。
第3法則(作用反作用の法則)
直感的な理解 — スケートリンクの思考実験
氷の上(摩擦がほぼゼロの状況)で、2人のスケーターが向かい合って立っています。一方のスケーターAがもう一方のスケーターBの胸を両手で押したとしましょう。何が起こるでしょうか?
直感的に「BだけがAの逆方向に滑っていく」と思うかもしれません。しかし実際は、AもBも互いに反対方向に滑り出します。Aが「Bを押す」という行為は、同時に「AがBから押し返される」ということでもあるのです。AがBに力を及ぼすと、BもAに全く同じ大きさの力を逆向きに及ぼします。
この「押したら押し返される」という関係は、重力でも、バネの弾性力でも、電磁気力でも、あらゆる力について成り立ちます。
もう一つの例 — ロケットの推進原理
ロケットが宇宙空間で加速できるのはなぜでしょうか? 空気を押しているわけではありません。足場もありません。
答えは第3法則にあります。ロケットは燃焼ガスを後方に高速で噴射します(作用)。すると第3法則により、噴射ガスはロケット本体に対して前方への力を及ぼします(反作用)。この反作用こそがロケットを前に押し進める推力です。
つまりロケットは「何かを押して、その反作用で進む」のです。この原理は、周囲に何もない宇宙空間でも完璧に機能します。掃除機のホースを持ってスケートリンクに立ち、ホースから空気を後方に吹き出せば自分が前に進む、というイメージに近いでしょう。
数学的定式化
第3法則を数式で表現しましょう。物体Aが物体Bに力 $\bm{F}_{A \to B}$ を及ぼすとき、同時に物体Bは物体Aに力 $\bm{F}_{B \to A}$ を及ぼし、これらの力は大きさが等しく向きが反対です。
$$ \begin{equation} \bm{F}_{A \to B} = -\bm{F}_{B \to A} \end{equation} $$
この式が意味するところを整理しておきましょう。
| 性質 | 説明 |
|---|---|
| 同時性 | 作用と反作用は全く同時に発生します。「先に作用があって、後から反作用」ではありません |
| 異なる物体への作用 | 2つの力は異なる物体に作用します。AがBに及ぼす力と、BがAに及ぼす力であり、同じ物体に作用する2つの力ではありません。これは極めて重要な点です |
| 同一直線上 | 作用と反作用は同一の作用線上にあります(大きさが等しく、向きが反対) |
| 力の種類を問わない | 重力、垂直抗力、摩擦力、張力、電磁気力 — どんな力でもこの法則が成り立ちます |
よくある誤解 — 作用反作用は「釣り合い」ではない
「作用と反作用は大きさが等しく向きが反対なら、打ち消し合って何も起きないのでは?」という誤解がよくあります。しかし、作用と反作用は異なる物体に作用するため、打ち消し合うことはありません。
たとえば、あなたが床の上に立っているとき、地球があなたを引く重力(下向き)と、あなたが地球を引く重力(上向き)は作用反作用の関係です。しかし、あなたが静止しているのは、あなたに作用する重力(下向き)と床からの垂直抗力(上向き)が釣り合っているからです。重力と垂直抗力は作用反作用の関係ではなく、同一物体(あなた)に作用する2つの力の釣り合いです。
| 比較 | 作用反作用(第3法則) | 力の釣り合い(第1法則) |
|---|---|---|
| 作用する物体 | 異なる2物体 | 同一物体 |
| 常に成立? | はい(常に) | 物体が加速していなければ |
| 打ち消し合う? | いいえ | はい(合力ゼロ) |
第3法則と運動量保存の関係
第3法則は運動量保存則の基礎でもあります。物体AとBが相互作用しているとき、第3法則より $\bm{F}_{A \to B} = -\bm{F}_{B \to A}$ です。第2法則を各物体に適用すると、
$$ \frac{d\bm{p}_A}{dt} = \bm{F}_{B \to A}, \quad \frac{d\bm{p}_B}{dt} = \bm{F}_{A \to B} $$
両辺を足し合わせると、
$$ \frac{d\bm{p}_A}{dt} + \frac{d\bm{p}_B}{dt} = \bm{F}_{B \to A} + \bm{F}_{A \to B} = \bm{0} $$
よって系全体の運動量の時間変化率はゼロ、すなわち、
$$ \bm{p}_A + \bm{p}_B = \text{const} $$
が成り立ちます。外力がない2体系では運動量が保存されるのです。この保存則は衝突問題の解析で強力な武器になります。
ここまでで3つの法則の意味と数学的定式化を理解しました。では、これらの法則を実際の物理問題に適用してみましょう。次のセクションでは、運動方程式を具体的な状況で立てて解く練習をします。
運動方程式の具体的な解法
運動方程式 $\bm{F} = m\bm{a}$ を立てて解く手順は、以下のステップに整理できます。
- 物体を選ぶ: どの物体について運動方程式を立てるかを明確にする
- 座標系を決める: 問題に適した座標軸を設定する
- 力を全て列挙する: その物体に作用する力を全て洗い出す(重力、垂直抗力、摩擦力、張力、抵抗力など)
- 運動方程式を立てる: 各座標軸方向について $F = ma$ を書き下す
- 初期条件を設定する: 初期位置 $\bm{r}(0)$ と初期速度 $\bm{v}(0)$ を与える
- 微分方程式を解く: 解析的に解くか、数値的に解く
このプロセスを、難易度を上げながら4つの例題で実践します。
例1: 自由落下
最も単純な場合から始めましょう。高さ $h_0$ から初速ゼロで物体を落とします。空気抵抗は無視します。
座標系: 鉛直上向きを $y$ 軸の正方向とします。
力の列挙: 重力 $-mg$($y$ 軸の負方向)のみ。
運動方程式:
$$ m\ddot{y} = -mg $$
両辺を質量 $m$ で割ると($m > 0$ なので割れます)、
$$ \ddot{y} = -g $$
ここで $g \approx 9.81 \, \text{m/s}^2$ は重力加速度です。この式は「加速度は常に下向きに一定値 $g$」であることを意味しています。質量に依存しないのがポイントです。ガリレオが発見した「重い物も軽い物も同じ速さで落ちる」というのは、まさにこのことです。
初期条件: $y(0) = h_0$(初期高さ)、$\dot{y}(0) = 0$(静止状態から落下)。
求解: 加速度を時間で積分して速度を求め、速度をさらに積分して位置を求めます。
加速度 $\ddot{y} = -g$ を時間 $t$ で積分すると速度が得られます。
$$ \dot{y}(t) = -gt + C_1 $$
初期条件 $\dot{y}(0) = 0$ より $C_1 = 0$ なので、
$$ \dot{y}(t) = -gt $$
さらに速度を時間で積分すると位置が得られます。
$$ y(t) = -\frac{1}{2}gt^2 + C_2 $$
初期条件 $y(0) = h_0$ より $C_2 = h_0$ なので、
$$ \begin{equation} y(t) = h_0 – \frac{1}{2}gt^2 \end{equation} $$
地面 $y = 0$ に到達する時刻は $h_0 – \frac{1}{2}gt_{\text{land}}^2 = 0$ より、
$$ t_{\text{land}} = \sqrt{\frac{2h_0}{g}} $$
高さ $h_0 = 100 \, \text{m}$ の場合、$t_{\text{land}} = \sqrt{200/9.81} \approx 4.52 \, \text{s}$ です。約4.5秒で地面に到達し、そのときの速度は $|{-g \cdot t_{\text{land}}}| \approx 44.3 \, \text{m/s}$(時速約160 km)にもなります。
例2: 摩擦のない斜面上の運動
次に、傾斜角 $\theta$ の滑らかな(摩擦のない)斜面上での運動を考えます。
座標系: 斜面に沿って下向きを $s$ 軸の正方向とします。これにより問題を1次元に帰着できます。
力の列挙: 重力を斜面方向と斜面垂直方向に分解します。
- 斜面方向: $mg\sin\theta$($s$ の正方向)
- 斜面垂直方向: $mg\cos\theta$(斜面に押し付ける向き)
斜面からの垂直抗力 $N$ は $mg\cos\theta$ と釣り合い、斜面垂直方向には加速しません。
運動方程式(斜面方向のみ):
$$ m\ddot{s} = mg\sin\theta $$
両辺を $m$ で割ると、
$$ \ddot{s} = g\sin\theta $$
これは自由落下の式 $\ddot{y} = -g$ と同じ形(定加速度運動)です。ただし加速度が $g$ ではなく $g\sin\theta$ に置き換わっています。重力の斜面方向成分だけが物体を加速させるからです。$\theta = 90°$ のとき $\sin 90° = 1$ で自由落下に一致し、$\theta = 0°$ のとき $\sin 0° = 0$ で加速度ゼロ(水平面上で静止)となるのは直感に合います。
初期条件: $s(0) = 0$、$\dot{s}(0) = 0$(斜面上端から静止状態で滑り出す)として解くと、
$$ \begin{equation} s(t) = \frac{1}{2}g\sin\theta \cdot t^2, \quad \dot{s}(t) = g\sin\theta \cdot t \end{equation} $$
傾斜角が大きいほど加速度が大きく、物体は速く滑り落ちます。
例3: 空気抵抗がある場合の落下(終端速度)
現実の落下では空気抵抗を無視できません。スカイダイバーが一定速度で落下する(終端速度に達する)現象は、空気抵抗なしでは説明できません。ここでは空気抵抗が速度に比例するモデル $F_{\text{drag}} = -bv$ を考えます($b > 0$ は抵抗係数)。
座標系: 鉛直下向きを正方向とします(落下問題なので下向き正が自然です)。
力の列挙:
- 重力: $mg$(下向き正)
- 空気抵抗: $-bv$(速度と逆向き、つまり上向き)
運動方程式:
$$ m\dot{v} = mg – bv $$
この方程式は「重力で加速するが、速度が上がるほど空気抵抗も大きくなって加速を妨げる」ことを表しています。まず、$\dot{v} = 0$(加速度ゼロ、つまり等速運動)となる速度を求めてみましょう。
$$ 0 = mg – bv_\infty \implies v_\infty = \frac{mg}{b} $$
この $v_\infty$ が終端速度(terminal velocity)です。スカイダイバーの場合、終端速度は約 50 m/s(時速約180 km)です。
では、運動方程式を厳密に解きましょう。$m\dot{v} = mg – bv$ を変数分離法で解きます。
$$ \frac{dv}{mg – bv} = \frac{dt}{m} $$
左辺の $mg – bv$ を $u$ とおくと $du = -b \, dv$ なので $dv = -\frac{1}{b}du$ です。これを代入すると、
$$ -\frac{1}{b} \cdot \frac{du}{u} = \frac{dt}{m} $$
両辺を積分すると、
$$ -\frac{1}{b}\ln|u| = \frac{t}{m} + C $$
$u = mg – bv$ を戻して整理すると、
$$ \ln|mg – bv| = -\frac{b}{m}t + C’ $$
初期条件 $v(0) = 0$ を代入すると $C’ = \ln(mg)$ となり、
$$ \ln\left(\frac{mg – bv}{mg}\right) = -\frac{b}{m}t $$
両辺の指数をとると、
$$ \frac{mg – bv}{mg} = e^{-bt/m} $$
$v$ について解くと、最終的に以下の速度の時間発展が得られます。
$$ \begin{equation} v(t) = \frac{mg}{b}\left(1 – e^{-bt/m}\right) \end{equation} $$
この結果から重要なことが読み取れます。
- $t = 0$: $v(0) = 0$(初期条件と一致)
- $t \to \infty$: $e^{-bt/m} \to 0$ なので $v \to mg/b = v_\infty$(終端速度に漸近)
- 時定数 $\tau = m/b$: 速度が終端速度の約63%($1 – 1/e \approx 0.632$)に達する時間
つまり、落下開始直後は自由落下とほぼ同じ加速をしますが、速度が上がるにつれて空気抵抗が増し、やがて重力と空気抵抗が釣り合って一定速度(終端速度)で落下するようになります。
位置 $y(t)$ は速度を積分して求めます。下向き正で落下距離を $y$ とすると、
$$ y(t) = \int_0^t v(t’) \, dt’ = \frac{mg}{b}\left[t + \frac{m}{b}\left(e^{-bt/m} – 1\right)\right] $$
この式は、$t$ が小さいとき(空気抵抗がまだ弱いとき)には $y \approx \frac{1}{2}gt^2$ と自由落下に近く、$t$ が大きくなると $y \approx v_\infty \cdot t$ と等速直線運動に近づくことを示しています。
例4: 単振動(バネに繋がれた物体)
壁に固定されたバネの先に質量 $m$ の物体が取り付けられている状況を考えます。バネの自然長からの変位を $x$ とすると、フックの法則によりバネは $F = -kx$ の復元力を及ぼします($k$ はバネ定数)。復元力とは、変位と逆向きに作用して物体を平衡位置($x=0$)に戻そうとする力のことです。
運動方程式:
$$ m\ddot{x} = -kx $$
これを整理すると、
$$ \ddot{x} + \frac{k}{m}x = 0 $$
ここで $\omega = \sqrt{k/m}$ とおくと($\omega$ は角振動数と呼ばれ、単位はrad/sです)、
$$ \begin{equation} \ddot{x} + \omega^2 x = 0 \end{equation} $$
この微分方程式の一般解は、
$$ \begin{equation} x(t) = A\cos(\omega t + \phi) \end{equation} $$
です。ここで $A$ は振幅(最大変位)、$\phi$ は初期位相で、いずれも初期条件から決まります。この運動は単振動と呼ばれ、物理学で最も頻繁に現れる運動形態の一つです。詳細は単振動の理論と運動方程式で解説しています。バネ-質量系だけでなく、振り子、LC回路、分子振動など、平衡点周りの微小振動は全て単振動で近似できます。
さらに、空気抵抗(減衰)や外力(強制振動)を加えた発展的な議論は減衰振動と強制振動を参照してください。
ここまでで解析的に解ける典型的な例題をいくつか解きました。次に、これらの問題をPythonでシミュレーションし、解析解と数値解の一致を視覚的に確認しましょう。
Pythonシミュレーション
シミュレーション1: 自由落下と空気抵抗付き落下の比較
まず、本記事で解析的に導出した自由落下と空気抵抗付き落下の解をPythonで可視化します。2つの落下を同じグラフに重ねることで、空気抵抗の効果を直感的に理解できます。
import numpy as np
import matplotlib.pyplot as plt
# --- 物理定数 ---
g = 9.81 # 重力加速度 [m/s^2]
m = 1.0 # 質量 [kg]
b = 0.5 # 空気抵抗係数 [kg/s]
h0 = 100.0 # 初期高さ [m]
# --- 時間配列 ---
t = np.linspace(0, 8, 500)
# --- 自由落下(解析解)---
# 下向き正: 落下距離 y_free, 速度 v_free
v_free = g * t
y_free = 0.5 * g * t**2
# 高さに変換
height_free = h0 - y_free
height_free = np.maximum(height_free, 0) # 地面で停止
# --- 空気抵抗あり(解析解)---
# v(t) = (mg/b)(1 - exp(-bt/m))
v_terminal = m * g / b
v_drag = v_terminal * (1 - np.exp(-b * t / m))
# y(t) = (mg/b)[t + (m/b)(exp(-bt/m) - 1)]
y_drag = v_terminal * (t + (m / b) * (np.exp(-b * t / m) - 1))
height_drag = h0 - y_drag
height_drag = np.maximum(height_drag, 0)
# --- 可視化 ---
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 高さの時間変化
axes[0].plot(t, height_free, "b-", linewidth=2, label="Free fall (no drag)")
axes[0].plot(t, height_drag, "r-", linewidth=2, label=f"With drag (b={b})")
axes[0].set_xlabel("Time [s]", fontsize=12)
axes[0].set_ylabel("Height [m]", fontsize=12)
axes[0].set_title("Height vs Time", fontsize=14)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim(0, 110)
# 右: 速度の時間変化
axes[1].plot(t, v_free, "b-", linewidth=2, label="Free fall")
axes[1].plot(t, v_drag, "r-", linewidth=2, label="With drag")
axes[1].axhline(
y=v_terminal, color="r", linestyle="--", alpha=0.5,
label=f"Terminal velocity = {v_terminal:.1f} m/s"
)
axes[1].set_xlabel("Time [s]", fontsize=12)
axes[1].set_ylabel("Speed [m/s]", fontsize=12)
axes[1].set_title("Speed vs Time", fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
このグラフから、以下の重要な特徴が読み取れます。
- 左のグラフ(高さ): 自由落下(青線)は放物線的に急降下しますが、空気抵抗あり(赤線)の場合は降下が緩やかになり、地面到達までの時間が明らかに長くなっています。空気抵抗は落下を「ブレーキ」する役割を果たしていることが視覚的にわかります
- 右のグラフ(速度): 自由落下では速度が直線的に際限なく増加しますが、空気抵抗ありの場合は速度が終端速度 $v_\infty = mg/b = 19.6 \, \text{m/s}$ に漸近しています。赤い破線が終端速度を示しており、速度曲線がこの値に収束していく様子が確認できます。序盤($t < 1$ s 程度)では2つの曲線がほぼ一致しており、低速では空気抵抗がほとんど効かないことも見て取れます
シミュレーション2: 斜面上の運動(角度依存性)
傾斜角を変えたときに、斜面を滑り下りる物体の変位と速度がどう変わるかを可視化します。
import numpy as np
import matplotlib.pyplot as plt
g = 9.81
theta_degrees = [15, 30, 45, 60, 90]
t = np.linspace(0, 3, 200)
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
for theta_d in theta_degrees:
theta = np.radians(theta_d)
a = g * np.sin(theta) # 斜面方向の加速度
s = 0.5 * a * t**2 # 変位(斜面方向)
v = a * t # 速度(斜面方向)
label = rf"$\theta = {theta_d}°$"
axes[0].plot(t, s, linewidth=2, label=label)
axes[1].plot(t, v, linewidth=2, label=label)
# 左: 変位
axes[0].set_xlabel("Time [s]", fontsize=12)
axes[0].set_ylabel("Displacement [m]", fontsize=12)
axes[0].set_title("Displacement on incline", fontsize=14)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
# 右: 速度
axes[1].set_xlabel("Time [s]", fontsize=12)
axes[1].set_ylabel("Speed [m/s]", fontsize=12)
axes[1].set_title("Speed on incline", fontsize=14)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
このグラフから、斜面の角度が物体の運動に劇的な影響を与えることがわかります。$\theta = 90°$ は自由落下に相当し、3秒後の変位は約44 m にもなりますが、$\theta = 15°$ では加速度が $g\sin 15° \approx 2.54 \, \text{m/s}^2$ と重力加速度の約26%しかなく、同じ時間で約11 m しか進みません。変位は $t^2$ に比例するため、時間が経つほど角度の違いが顕著になっていく様子も確認できます。速度のグラフを見ると、全て原点を通る直線(等加速度運動)で、その傾きが $g\sin\theta$ に等しいことが読み取れます。
シミュレーション3: 放物運動(射出角度の最適化)
放物運動は第2法則の水平・鉛直成分への分解の典型例です。空気抵抗なしの場合、水平方向は等速運動、鉛直方向は等加速度運動になります。射出角度を変えたときの軌跡を描き、飛距離が最大になる角度を確認しましょう。
import numpy as np
import matplotlib.pyplot as plt
g = 9.81
v0 = 20 # 初速 [m/s]
fig, ax = plt.subplots(figsize=(10, 6))
for theta_d in [15, 30, 45, 60, 75]:
theta = np.radians(theta_d)
# 飛行時間: y=0 に戻る時刻
T = 2 * v0 * np.sin(theta) / g
t = np.linspace(0, T, 300)
x = v0 * np.cos(theta) * t
y = v0 * np.sin(theta) * t - 0.5 * g * t**2
# 飛距離
R = v0**2 * np.sin(2 * theta) / g
ax.plot(x, y, linewidth=2, label=rf"$\theta={theta_d}°$ (R={R:.1f} m)")
ax.set_xlabel("Horizontal distance [m]", fontsize=12)
ax.set_ylabel("Height [m]", fontsize=12)
ax.set_title(f"Projectile motion ($v_0$ = {v0} m/s)", fontsize=14)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim(0, None)
ax.set_aspect("equal")
plt.tight_layout()
plt.show()
このグラフから、放物運動の特性が明確にわかります。
- 45度で飛距離が最大: $\theta = 45°$ のとき飛距離は $R = v_0^2 / g \approx 40.8 \, \text{m}$ で最大になります。これは飛距離の公式 $R = v_0^2 \sin 2\theta / g$ で $\sin 2\theta$ が最大($\sin 90° = 1$)となることから説明できます
- 補角の関係: $15°$ と $75°$、$30°$ と $60°$ の飛距離が等しくなっています。これは $\sin 2\theta = \sin(180° – 2\theta)$ が成り立つからです。つまり射出角 $\theta$ と $90° – \theta$ の飛距離は同じです
- 高さと飛距離のトレードオフ: 角度が大きいほど最高到達点は高くなりますが、水平方向の速度成分が小さくなるため飛距離は短くなります(45度を超えた場合)
放物運動のさらに詳しい解析は放物運動を参照してください。
シミュレーション4: 数値解法による空気抵抗付き落下(速度の2乗に比例する場合)
先ほどの空気抵抗モデル(速度に比例: $F_{\text{drag}} = -bv$)は数学的に扱いやすいですが、現実の空気抵抗は高速域では速度の2乗に比例する $F_{\text{drag}} = -\frac{1}{2}C_D \rho A v^2$ がより正確です。ここで $C_D$ は抗力係数、$\rho$ は空気密度、$A$ は断面積です。この場合、解析解を求めることもできますが、SciPyの solve_ivp を用いた数値解法を示します。数値解法は、どんな複雑な力のモデルでも適用できる汎用的な方法です。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
g = 9.81
m = 80.0 # 質量 [kg](スカイダイバーを想定)
Cd = 0.5 # 抗力係数
rho = 1.225 # 空気密度 [kg/m^3]
A = 0.7 # 断面積 [m^2]
# 終端速度(理論値): mg = 0.5 * Cd * rho * A * v_t^2
v_terminal = np.sqrt(2 * m * g / (Cd * rho * A))
def equations(t, state):
"""運動方程式: 下向き正"""
y, v = state # y: 落下距離, v: 速度(下向き正)
drag = 0.5 * Cd * rho * A * v**2 # 抗力の大きさ
dvdt = g - drag / m # 重力 - 抗力/質量
return [v, dvdt]
# 初期条件: 静止状態から落下開始
sol = solve_ivp(
equations, [0, 30], [0, 0],
t_eval=np.linspace(0, 30, 1000),
method="RK45"
)
t = sol.t
y = sol.y[0] # 落下距離
v = sol.y[1] # 速度
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: 落下距離
axes[0].plot(t, y, "b-", linewidth=2)
axes[0].set_xlabel("Time [s]", fontsize=12)
axes[0].set_ylabel("Distance fallen [m]", fontsize=12)
axes[0].set_title("Skydiver fall distance", fontsize=14)
axes[0].grid(True, alpha=0.3)
# 右: 速度
axes[1].plot(t, v, "b-", linewidth=2, label="Numerical solution")
axes[1].axhline(
y=v_terminal, color="r", linestyle="--", linewidth=1.5,
label=f"Terminal velocity = {v_terminal:.1f} m/s"
)
axes[1].set_xlabel("Time [s]", fontsize=12)
axes[1].set_ylabel("Speed [m/s]", fontsize=12)
axes[1].set_title("Skydiver speed", fontsize=14)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
print(f"Terminal velocity (theoretical): {v_terminal:.1f} m/s")
print(f"Terminal velocity (numerical): {v[-1]:.1f} m/s")
このシミュレーション結果から、速度の2乗に比例する抗力モデルでも定性的な振る舞いは線形抗力モデルと同じであることがわかります。速度は初め急激に増加し、やがて終端速度に漸近します。理論的な終端速度は $v_\infty = \sqrt{2mg / (C_D \rho A)}$ であり、体重80 kg、$C_D = 0.5$、$\rho = 1.225 \, \text{kg/m}^3$、$A = 0.7 \, \text{m}^2$ の場合、約60 m/s(時速約216 km)と計算されます。数値解の終端速度もこの理論値と一致していることが出力で確認できます。落下開始から約15秒程度で終端速度のほぼ95%に達しており、それ以降はほぼ等速で落下していることがグラフから読み取れます。
シミュレーション5: ロケット推進(ツィオルコフスキーの公式)
最後に、第3法則の応用として最も壮大な例であるロケット推進をシミュレーションします。ロケットは推進剤を噴射して質量が時間とともに減少する系であり、通常の $F = ma$ ではなく運動量形式の第2法則を使う必要があります。
ロケットが質量流量 $\dot{m}_e$(1秒あたりに噴射する推進剤の質量、$\dot{m}_e > 0$ と定義)で排気速度 $v_e$ のガスを噴射するとき、推力は次のように表されます。
$$ F_{\text{thrust}} = \dot{m}_e \cdot v_e $$
この式は第3法則から理解できます。ロケットが後方にガスを速度 $v_e$ で押し出す(作用)と、ガスがロケットを前方に押し返す(反作用)のです。ロケット全体の質量は $M(t) = M_0 – \dot{m}_e \cdot t$($M_0$ は初期質量)と時間とともに減少します。
重力のみを外力とすると、ロケットの運動方程式は、
$$ M(t) \frac{dv}{dt} = \dot{m}_e \cdot v_e – M(t) g $$
右辺第1項が推力、第2項が重力です。この方程式を数値的に解いてみましょう。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# --- ロケットパラメータ ---
M0 = 50000 # 初期全質量 [kg]
M_payload = 5000 # ペイロード質量(空質量)[kg]
ve = 3000 # 排気速度 [m/s]
mdot = 200 # 質量流量 [kg/s]
g = 9.81 # 重力加速度 [m/s^2]
# 燃焼時間(推進剤を使い切るまで)
t_burn = (M0 - M_payload) / mdot
def rocket_equations(t, state):
"""ロケット運動方程式(鉛直上昇)"""
h, v = state # h: 高度, v: 速度(上向き正)
if t <= t_burn:
M = M0 - mdot * t # 燃焼中: 質量減少
thrust = mdot * ve # 推力
else:
M = M_payload # 燃焼後: 質量一定
thrust = 0 # 推力なし
dvdt = thrust / M - g # 運動方程式
return [v, dvdt]
# 数値積分(燃焼後も追跡)
t_end = t_burn * 2.5
sol = solve_ivp(
rocket_equations, [0, t_end], [0, 0],
t_eval=np.linspace(0, t_end, 2000),
method="RK45", max_step=0.5
)
t = sol.t
h = sol.y[0] / 1000 # [km] に変換
v = sol.y[1] # [m/s]
# --- ツィオルコフスキーの公式(重力なし)---
# Δv = ve * ln(M0 / M_payload)
mass_ratio = M0 / M_payload
delta_v_tsiolkovsky = ve * np.log(mass_ratio)
# --- 可視化 ---
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
# (1) 高度
axes[0].plot(t, h, "b-", linewidth=2)
axes[0].axvline(x=t_burn, color="gray", linestyle="--", alpha=0.7,
label=f"Burnout (t={t_burn:.0f} s)")
axes[0].set_xlabel("Time [s]", fontsize=12)
axes[0].set_ylabel("Altitude [km]", fontsize=12)
axes[0].set_title("Rocket altitude", fontsize=14)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
# (2) 速度
axes[1].plot(t, v, "r-", linewidth=2)
axes[1].axvline(x=t_burn, color="gray", linestyle="--", alpha=0.7,
label=f"Burnout (t={t_burn:.0f} s)")
axes[1].axhline(y=delta_v_tsiolkovsky, color="green", linestyle=":",
alpha=0.7, label=f"Tsiolkovsky Δv={delta_v_tsiolkovsky:.0f} m/s")
axes[1].set_xlabel("Time [s]", fontsize=12)
axes[1].set_ylabel("Speed [m/s]", fontsize=12)
axes[1].set_title("Rocket speed", fontsize=14)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
# (3) 質量
M_arr = np.where(t <= t_burn, M0 - mdot * t, M_payload)
axes[2].plot(t, M_arr / 1000, "g-", linewidth=2)
axes[2].axvline(x=t_burn, color="gray", linestyle="--", alpha=0.7,
label=f"Burnout (t={t_burn:.0f} s)")
axes[2].set_xlabel("Time [s]", fontsize=12)
axes[2].set_ylabel("Mass [ton]", fontsize=12)
axes[2].set_title("Rocket mass", fontsize=14)
axes[2].legend(fontsize=10)
axes[2].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
print(f"Burn time: {t_burn:.1f} s")
print(f"Mass ratio (M0/Mf): {mass_ratio:.1f}")
print(f"Tsiolkovsky delta-v: {delta_v_tsiolkovsky:.1f} m/s (without gravity)")
print(f"Actual burnout speed: {np.interp(t_burn, t, sol.y[1]):.1f} m/s (with gravity)")
このシミュレーション結果から、ロケット推進の物理が視覚的に理解できます。
- 速度グラフ(中央): 燃焼中は推力が重力を上回るため速度が増加し、燃焼終了(灰色の破線)とともに推力がゼロになるため、それ以降は重力による減速(速度の直線的な減少)が起こります。ツィオルコフスキーの公式 $\Delta v = v_e \ln(M_0 / M_f)$ による理論値(緑の点線)は重力を無視した値なので、実際の燃焼終了時速度はこれよりも重力損失の分だけ小さくなっています
- 高度グラフ(左): 燃焼中は加速しながら上昇し、燃焼後は慣性で上昇を続けますが速度が減少し、やがて最高高度に達して落下に転じます
- 質量グラフ(右): 燃焼中は質量が線形に減少し、推進剤を使い切った時点でペイロード質量(5トン)のみが残ります。質量比 $M_0 / M_f = 10$ は、初期質量の90%が推進剤であることを意味します
ロケットの軌道設計におけるビザビバ方程式や万有引力とケプラーの法則との関連も重要です。
シミュレーション6: 単振動のアニメーション的可視化
最後に、バネ-質量系の単振動を解析解と数値解で比較し、エネルギー保存則が成り立っていることも確認します。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# --- パラメータ ---
m = 1.0 # 質量 [kg]
k = 4.0 # バネ定数 [N/m]
omega = np.sqrt(k / m) # 角振動数
A = 2.0 # 振幅 [m]
# --- 解析解 ---
t = np.linspace(0, 10, 500)
x_analytical = A * np.cos(omega * t)
v_analytical = -A * omega * np.sin(omega * t)
# --- 数値解(solve_ivp)---
def spring_mass(t, state):
x, v = state
return [v, -k / m * x]
sol = solve_ivp(spring_mass, [0, 10], [A, 0],
t_eval=t, method="RK45")
x_numerical = sol.y[0]
v_numerical = sol.y[1]
# --- エネルギー ---
KE = 0.5 * m * v_numerical**2 # 運動エネルギー
PE = 0.5 * k * x_numerical**2 # ポテンシャルエネルギー
TE = KE + PE # 全エネルギー
# --- 可視化 ---
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# (1) 変位
axes[0, 0].plot(t, x_analytical, "b-", linewidth=2, label="Analytical")
axes[0, 0].plot(t, x_numerical, "r--", linewidth=1.5, label="Numerical (RK45)")
axes[0, 0].set_xlabel("Time [s]", fontsize=12)
axes[0, 0].set_ylabel("Displacement [m]", fontsize=12)
axes[0, 0].set_title("Displacement: analytical vs numerical", fontsize=13)
axes[0, 0].legend(fontsize=10)
axes[0, 0].grid(True, alpha=0.3)
# (2) 位相空間
axes[0, 1].plot(x_numerical, v_numerical, "g-", linewidth=1.5)
axes[0, 1].set_xlabel("Displacement [m]", fontsize=12)
axes[0, 1].set_ylabel("Velocity [m/s]", fontsize=12)
axes[0, 1].set_title("Phase space", fontsize=13)
axes[0, 1].set_aspect("equal")
axes[0, 1].grid(True, alpha=0.3)
# (3) エネルギー
axes[1, 0].plot(t, KE, "r-", linewidth=1.5, label="Kinetic energy")
axes[1, 0].plot(t, PE, "b-", linewidth=1.5, label="Potential energy")
axes[1, 0].plot(t, TE, "k--", linewidth=2, label="Total energy")
axes[1, 0].set_xlabel("Time [s]", fontsize=12)
axes[1, 0].set_ylabel("Energy [J]", fontsize=12)
axes[1, 0].set_title("Energy conservation", fontsize=13)
axes[1, 0].legend(fontsize=10)
axes[1, 0].grid(True, alpha=0.3)
# (4) 数値誤差
error = np.abs(x_numerical - x_analytical)
axes[1, 1].semilogy(t, error + 1e-16, "m-", linewidth=1.5)
axes[1, 1].set_xlabel("Time [s]", fontsize=12)
axes[1, 1].set_ylabel("Absolute error [m]", fontsize=12)
axes[1, 1].set_title("Numerical error (RK45 vs analytical)", fontsize=13)
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout()
plt.show()
print(f"Angular frequency: omega = {omega:.2f} rad/s")
print(f"Period: T = {2 * np.pi / omega:.2f} s")
print(f"Max numerical error: {error.max():.2e} m")
このシミュレーションから4つの重要な知見が得られます。
- 変位のグラフ(左上): 解析解(青の実線)と数値解(赤の破線)が完全に重なっており、RK45法の精度が十分であることが確認できます。振動の周期は $T = 2\pi/\omega = 2\pi/2 \approx 3.14$ s です
- 位相空間(右上): 変位と速度をそれぞれ横軸・縦軸にプロットすると、きれいな楕円(正確には円を $\omega$ でスケーリングしたもの)が描かれます。軌道が閉じていることは、運動が周期的であることの証拠です
- エネルギー(左下): 運動エネルギー(赤)とポテンシャルエネルギー(青)が反位相で振動し、その和である全エネルギー(黒の破線)が一定に保たれています。これはエネルギー保存則が成り立っていることの数値的な検証です。変位が最大のとき速度はゼロ(全エネルギーがポテンシャルエネルギー)、変位がゼロのとき速度が最大(全エネルギーが運動エネルギー)という関係も確認できます
- 数値誤差(右下): RK45法の誤差は $10^{-11}$ m 以下であり、工学的には全く問題ない精度です。ただし時間が経つにつれて誤差が蓄積する傾向が見られます
3法則の全体像と相互関係
ここで、3つの法則の関係を改めて整理しておきましょう。
第1法則は「力がなければ運動は変わらない」と述べ、同時に第2法則・第3法則が成り立つ舞台(慣性系)を定義します。
第2法則は「力が加わったときに運動がどう変化するか」を定量的に記述します。$\bm{F} = m\bm{a}$ は力学のほぼ全ての計算の出発点であり、この方程式を解くことが古典力学の中心的な作業です。
第3法則は「力は常にペアで発生する」ことを述べ、運動量保存則の基礎を与えます。多体系の解析や衝突問題では、この法則が不可欠です。
3法則の守備範囲と限界も認識しておくべきです。ニュートンの法則は、以下の条件を満たす系で正確に成り立ちます。
- 速度が光速に比べて十分に遅い($v \ll c$)。高速の系ではアインシュタインの特殊相対性理論が必要です
- 物体のサイズが原子レベルよりも十分に大きい。原子・分子スケールでは量子力学が必要です
- 重力場が極端に強くない。ブラックホールの近傍などでは一般相対性理論が必要です
しかし、日常のスケールの工学問題 — 建物の設計、自動車のダイナミクス、衛星の軌道計算、機械の振動解析 — では、ニュートン力学は驚異的な精度を発揮します。
ニュートンの3法則は、さらに発展的な力学体系 — ラグランジュ力学やハミルトン力学(解析力学) — の出発点でもあります。解析力学では、力の代わりにエネルギーを基本量として使うことで、より複雑な拘束条件を持つ系を効率的に扱えるようになります。また、角運動量の概念を導入することで、回転運動や天体の軌道運動をよりエレガントに記述できるようになります。
まとめ
本記事では、ニュートンの運動の3法則を直感的なイメージから出発し、数学的な定式化、具体例の解析、そしてPythonシミュレーションまでを一貫して解説しました。
- 第1法則(慣性の法則): 外力がゼロなら物体は等速直線運動(または静止)を続けます。この法則は慣性系を定義するという独自の役割を持ちます
- 第2法則(運動方程式): $\bm{F} = m\bm{a}$(または $\bm{F} = d\bm{p}/dt$)。力学の全ての計算はこの方程式を解くことに帰着します。初期条件と力の関数形が与えられれば、物体の運動が完全に決定されます
- 第3法則(作用反作用の法則): $\bm{F}_{A \to B} = -\bm{F}_{B \to A}$。力は常にペアで発生し、運動量保存則の基礎となります
- 運動方程式の解法: 自由落下、斜面運動、空気抵抗付き落下、単振動など、様々な具体例を解析的・数値的に解きました
- ロケット推進: 質量変化する系では運動量形式の第2法則が必須であり、第3法則がロケットの推進原理を説明します
- 数値シミュレーション: SciPyの
solve_ivpを使えば、解析解が得られない複雑なモデルでも運動を予測できます
ニュートンの3法則は、ここから先に学ぶほぼ全ての力学的トピックの土台です。次のステップとして、以下の記事も参考にしてください。
- 単振動の理論と運動方程式 — 第2法則の最も基本的な応用であり、振動・波動論への入口です
- 万有引力とケプラーの法則 — 第2法則を万有引力に適用すると、惑星の軌道が導出されます
- エネルギー保存則 — 運動方程式を積分して得られる保存量であり、力学の問題を解く強力な代替手段です
- 運動量保存則 — 第3法則から導かれる保存則で、衝突問題の解析に不可欠です
- 角運動量と力のモーメント — 回転運動への拡張で、天体力学やジャイロスコープの理解に必要です