|TNKS1407 解説
← 解説一覧へ

数値積分とは何か — 運動方程式を「1コマずつ」解く

2026.06.07

運動方程式は「次の瞬間どう動くか」しか教えてくれない。それを Δt ずつ繰り返して未来を作るのが数値積分(オイラー法)。自由落下のデモで体感する。

▶ 自由落下デモを全画面で開く

運動方程式 ma=Fma=F を「立てた」あと、私たちは何をしているんだろう。式を立てたのに、なぜまだ未来が分からないんだろう ── そう思うよね。じつは ma=Fma=F は、未来を一気に手渡してくれる魔法じゃない。次の一歩を作るためのルール なんだ。だから式を立てただけでは、物体が次の瞬間どこにいるかも、まだ分からない。一歩ずつ、自分で歩かせてやる必要がある。

運動方程式は「次の一歩」しか教えない

運動方程式が直接くれるのは、その瞬間の 加速度 だけだ。自由落下なら a=ga=g。加速度は「速度がどう変わるか」を表すだけで、「いまどこにいるか」までは言ってくれない。

だから位置を知るには、こうするしかない。ごく短い時間 Δt\Delta t のあいだは加速度が一定だと信じて、一歩だけ未来を作る。そしてそれを繰り返す。

更新ループ:a → v → x

状態 nn(時刻 tnt_n での位置 xnx_n・速度 vnv_n)から、次の状態へ進む手順はこうだ。

an=ga_n = g vn+1=vn+anΔtv_{n+1} = v_n + a_n\,\Delta t xn+1=xn+vnΔtx_{n+1} = x_n + v_n\,\Delta t

加速度から速度を更新し、速度から位置を更新し、nn+1n \leftarrow n+1 してまた繰り返す。これだけ。この素朴な反復が 数値積分(いちばん簡単な形=オイラー法)だよ。運動方程式は「次の一歩」しかくれないけれど、一歩を積み重ねれば未来全体が描ける。

ひとつ、引っかかりやすい所。位置を進めるのに使うのは、その区間の 古い速度 vnv_n のほうだ(更新後の vn+1v_{n+1} ではない)。なんだか損した気もするけど、理由は単純で ── いま手にしているのは vnv_n までだからvn+1v_{n+1} は、たった今この行で計算したばかりの“次の”値で、この一歩を進めるときにはまだ存在していなかった。だから一歩進むあいだは、知っている vnv_n で進むしかない。「いまの速さで Δt\Delta t だけ進む」と思えばいいよ。

触ってみる

下のデモは、自由落下をこのループで1コマずつ解いていくところ。「1ステップ進める」を押すと、a → v → x が順に光る。再生すると、速度の矢印は毎回同じだけ伸び、位置の増え方はどんどん大きくなる ── これが「加速」だ。

見るときのコツ。点そのものより、厳密解(薄い線)からのずれ に目を置いてほしい。Δt\Delta t を大きくすると、あとで触れる“古い速度のまま進む嘘”が目に見えて、点が本当の放物線から離れていく。Δt\Delta t を小さくすると、その嘘が細かく刻まれて、折れ線がだんだん本物の放物線へ重なっていくはずだ。

euler.tnks1407.com全画面で開く ↗

Δt を小さくすると、厳密解に近づく

このループは近似だ。どこで近似しているのか、を言葉にしておきたい。本当は、Δt\Delta t のあいだにも速度は少しずつ増えている。でもオイラー法は、その区間を「はじめの速度 vnv_n のまま進んだ」とみなして位置を出す。ここに、小さな嘘がある。自由落下なら、区間の途中で本当はもう少し速くなっているのに、はじめの遅い速度で進んだことにするので、1コマごとに移動距離をちょっとだけ小さく見積もる。その小さな嘘が積もって、折れ線が厳密解から少しずつずれていくんだ。だから Δt\Delta t を小さくすると、一回ぶんの“嘘をつく時間”が短くなって、ずれも小さくなる ── Δt\Delta t が大きいとカクカクした折れ線になり、小さくすると点の列がなめらかになって本当の答えに寄っていくのは、これが理由だよ。

