誤差の伝播

正しい誤差の見積もりと、表記の方法について。

[
前の記事へ]  [物理数学の目次へ]  [次の記事へ]


本当の作法

 前回は、高校までに習った有効数字の作法には正当な根拠がなさそうだという話をしたのだった。しかし基本的な作法に関しては特に問題はない。つまり「誤差を含むと思われる桁までを記録して、それより下位は四捨五入などで丸め込む」という取り決めについては捨ててしまう理由はない。

 問題があるのは四則計算の結果の何桁目までを書き残すかというルールだけである。あのような作法では誤差の程度を正しく評価できていないのである。

 では高校であのような作法を学ぶ意義は何だろうか? 引き算を行ったときに有効数字が大きく桁落ちすることがあることや、掛け算や割り算をしたときの計算結果の末尾がほとんど信用ならないことなどを手っ取り早く心に刻み込むことができるという点だけは評価できるかも知れない。
 誤差の大きさを正しく評価した上で有効数字の桁数を決める必要があるということだ。そして、誤差の大きさも可能な限りは併記する必要がある。そうでなければ、その値を使ってさらなる計算をするときに、誤差の評価が正しく出せないからである。


誤差の伝播の式

 物理量は直接の測定が簡単にできるものばかりではない。「直接測定」が難しい場合には、複数の測定の結果を組み合わせて目的の物理量の値を計算で求める場合がある。これを「間接測定」と呼ぶ。

 目的の物理量\( X \)が他の物理量\( a \)\( b \)\( c \)を使って次のような関数で表されていたとしよう。

\[ \begin{align*} X \ =\ f(a,b,c) \end{align*} \]
 測定した\( a \)\( b \)\( c \)の値を使えば\( X \)の値が求まる。\( a \)\( b \)\( c \)の値に含まれる誤差がどの程度であるかが分かっているとき、この計算した\( X \)に含まれる誤差がどの程度になるというのはどうやって求めたらいいだろうか。

 関数\( f(a,b,c) \)の形が単純なものならば難しい理論は要らない。\( a \)\( b \)\( c \)の誤差の範囲内で数値を上下させてやり、\( X \)の最大値と最小値を求めてやればいいだろう。

 しかし毎回そういうことを試すのは面倒なので、もう少し楽な方法がないか考えてみよう。

 \( f(a,b,c) \)の変数がごく僅かだけ変化して、\( f(a+\Delta a, b+\Delta b, c + \Delta c) \)になったときに次のような近似が成り立つという数学公式がある。

\[ \begin{align*} f(a+\Delta a, b+\Delta b, c + \Delta c) \ \kinji \ f(a,b,c) \ +\ \pdif{f}{a} \, \Delta a \ +\ \pdif{f}{b} \, \Delta b \ +\ \pdif{f}{c} \, \Delta c \end{align*} \]
 これは「多変数関数のテイラー展開」を 1 次の項まで計算したものである。これが成り立つ数学的な理屈は別の機会に説明しよう。あまり詳しく知らなくても話には付いてこれる。\( \pdif{f}{a} \)という記号は偏微分というもので、\( a \)以外の変数をただの定数であるかのようにみなして\( a \)で微分するという意味である。

 この近似は\( \Delta a \)\( \Delta b \)\( \Delta c \)の値が小さいほど正確さが上がっていくが、何に比べてどの程度小さければどれくらい正確になるのかということはあまり言えない。\( f(a,b,c) \)の形がよほど複雑でなければ、このような単純な近似でもかなり使える。

 これを誤差の見積もりに応用してみよう。測定値\( a \)\( b \)\( c \)が誤差を含んでいてある程度の幅\( \Delta a \)\( \Delta b \)\( \Delta c \)の範囲でずれた値になっている可能性があるとき、物理量\( X \)の値に対する影響の大きさは次のように表せるだろう。

