偏微分を用いた誤差伝播の計算を自動化しよう

2026-06-29

誤差伝播(Error Propagation)とは

実験では、求めたい物理量を直接測定できないことが多々あります。 例えば、物体の体積 VV を求めるために、縦 aa、横 bb、高さ cc をそれぞれノギスで測定し、V=a×b×cV = a \times b \times c という式で計算するとします。

このとき、a,b,ca, b, c の測定にはそれぞれ必ず「測定誤差(不確かさ)」が含まれています。では、計算結果である VV にはどれくらいの誤差が含まれるのでしょうか。 このように、複数の測定値の誤差が計算結果にどう影響するかを見積もる手法を「誤差伝播」と呼びます。

レポートで「V=30.00±0.10 cm3V = 30.00 \pm 0.10 \ \mathrm{cm^3}」のように書くときの、±\pm の後ろの数字を求める作業がこれにあたります。

誤差伝播の公式

変数 x,y,zx, y, z \dots から計算される関数 f(x,y,z)f(x, y, z \dots) の誤差 Δf\Delta f は、各変数が互いに独立であると仮定した場合、次の式で求められます。

Δf=(fxΔx)2+(fyΔy)2+\Delta f = \sqrt{ \left( \frac{\partial f}{\partial x} \Delta x \right)^2 + \left( \frac{\partial f}{\partial y} \Delta y \right)^2 + \dots }

ここで登場する fx\frac{\partial f}{\partial x}偏微分です。xx 以外の変数をすべて定数とみなして xx で微分する、という計算になります。

なぜ単純な足し算ではなく「二乗和の平方根」なのか

ここでつまずく人が非常に多いところなので、先に説明しておきます。

もし誤差をそのまま足して Δf=Δx+Δy\Delta f = \Delta x + \Delta y としてしまうと、それは「xx の誤差と yy の誤差が、毎回同じ向きに、最大限にずれる」という最悪のケースを想定したことになります。

しかし偶然誤差は、プラス側にずれることもマイナス側にずれることもあります。両方が同時に最大までずれるのは極めて稀で、多くの場合は互いに打ち消し合います。この「打ち消し合い」を正しく織り込むと、単純な和ではなく二乗和の平方根になります。

数学的には、独立な確率変数の分散が加法的であることに由来します。誤差を標準偏差とみなすと、分散(=標準偏差の2乗)どうしが足し算になり、最後に平方根を取って標準偏差に戻す、という流れです。

実際、Δx=Δy=0.05\Delta x = \Delta y = 0.05 のとき、

  • 単純な和:0.05+0.05=0.100.05 + 0.05 = 0.10
  • 二乗和の平方根:0.052+0.0520.071\sqrt{0.05^2 + 0.05^2} \approx 0.071

となり、単純な和は誤差を約1.4倍過大評価してしまいます。

もう一つ重要な帰結があります。二乗するため、小さい誤差の影響は極端に小さくなるという点です。0.10.10.010.01 を合成すると 0.12+0.0120.1005\sqrt{0.1^2 + 0.01^2} \approx 0.1005 で、ほぼ 0.10.1 のままです。つまり誤差の合成では、一番大きい項がほぼすべてを決めます。これは後述する「どの測定を改善すべきか」という考察に直結します。

よく使う形の早見表

毎回偏微分するのは大変ですが、典型的な形については結果を覚えておくと検算に便利です。

計算の形誤差の伝わり方
f=x+yf = x + yf=xyf = x - yΔf=(Δx)2+(Δy)2\Delta f = \sqrt{(\Delta x)^2 + (\Delta y)^2}
f=cxf = cxcc は定数)Δf=cΔx\Delta f = \lvert c \rvert \Delta x
f=xyf = xyf=x/yf = x/yΔff=(Δxx)2+(Δyy)2\dfrac{\Delta f}{\lvert f \rvert} = \sqrt{\left(\dfrac{\Delta x}{x}\right)^2 + \left(\dfrac{\Delta y}{y}\right)^2}
f=xnf = x^nΔff=nΔxx\dfrac{\Delta f}{\lvert f \rvert} = \lvert n \rvert \dfrac{\Delta x}{\lvert x \rvert}
f=xaybf = x^a y^bΔff=(aΔxx)2+(bΔyy)2\dfrac{\Delta f}{\lvert f \rvert} = \sqrt{\left(a\dfrac{\Delta x}{x}\right)^2 + \left(b\dfrac{\Delta y}{y}\right)^2}
f=lnxf = \ln xΔf=Δxx\Delta f = \dfrac{\Delta x}{\lvert x \rvert}
f=exf = e^{x}Δff=Δx\dfrac{\Delta f}{\lvert f \rvert} = \Delta x

