微分方程式の基礎(振動・減衰)
ばね・質量・ダンパー系の運動方程式から学ぶ常微分方程式と、その数値解法(オイラー法)
- 1
- 微分方程式とは、未知関数そのものとその導関数の関係を記述する方程式であり、質点の運動やばねの振動など「変化のルール」から未来の状態を予測するための数学的道具
- 2
- 質量 m・ばね定数 k・減衰係数 c を持つ系の運動方程式 は、減衰の強さによって「振動しながら減衰(不足減衰)」「振動せず戻る(過減衰)」「最速で戻る(臨界減衰)」の3種類の挙動に分かれる
- 3
- 厳密解が求まらない複雑な微分方程式でも、時間を微小なステップ に区切って一次近似を繰り返す「オイラー法」を使えばコンピュータで数値的に解くことができ、これはゲームエンジンの物理シミュレーションの基礎となっている
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
微分方程式とは、未知関数そのものとその導関数の関係を記述する方程式であり、質点の運動やばねの振動など「変化のルール」から未来の状態を予測するための数学的道具
身につく武器・思考力
質量 m・ばね定数 k・減衰係数 c を持つ系の運動方程式 $m x'' + c x' + k x = 0$ は、減衰の強さによって「振動しながら減衰(不足減衰)」「振動せず戻る(過減衰)」「最速で戻る(臨界減衰)」の3種類の挙動に分かれる
実社会・ITでの活躍現場
- •物理エンジンのばねシミュレーションとUIの「バネのような」アニメーションイージング
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
質量 m・ばね定数 k・減衰係数 c のスライダーを動かして、変位 x(t) の時間変化グラフがどう形を変えるか観察しよう。減衰係数を 0 に近づけると永遠に振動し続け、大きくしすぎると振動せずゆっくり(あるいは急速に)静止位置に戻る「過減衰」に切り替わる。減衰比 ζ の値と挙動の分類(不足減衰・臨界減衰・過減衰)が連動して表示される。
固有角振動数 ≈ 2.45 rad/s、減衰比 ≈ 0.204
判定: 不足減衰(振動しながら減衰)
運動方程式: (セミインプリシット・オイラー法で数値的に解いています)
↑ 減衰係数 c を 0 に近づけると永遠に振動し続け(不足減衰)、大きくしすぎると振動せず一直線に静止位置へ戻る(過減衰)。 ζ = 1 の臨界減衰がその境目で最も速く収束する。
ばね-質量-ダンパー系 において、減衰比 が ()のとき、系の挙動として正しいものはどれか?
Layer 2 — 定義・受験・証明
定義
未知関数 とその導関数 の関係を記述する方程式を「微分方程式(ODE: 常微分方程式)」と呼ぶ。 代表例として、質量 の物体がばね定数 のばねと減衰係数 のダンパー(抵抗)に接続された系の運動方程式(ニュートンの第二法則 より)は次の2階線形常微分方程式で表される。
ここで は釣り合い位置からの変位である。
公式・数理モデル
証明・導出
特性方程式による解法: 解の形を と仮定して方程式に代入すると、
という「特性方程式」が得られる。これは に関する2次方程式なので、判別式 の符号によって解の性質が3通りに分かれる。
固有角振動数 (減衰がないときの振動数)と減衰比 を導入すると、特性方程式の解は
となる。
1. (不足減衰): なので は複素数となり、減衰角振動数 を用いて一般解は となる。振幅 で包絡されながら振動する。 2. (臨界減衰):重解 を持ち、一般解は となる。振動せず、最も速く釣り合い位置に収束する。 3. (過減衰):2つの異なる実数解 を持ち、一般解は となる。振動せず、ゆっくりと釣り合い位置に戻る。
押さえておきたいポイント
- 固有角振動数 は「減衰も外力もないときにこの系が振動する速さ」を表す
- 減衰比 の値だけで挙動が完全に分類できる: 不足減衰、 臨界減衰、 過減衰
- 厳密解が困難な非線形の微分方程式でも、時刻 の状態から微小時間 後の状態を と近似的に更新する「オイラー法」を繰り返せば数値的に解を追跡できる
- オイラー法は近似誤差が蓄積するため、ゲームエンジンや物理シミュレーションでは速度を先に更新する「セミインプリシット(半陰的)オイラー法」がよく使われ、エネルギーの発散を抑えて安定性を高めている
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
物理エンジンのばねシミュレーションとUIの「バネのような」アニメーションイージング
ゲームエンジンやモバイルUIの「弾むような」アニメーション(iOSのスプリングアニメーションなど)は、まさにばね-質量-ダンパー系の微分方程式を毎フレーム数値的に解くことで実現されている。厳密解の三角関数を使わず、セミインプリシット・オイラー法で位置と速度を逐次更新するのが実務上の定番手法。
1// ばね-質量-ダンパー系: m x'' + c x' + k x = 0 のシミュレーション2interface SpringState {3 position: number; // 変位 x4 velocity: number; // 速度 x'5}67function stepSpring(8 state: SpringState,9 mass: number,10 stiffness: number, // ばね定数 k11 damping: number, // 減衰係数 c12 dt: number // 時間刻み h13): SpringState {14 // 加速度 a = x'' = -(k x + c x') / m (F = ma より)15 const acceleration =16 (-stiffness * state.position - damping * state.velocity) / mass;1718 // セミインプリシット・オイラー法: 先に速度を更新し、その新しい速度で位置を更新する19 // (通常のオイラー法より数値的に安定し、エネルギーが発散しにくい)20 const newVelocity = state.velocity + acceleration * dt;21 const newPosition = state.position + newVelocity * dt;2223 return { position: newPosition, velocity: newVelocity };24}2526// 例: UIパネルを x=1 の位置からバネで x=0 (目標位置) へ滑らかに戻すアニメーション27let state: SpringState = { position: 1, velocity: 0 };28const mass = 1;29const stiffness = 170; // 硬いバネ = 素早い収束30const damping = 20; // 適度な減衰 = わずかにオーバーシュートして収束31const dt = 1 / 60; // 60fps3233for (let frame = 0; frame < 90; frame++) {34 state = stepSpring(state, mass, stiffness, damping, dt);35 // 実際のアプリでは state.position をUI要素の座標に反映する36}37console.log(`90フレーム後の位置: ${state.position.toFixed(4)}`); // ほぼ 0 に収束
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元