\[ \begin{align*} \Delta X \ &=\ f(a+\Delta a, b+\Delta b, c + \Delta c) \ -\ f(a,b,c) \\ &\kinji \ \pdif{f}{a} \, \Delta a \ +\ \pdif{f}{b} \, \Delta b \ +\ \pdif{f}{c} \, \Delta c \end{align*} \]
 誤差は正の方向にずれることも負の方向にずれることもありえて、それぞれの誤差の影響が偶然にも打ち消し合うこともあるわけだが、もちろん互いに強め合うこともあって、最悪の場合を考える必要がある。それぞれの誤差が最大限に強め合う場合にどんな範囲で値が変化するかを知りたいのである。

 誤差は\( a \pm \Delta a \)のように前後に同じくらいの幅でどれくらいずれるかを表すことが多い。工業の世界では設計図面に「マイナス方向への製作上の誤差が生じることは許されない」ことを意味する表記をすることがあったりするが、物理学における測定とは別の話である。物理においてもプラスとマイナスで誤差の幅が違うという厳密な検討結果が載せられることがあるが、多くの場合では、前後に同じ幅の誤差があるという前提を使う。

 というわけで、誤差は正負のどちらのこともありうるが、この式の\( \Delta a \)などには正の値が代入されるものだとしよう。そうすれば、すべての項が正になって誤差の影響が強め合う場合を表すことができそうだ。いや、まだだめだ。\( \pdif{f}{a} \)などが負になることもありうる。その場合にはむしろ\( \Delta a \)が負になったほうが誤差は強め合うように働くわけだ。そこで、必ず最大限に強め合う状況を表すために、次のように絶対値の記号を書き入れておこう。

\[ \begin{align*} \Delta X \ \kinji \ \left|\pdif{f}{a}\right| \, \Delta a \ +\ \left|\pdif{f}{b}\right| \, \Delta b \ +\ \left|\pdif{f}{c}\right| \, \Delta c \end{align*} \]
 これがそれぞれの測定値の誤差が計算結果の値にどの程度の影響を及ぼすことになるのかを表す式、すなわち「誤差の伝播」を表す式である。ここでは変数が 3 つの場合を例にしたが、それ以上多ければ項の数を増やせばいいだけであるし、少なければ項を減らすだけで構わない。


乗除算の場合

 誤差の評価をするときに、毎回この式に従って偏微分の計算をしなければならないのは面倒くさい。高校までに習ったごまかしの方法で簡単に済ませたくなるというものだ。そうならないために、よく使う式についてはあらかじめ偏微分を計算してしまうことにしよう。多くの物理量の計算は次のような形で表されてしまう。
\[ \begin{align*} f(a,b,c) \ =\ a^l \, b^m \, c^n \end{align*} \]
 この式の\( l,m,n \)に当てはまるのは大抵は 1 か 2 の整数で、たまにはそれ以上のこともあるがあまり多くはない。割り算の場合には -1 か -2 などが入る。平方根の場合は 1/2 を入れれば表現できる。ではこの式を使って誤差の伝播を計算してみよう。
\[ \begin{align*} \Delta X \ \kinji \ \left|l\,a^{l-1} \, b^m \, c^n \right| \, \Delta a \ +\ \left| m \, a^l \, b^{m-1} \, c^n \right| \, \Delta b \ +\ \left|n \, a^l \, b^m \, c^{n-1} \right| \, \Delta c \end{align*} \]
 これを見てもあまり便利そうには感じない。もう少し簡単にまとまらないだろうか?というわけで、両辺を\( |f(a,b,c)| \)で割ってみる。つまり\( |X| \)で割るのと同じであり、左辺はそうしよう。そして右辺は\( |a^l \, b^m \, c^n| \)で割ろう。
