誤差について
ある一つの問題を解こうとするとき、ある特別な場合を除いて、誤差は必ず起こり得る。
なぜなら、数値計算では、筆算にしろ電卓を使うにしろ、無限の桁数を持つ数値は扱えない
からである。
数学では、理論値で数値計算するので、平方根や対数などのいろいろな記号を駆使して、
きっちり計算結果を示すことが可能であるが、他の実験科学(物理、化学、生物、・・・)では、
実験値でデータを処理するので、誤差との同居は宿命である。
どんなに正しい計算をする人でも、どんなに優秀なコンピュータでも、このことは避けるこ
とのできないことである。
例 数学では、通常、分数表記 たとえば、 | を用いるが、実験値としては、小数表記 | |
0.6 を用いるのが常識となっている。0.60、0.600、0.6000、・・・ などによって、その数 | ||
の有効桁数を示し、その数値の精度を表すことになっている。 |
具体的な問題を、数学の問題として記述するとき、不正確なデータや仮定が入る場合が
ある。
このとき、いくら正確に計算を行っても、計算結果は意味のないものになってしまう。
問題の記述の段階で生ずる誤差を、入力誤差(観測誤差)という。
数学的に問題を解析するとき、条件の簡素化を行うことが多い。摩擦力や空気抵抗を無
視したり、球面なのに平面と考えたり、無限回の操作が必要なのに有限回で打ち切ったり
する。
誤差を意識する場合、これらの簡素化は注意深くやらなければならない。
問題を解析し、数値計算の問題へ直すときに生ずる誤差を、解析誤差という。
プログラムを組んでコンピュータで計算を行う段階になっても誤差は起こり得る。
桁数の長い数を決められた桁数の数で近似する操作を、「丸め」という。計算には、その
ために生ずる誤差、丸め誤差がつきものであり、決定的な段階での丸め誤差が、結果に
大きく影響する場合がある。
このように非常に多くの誤差が存在し、計算結果に及ぼす影響は計り知れない。その呪
縛から逃れることは、とても難しくかつ困難である。
そこで、誤差の影響を最小限に抑えるように、問題に対処することが重要になってくる。
誤差は、 (測定値)−(真の値) で求められる。
但し、真の値は、絶対に知ることが不可能な値なので、個々の測定値に対する誤差も絶
対に知ることができない値である。
従って、単に誤差という場合は、最大誤差を指す場合が多い。
問題を解く段階で与えられた数値が、正確な値なのか、誤差を含む値なのか判断に迷う
場合がある。その場合は、有効数字に注意して計算することになる。
<<結果の有効数字の決め方>>
(1)答の有効数字の桁数が指定されているとき
1桁多く算出し、四捨五入によって、所要の桁数とする
(2)答の有効数字の桁数が指定されていないとき
(イ)問題中の有効数字の桁数がそろっているとき
問題中の有効数字の桁数にあわせる
(ロ)問題中の有効数字の桁数がそろっていないとき
最も小さい有効数字の桁数にあわせる
(例 38.74÷6.9=5.61449 →5.6)
(ハ)問題中の有効数字の桁数が明示されていないとき
規則:問題中の数の桁数とほぼ等しくとる
(例:3.27×2.59=8.4693 →8.47)
規則:n乗およびn乗根は、元の数の桁数とほぼ等しくとる
(例:0.876の3乗=0.67222・・・ →0.672
3乗根0.876=0.95682・・・ →0.957)
規則:いろいろな桁数の数が混在しているときは、中間の桁数をとる
(例:4.726×5.8=27.4108・・・ →27.4(4桁、2桁→3桁)
5.43×2.582=2.10302・・・ →2.10(3桁、4桁→3桁))
<<途中計算の有効数字の決め方>>
問題中の数の桁数、答に要求されている桁数より1桁程度多くとる
(例: 5.38×6.74×4.12×4.37
36.2612
=36.26×4.12×4.37
149.3912
=149.4×4.37
=652.878=653
そのまま計算すると、652.8611318で、やはり653)
<<加算・減算の結果の有効数字の決め方>>
最も最大誤差の大きい数と末位を一致させる
(例: 736.37+91.468+1265.5+8.7363=2102.0743 →2102.1)
各数を所要の桁より1位低くとり計算してもよい
(例: 736.37+91.468+1265.5+8.7363
=736.37+91.47+1265.5+8.74=2102.08 →2102.1)
<<浮動小数点表示された数の四則演算>>
N=±a×10n (a:仮数部で、0≦a≦1、n:指数部)
の形の数値計算は、次のような手順で行う。
(1) 乗除算の場合
(@) 符号を決める
(A) 仮数部の乗除算を行う(2倍の桁数まで計算する)
(B) 指数部の加減算を行う
(C) 正規化(小数第一位の数を0以外の数にすること)と丸めを行う
例 (0.1357×103)×(0.2468×102)
=(0.1357×0.2468)×105
=0.03349076×105
=0.3349×104
(2) 加減算の場合
(@) 指数部を大きい方に合わせる
(A) 仮数部の加減算を行う(桁数を数桁多く計算する)
(B) 正規化(小数第一位の数を0以外の数にすること)と丸めを行う
例 (0.1357×103)+(0.2468×102)
=(0.1357×103)+(0.02468×103)
=(0.1357+0.02468)×103
=0.16038×103
=0.1604×103
加減算において、注意しなければならない場合がある。
ほぼ等しい数の減算の場合には、有効数字の喪失(これを、桁落ちという)という現象が
起きる。この場合は、所要の桁数より3〜4桁多くとって計算する。
例 (0.1357×103)−(0.1355×103)=0.0002×103=0.2
上記の計算では、有効数字4桁の数が有効数字1桁の数に桁落ちしている。これを、3桁
の桁落ちという。
一般に、p桁の桁落ちがあると、その相対誤差は、10p 倍にもなるという。
同様のことが平方根の計算でも起こり得る。
例えば、十分小さいXに対して、 の値を求める場合である。
X=0.1357×10-2 に対して、1+X=1.0014 より、 =0.7×10-3 位
と計算で求められるが、桁落ちにより、多くの誤差を含んでしまっている。
桁落ちを防ぐ方法としては、分子の有理化という方法がよく知られている。
実際に、
どちらがより真の値に近いかというと、
≒ 0.0006783=0.6783×10-3 ということから明らかであろう。
2次方程式の解を、解の公式を用いて数値計算する場合、上と同様なことが起こり得る。
(aX2+bX+c=0 において、4c に比べて、b2 が十分大きい場合)
その場合は迷わず分子の有理化を実行して、桁落ちによる相対誤差の増加を防げばよい。
また、次のように、問題の出題者が注意しなければならない場合もある。
例 =3.16 のとき、
の値を求めよ。
通常は、分母を有理化して、
と計算してくれるものと出題者は期待するが、次のように計算する人もいないわけではない。
私だったら、この解答も正解とするが、一般的には、どうなんだろうか?
<<掛け算の回数>>
数値計算をするとき、できるだけ掛け算の回数は減らした方がよい。
A10 を計算するとき、A,A2,A3,・・・と順次計算していくのは、堅実であるが、非能率で
ある。実は、A10 は、4回の掛け算で求めることが出来る。
((A2)2×A)2
と分解すればよい。
同様にして、A100000 の掛け算の回数は、20回で済むし、A488 は、11回の掛け算で
済む。何故かは、皆さんの課題としたい。
(参考文献:D.G.Moursund C.S.Duris
Elementary Theory and Application of Numerical Analysis(McGraw-Hill)
野崎昭広 数値解析について(昭和57年度神奈川県数学講座)
力武常次・北村良夫・清水光治 物理T・U(数研出版)
名取 亮 著 線形計算(朝倉書店))