速度 v 時間 t vₙ vₙ₊₁ Δt オイラー=vₙの長方形 足りない=誤差 本当=台形
本当の移動距離は、速度カーブの下=台形の面積。でもオイラー法は古い速度 vₙ の長方形で進むから、上の三角形のぶんだけ足りない ── これが1コマぶんの誤差。Δt を小さくすると、この三角形も小さくなる。

自由落下の厳密解は

x(t)=12gt2x(t) = \tfrac12 g t^2

で、デモでも「点=近似」「薄い線=厳密」を重ねてある。Δt\Delta t0.10.050.020.1 \to 0.05 \to 0.02 と刻むほど、両者が重なっていくのが見えるはずだ。(この x=12gt2x=\tfrac12gt^2 は、初期位置を 00、初速を 00、下向きを正 にとったときの形だよ。最初に高さや初速があれば、その分が足される。)

ループを縮めたものが「積分」

「加速度を求める → 微小時間後の速度と位置を出す → また加速度を…」── この反復を、無限に細かくした極限で一気に書いてしまう数学が、解析的な 積分 \int だ。

v(t)=0tadt,x(t)=0tvdtv(t)=\int_0^t a\,dt',\qquad x(t)=\int_0^t v\,dt'

紙の上で閉じた式に縮約できるなら、それがいちばん速い。でも現実の運動方程式は、空気抵抗や複雑な力が入ると手では積分できないことのほうが多い。そのときは、このデモがやっているように、計算機に Δt\Delta t ずつ泥臭く積み上げてもらう。数値積分は、積分が解けないときの「力技だけど確実な」やり方なんだ。

同じループで、もっと色々解ける

このループの強いところは、運動が変わっても「加速度の決め方」を差し替えるだけで済むこと。上のデモの「運動」セレクトで切り替えられる。

空気抵抗 ── 速度に比例する抵抗があると、加速度は一定じゃなくなる:

a=gkva = g - k v

ここでの kk は、抵抗の強さを質量で割ったような、加速度に効く係数 だと思えばいい(速さ vv が大きいほど、上向きの抵抗が kvkv だけ効く、という簡単化だね)。速くなるほど加速度が減り、やがて a=0a = 0 になって速度が一定になる。これが終端速度 v=g/kv_\infty = g/k だ。式が vv を含むぶん手で積分するのは少し面倒だけど、ループのほうは「その瞬間の aagkvg - kv で計算する」一行を変えるだけ。終端速度に寝ていく曲線が、そのまま出てくる。

斜方投射(2次元) ── 多次元でも、やることは同じ。水平と鉛直に分けて、それぞれに同じループをかけるだけ:

ax=0,ay=ga_x = 0, \qquad a_y = -g

水平は等速(vxv_x 一定)、鉛直だけが重力で変わる。2つを合わせると、あの放物線が点の列として描かれていく。「2次元の運動」も、結局は「1次元のループ × 成分の数」なんだ。

ここが数値積分の効きどころだよ。手で積分できる素直な問題(自由落下)から、面倒な問題(空気抵抗)、多次元(斜方投射)まで、同じ1つのループで通せる。複雑な現実の運動を計算機が解けるのは、この素朴さのおかげなんだ。

ひとつだけ、誤解しないように。ここで見たオイラー法は、数値積分の いちばん素朴な入口 だ。実際には、同じ「1コマずつ進める」という考えの上に、さっきの“古い速度のまま進む嘘”を減らす、もっと賢い進め方がある(区間の真ん中あたりの速度を見越して使う、など)。けれど芯は変わらない ── 運動方程式がくれる“次の一歩”を積み重ねて、未来を作る。

結局、数値積分とは、運動方程式を時間に沿って読む方法 なんだ。式が一歩ずつ差し出す「次の瞬間」を、根気よく最後までたどっていく。次の 仕事とエネルギー では、同じ運動方程式を、まったく逆の向き ── 時間を追わずに、始点と終点の帳尻だけで読む ── から眺めることになるよ。


関連:「何が運動を一意に決めるのか(自由度と束縛条件)」は 運動方程式ラボ で触れている。あちらが “何が運動を決めるか”、この記事が “決まった運動をどう解くか” の対になっているよ。