\[ \begin{align*} \frac{\Delta X}{|X|} \ \kinji \ |l| \, \frac{\Delta a}{|a|} \ +\ |m| \, \frac{\Delta b}{|b|} \ +\ |n| \, \frac{\Delta c}{|c|} \end{align*} \]
 少しはマシになった。まだ面倒くさそうに見えるが、意味はとても単純である。この式の中に\( \Delta a/|a| \)のような形が幾つもあるのに気付くだろう。これらは測定値と比較した誤差の割合を意味しているので「相対誤差」と呼ばれている。あらかじめ各測定値の相対誤差を把握していれば、目的の物理量\( X \)の相対誤差\( \Delta X/|X| \)が簡単な計算で導けるのだ。

 式の中に物理量が 2 乗で含まれていれば、相対誤差の寄与は 2 倍になる。3 乗ならば 3 倍、ルートなら 1/2だ。しかも掛け算だろうと割り算だろうと関係ないのである。


対数の場合

 これでルートが出てくる場合の計算方法についても解決してしまった。ついでに前回の話で気にしていた対数の場合についても計算しておこう。
\[ \begin{align*} X = \log_e a \end{align*} \]
という関係であると仮定して誤差の伝播式を当てはめると、
\[ \begin{align*} \Delta X \ =\ \left| \frac{1}{a} \right| \Delta a \end{align*} \]
となる。なんと、こちらは相対誤差がそのまま\( X \)の絶対誤差\( \Delta X \)として使えるのである。相対誤差というのは本当に役に立つ感じだ。


加減算の場合

 次は足し算について考えてみよう。
\[ \begin{align*} f(a,b,c) \ =\ a + b + c \end{align*} \]
の場合は
\[ \begin{align*} \Delta X \ =\ \Delta a + \Delta b + \Delta c \end{align*} \]
となる。誤差は最悪の場合にはどんどん積み重なってゆくのでこのような計算になる。これは引き算の場合も変わらない。たとえ
\[ \begin{align*} f(a,b,c) \ =\ a - b - c \end{align*} \]
だったとしても誤差の伝播の式で計算すれば
\[ \begin{align*} \Delta X \ =\ \Delta a + \Delta b + \Delta c \end{align*} \]
のようになる。正の方向にも負の方向にもずれる可能性があるので、最悪の場合を想定すればもちろんこうなるのである。


統計を考慮する

 今の足し算の話には少し違和感がある。

 物理で何かの量を足し合わせる場合というのは同じ量どうしで行うのである。質量と長さを足し合わせたりはしない。すると、この足し算の式が使われる場面というのは、距離を幾つかの部分に分けて測って後で合計する場合だとか、あるいは、ある一つの試料の長さを何度も何度も測って合計し、平均値を算出する場合などであろう。

 前者は誤差が蓄積する可能性があるので今回の計算を使うのは妥当だが、後者についてはどうであろうか。同じ測定を何度も繰り返した場合にはある正しい値を中心に上にも下にも結果がばらつくので、誤差が打ち消し合う可能性が高くなるのではないだろうか。

 誤差には、正しいと思われる値から一定方向へずれる「系統誤差」と、ある中心の値からばらつく「偶然誤差」があるのだった。同じ測定を繰り返した場合、系統誤差は蓄積するが、偶然誤差は打ち消し合うことになる。

 しかし平均値を計算して使う場合には系統誤差の蓄積もそれほどの問題はない。系統誤差は一定方向のものだから測定して足し合わせるたびに大きくなる一方だが、結局は測定回数で割るので一回分の測定に含まれる誤差と変わらないだろう。

 そして偶然誤差の方についてはどんどん無視できるほどに小さくなっていく。平均値を使った場合、何回の測定でどれくらい偶然誤差が小さくなるものだろうか。その辺りの話は少し面倒なので、次回の記事で気持ちを切り替えて説明することにしよう。