ポイントは、足し算・引き算では絶対誤差が、掛け算・割り算では相対誤差が二乗和になるということです。ここを混同する間違いが非常に多いので注意してください。

特に引き算には注意が必要です。x=10.00±0.05x = 10.00 \pm 0.05y=9.90±0.05y = 9.90 \pm 0.05 のとき、xy=0.10±0.07x - y = 0.10 \pm 0.07 となり、相対誤差が70%まで悪化します。近い値どうしの引き算は精度を壊すので、実験の設計段階で避けられないか検討する価値があります。

計算例1:直方体の体積

縦・横・高さをノギス(最小目盛 0.05 mm0.05\ \mathrm{mm})で測定したとします。

  • a=20.00±0.05 mma = 20.00 \pm 0.05\ \mathrm{mm}
  • b=30.00±0.05 mmb = 30.00 \pm 0.05\ \mathrm{mm}
  • c=50.00±0.05 mmc = 50.00 \pm 0.05\ \mathrm{mm}

体積は V=abc=20.00×30.00×50.00=30000 mm3V = abc = 20.00 \times 30.00 \times 50.00 = 30000\ \mathrm{mm^3} です。

掛け算なので相対誤差で計算します。

ΔVV=(0.0520.00)2+(0.0530.00)2+(0.0550.00)2\frac{\Delta V}{V} = \sqrt{\left(\frac{0.05}{20.00}\right)^2 + \left(\frac{0.05}{30.00}\right)^2 + \left(\frac{0.05}{50.00}\right)^2}

各項を計算すると、

=(2.50×103)2+(1.67×103)2+(1.00×103)2=3.17×103= \sqrt{(2.50\times10^{-3})^2 + (1.67\times10^{-3})^2 + (1.00\times10^{-3})^2} = 3.17\times10^{-3}

したがって ΔV=30000×3.17×103=95 mm3\Delta V = 30000 \times 3.17\times10^{-3} = 95\ \mathrm{mm^3} となり、

V=(3.000±0.010)×104 mm3=30.00±0.10 cm3V = (3.000 \pm 0.010) \times 10^{4}\ \mathrm{mm^3} = 30.00 \pm 0.10\ \mathrm{cm^3}

と書けます。

ここで各変数の寄与度を見てみましょう。二乗した値の比率を取ると、

  • aa:62.3%
  • bb:27.7%
  • cc:10.0%

となります。同じ 0.05 mm0.05\ \mathrm{mm} の誤差でも、一番短い辺 aa が全体の6割を占めています。相対誤差は「誤差 ÷ 測定値」なので、値が小さいほど相対誤差が大きくなるためです。もし精度を上げたいなら、cc を丁寧に測り直しても意味がなく、aa の測定方法を改善すべきだと分かります。

計算例2:単振り子から重力加速度を求める

学生実験の定番です。振り子の長さ LL と周期 TT から、

g=4π2LT2g = \frac{4\pi^2 L}{T^2}

で重力加速度を求めます。LL の指数は 11TT の指数は 2-2 なので、早見表の f=xaybf = x^a y^b の形が使えます。

Δgg=(ΔLL)2+(2ΔTT)2\frac{\Delta g}{g} = \sqrt{\left(\frac{\Delta L}{L}\right)^2 + \left(2\frac{\Delta T}{T}\right)^2}

TT の係数が 22 になっている点が重要です。周期の誤差は2倍に増幅されて効きます

L=1.000±0.002 mL = 1.000 \pm 0.002\ \mathrm{m}T=2.006±0.005 sT = 2.006 \pm 0.005\ \mathrm{s} とすると、g=9.8107 m/s2g = 9.8107\ \mathrm{m/s^2} で、

Δgg=(2.00×103)2+(4.99×103)2=5.37×103\frac{\Delta g}{g} = \sqrt{(2.00\times10^{-3})^2 + (4.99\times10^{-3})^2} = 5.37\times10^{-3}

Δg=9.8107×5.37×103=0.053\Delta g = 9.8107 \times 5.37\times10^{-3} = 0.053 なので、

g=9.81±0.05 m/s2g = 9.81 \pm 0.05\ \mathrm{m/s^2}

寄与度は TT が86.1%、LL が13.9%。圧倒的に周期の測定精度が支配的です。

なぜ「10周期分を測って10で割る」のか

ここが実験手順の理由づけになります。ストップウォッチを人間が押す際の反応時間の誤差は、おおよそ 0.05 s0.05\ \mathrm{s} 程度です。

1周期だけを測ると T=2.006±0.05 sT = 2.006 \pm 0.05\ \mathrm{s} となり、