誤差の表記法

 今回の方法を使って誤差の大きさを見積もると細かい数字が出てくるかもしれないが、それを長々と書き残す必要はない。どの桁がどれくらい怪しいかを示すことが出来れば十分なのだから最上位の 1 桁だけを残せればいいだろう。だから途中の計算も 2 桁くらいで大雑把にやっておいて、最終的に四捨五入してやればいいのである。

 ところがたまに例外もある。四捨五入した結果、最上位桁の数字が 1 になってしまう場合には 2 桁残す場合が多い。数値が小さすぎて、次にこのデータを使って計算するときの相対誤差の見積もりに影響が出やすいからである。それと、統計処理をして出した数値にも 2 桁の誤差を併記する場合が多い。それについては次回話そう。

 誤差の数値が 1 桁の場合にも 2 桁の場合にも、実験値は、誤差の末尾の桁と同じところまで書いて、それより下位の桁は四捨五入などの処理をして残さない。

 少し例を示そう。例えば誤差が 0.0732 と出たとしよう。途中の計算では 2 桁くらいを使えば十分だと書いたが、2 桁どうしの掛け算などをやっていてもこのように 3 桁や 4 桁になってしまうものだ。最上位の桁だけを残せればいいので四捨五入して 0.07 である。もし間接測定値が 3.5372 という細かい数値として得られていたとしても小数第 2 位に誤差が含まれることになるので、それより下を四捨五入して 3.54 であり、次のような表記をすることになるだろう。

\[ \begin{align*} 3.54 \pm 0.07 \end{align*} \]
 これくらい誤差が大きいと小数第 1 位にも影響が及ぶほどだが、小数第 2 位まで書いて構わない。誤差を併記しているからどれくらい信頼できるものかしっかり判断が付くだろう。

 微妙な例も見せておこう。例えば誤差が 0.00953 と出たとしよう。最上位桁だけを残すために一つ下の位を四捨五入すると 0.010 になってしまう。この場合には 2 桁書き残す。間接測定値が先ほどと同じ 3.5372 だったとしよう。誤差の末尾が小数第 3 位にあるので、そこまでを残すことにする。

\[ \begin{align*} 3.537 \pm 0.010 \end{align*} \]
 もう一つ見ておこう。誤差が 0.127 くらいだと出たらどうするか。最上位だけ残すように四捨五入すると 0.1 になって頼りないのでもう一桁残しておきたい。こういう場合には 0.13 にするくらいが良さそうだ。次のようになる。
\[ \begin{align*} 3.54 \pm 0.13 \end{align*} \]

 ここに書いたのは厳密な決まりではないが、おおよそこのような感覚で行うのである。様々な業界や学問分野によってはこれ以上に厳しい統一基準を設けていることがあるので、自分の属する世界の基準がどうなっているかはしっかり確認しておいた方がいいだろう。


気配り

 次のような表記は、ここまでに説明したことをきちんと守ってはいるのだが、避けてほしい。
\[ \begin{align*} 7.6543 \times 10^7 \pm 1.2 \times 10^4 \end{align*} \]
 ごちゃごちゃして見える。桁が合っているかどうかの確認も難しい。代わりに次のような書き方がある。
\[ \begin{align*} (7.6543 \pm 0.0012) \times 10^7 \end{align*} \]
 こうしてくれた方がずっと分かりやすい。


括弧で誤差を表す場合

 測定値の末尾に括弧を付けて、中に 1 桁か 2 桁の誤差を書き入れて表す流儀もある。例えば電子の質量は
\[ \begin{align*} 9.10938356(11) \times 10^{-31} \ [\mathrm{kg}] \end{align*} \]
のように表されていたりするが、これは
\[ \begin{align*} (9.109\,383\,56 \pm 0.000\,000\,11) \times 10^{-31} \ [\mathrm{kg}] \end{align*} \]
と書くのと同じ意味である。末尾の 56 あたりが ±11 くらい怪しいということを表している。確かにここまで精度が高くなると 0 の数を数えるのが面倒だったり無駄に文字数が増えたりするので、括弧で表した方がスマートな気がする。