Δgg=(2.00×103)2+(4.99×102)24.99×102\frac{\Delta g}{g} = \sqrt{(2.00\times10^{-3})^2 + (4.99\times10^{-2})^2} \approx 4.99\times10^{-2}

Δg0.49\Delta g \approx 0.49、つまり g=9.8±0.5 m/s2g = 9.8 \pm 0.5\ \mathrm{m/s^2} にしかなりません。

一方、10周期分をまとめて測って 10T=20.06±0.05 s10T = 20.06 \pm 0.05\ \mathrm{s} とすれば、押す回数は同じなので誤差も 0.05 s0.05\ \mathrm{s} のままです。これを10で割ると T=2.006±0.005 sT = 2.006 \pm 0.005\ \mathrm{s} となり、誤差がちょうど 1/101/10 になります。結果は先ほどの g=9.81±0.05g = 9.81 \pm 0.05 で、精度が10倍改善しています。

「なぜ10周期測るのか」という考察は、この誤差伝播の計算をそのまま書けば説得力のあるものになります。

よくある間違い

1. 誤差をそのまま足してしまう

前述のとおり過大評価になります。Δf=Δx+Δy\Delta f = \Delta x + \Delta y ではなく、必ず二乗和の平方根を取ってください。

2. 絶対誤差と相対誤差を混同する

掛け算・割り算では相対誤差 Δx/x\Delta x / x を二乗和にします。ここに絶対誤差を入れると答えが数桁変わります。

3. 誤差の桁数が主値と合っていない

V=30.00±0.1V = 30.00 \pm 0.1 のような書き方は不正確です。誤差は有効数字1〜2桁に丸め、主値の末尾の桁を誤差に揃えます30.00±0.1030.00 \pm 0.10)。詳しくは有効数字の扱い方で解説しています。

4. 変数が独立でないのに公式を適用する

この公式は「各変数の誤差が互いに無関係」であることが前提です。同じ物差しの目盛りのずれが aa にも bb にも同じ向きで乗っている場合、それは独立ではありません。厳密には共分散の項が必要になります。学生実験では独立とみなして問題ないことがほとんどですが、レポートに前提として一言書いておくと丁寧です。

5. 系統誤差まで伝播させようとする

誤差伝播が扱えるのは偶然誤差だけです。ゼロ点がずれている、校正が狂っている、といった系統誤差は、何回測っても同じ向きにずれるため、二乗和では小さくなりません。これは測定前の校正で潰すべきものです。

手計算の壁

公式自体はシンプルですが、実際の実験式に適用しようとすると、途端に面倒になります。

  • 式の中に sin\sinlog\log が入っていて、偏微分でミスをした
  • 変数が4つも5つもあり、それぞれの偏微分と二乗和を電卓で叩くのに何十分もかかる
  • 後から1つの測定値の間違いに気づき、すべて計算し直しになった
  • 検算したいが、もう一度同じ計算をする気力がない

早見表に載っている形ならまだしも、f=x2sinyzf = \dfrac{x^2 \sin y}{\sqrt{z}} のような式になると、手計算は現実的ではありません。

ツールで偏微分と誤差計算を自動化する

そこで用意したのが、当サイトの誤差伝播ツールです。

x^2 * sin(y) のような計算式を入力し、各変数の「測定値」と「誤差」を入れるだけで、次の処理をすべて自動で行います。

  1. 数式解析による自動偏微分:入力された数式を解析し、各変数に対する偏微分式を記号的に導出します。数値微分ではないので、刻み幅の選び方で結果が変わることがありません。
  2. 値の代入と誤差計算:測定値を代入し、全体の誤差 Δf\Delta f を計算します。
  3. 誤差寄与度の可視化:「どの変数の誤差が最終結果に最も効いているか」を表で表示します。上の例で見たように、寄与度が分かると考察が書けます。「aa の寄与が62%なので、次はノギスではなくマイクロメータで測定すべきである」といった具体的な改善提案につながります。

「変数を追加」ボタンで必要なだけ変数を増やせるので、5変数、6変数の式でも手間は変わりません。

まとめ

  • 誤差伝播は、偏微分した係数に各誤差を掛け、二乗和の平方根を取る
  • 二乗和になるのは、偶然誤差が互いに打ち消し合うため。単純な和は過大評価
  • 和・差は絶対誤差、積・商は相対誤差で合成する
  • 一番大きい誤差項がほぼすべてを決めるので、寄与度を見れば改善すべき測定が分かる
  • 独立性と偶然誤差であることが前提。系統誤差は伝播式では消えない

手計算に疲れたら、誤差伝播ツールで自動化してみてください。あわせて最小二乗法ツールを使えば、グラフの傾き・切片の不確かさも自動で求められます。