第1章 数 値 解 法 の 諸 問 題
1. 数値計算の誤差と問題の誤差
1.1 誤 差 の 伝 播 . .
数値計算においては誤差を適切に評価することが重要であり、従来、誤差解析において用いられている評価法は過大評価である。又、常微分方程式の数値解に生じ異常な増大を示す誤差を打ち切り誤差では説明できないと結論し、誤差の伝播による拡大とか数値的不安定と説明することが常識的となっているが、これは重大な過ちを犯している。著者は、独自の並列計算向き数値解法を考案し、Milne 法で不安定現象を生ずる問題を正確に計算し得ることを示した。これら常微分方程式の数値解における難問と呼ばれる幾つかの例題について著者の解法を適用した結果は後に示すが、これらは適正な数値計算において誤差の伝播による拡大は有り得ないことを示している。物理学にポテンシャルエネルギー最小の原理というのがあるが、誤差の伝播による拡大という考えはこの原理に反している。誤差が拡大するのは外乱による、即ち、計算により新たな誤差が付加されるからであり、それがなければ初期のデータの誤差は計算により縮小する方向に向かうと考えるのが自然である。本節では主として誤差の伝播について詳細な検討を行なうが、従来の絶対値により定義される誤差の概念では十分な検討はできないので、本書では絶対値を付けず、符号付きで取り扱う。従って、
誤差=近似値−真値.__________.相対誤差=誤差/真値
と定義し、従来の意味で用いるときはそれらに絶対値を付けることにする。 . .
ある単精度実数A+ε とB+δ の積はAB+Aδ+εB+εδ であり、εδ は無視し得るから相対誤差の絶対値は和になり、従って、多数の実数の積を計算すれば|相対誤差|は拡大すると考えるのは誤差の見積もりとして安全ではあるが、過大な評価である。簡単のために、A, B>0 とすると、誤差が和になるのはε とδ が同符号の場合で、その確率は1/2であり、異符合の場合には誤差は差になり、その確率も1/2である。従って、相対誤差の絶対値の期待値は、
の大きい方となる。この推定は、たった2つの同程度の大きさの実数の積の場合は最大値が両者の和になるからかなり危険ではある。しかし、誤差評価においてはε やδ は各実数の有効桁以下の最も大きな値を用いるのであり、実際の誤差の第1桁が最大値を取る確率は1/10 であることを考慮すれば妥当な値である。n 個の単精度実数の積の場合は、それらがほゞ同程度の値であるとすれば、−0.5 と +0.5 の間の一様分布する乱数の n 個の和が平均値 0、分散 n/12 の正規分布となることから、n 個の積の相対誤差は、
平均値=0 , 分散=R2n/3 , (−R<単精度実数の相対誤差<R)
なる正規分布となる。n=12 とすれば標準偏差は 2Rである。従って、12 個の単精度実数の積の相対誤差の絶対値が 2R以下である確率は 68.3%、4R以下である確率は 95.4%、6R以下である確率は 99.7%である。この事実は、誤差論において相対誤差の絶対値は 12R以下であるとしているのは理論的には確実だが、実用的には著しい過大評価であること、及び、上記の確率で、誤差は伝播によりそれぞれ 1/6,1/3,1/2 に減少することを示している。除算の場合も除数の逆数の積で考えれば結果は同じである。同一の数値を繰り返し使う冪乗では n 乗なら相対誤差は n 倍になるが、n=10 でも有効桁が1桁減少するだけであり、このような状態が連続的に起こることは殆どなく、乗算や除算が入れば上記の如くこの誤差も減少していく。又、1/n 乗なら相対誤差は1/n になる。これらは乗除算や冪乗が複雑に組み合わされた計算ほど相対誤差が著しく拡大していく可能性は殆どないことを示している。 . .
適当に a, b を定め、yk=axk−1,xk=yk/a,x0=b;k=1,2,……,n の計算で n=106 等にすると log n に比例した桁数だけ精度が悪化するという議論が行われるが、切り捨て又は切り上げ計算ではそうなるが、4捨5入、16 進の7捨8入又は2進の0捨1入等が普通である現在の計算機ではこれは成立しない。電卓やパソコンで簡単に確かめられるが、同じ数を掛けて割れば元の値に戻り誤差は生じない。更に、このような計算を繰り返すことは数値計算として無意味であり、その誤差が何の様な挙動をしようとも誤差解析には無関係な机上の空論である。後に、演算子法においても述べるが、このような無意味な計算は本書の対象とする数値計算の範中には入れない。 . .
加減算は著しく誤差の拡大する場合もあり、注意を必要とする計算であるが、それは新たに誤差が付加されるか、潜在的な誤差が現れるのである。又、乗除算の場合と異なり拡大した誤差が著しく減少し元の精度に戻ることもある。
上式が示すように、A,B及びその相対誤差が同程度とすると、和の相対誤差は変わらず、それぞれの元の相対誤差は略1/2 となり、伝播により減少する。ε とδ の符号を考慮すれば乗算の場合と同様、期待値は更に半分となる。2数の大きさが著しく異なれば大きい方の数の相対誤差で十分である。即ち、普通にいわれる情報落ちは直接には精度の悪化にならない。A,Bの相対誤差が著しく異なるときはA,Bの大小関係により和の相対誤差も著しく異なる。A=0.123456×102,B=0.789×102 であれば和の相対誤差はBの相対誤差で決まり、B=0.789×10−2 であれば和の相対誤差はAの相対誤差で決まる。即ち、誤差の大きい方 が結果の誤差となるが、その相対誤差はA+B による除算の結果、元の大きい方の相対誤差より小となるのであり、小さい方の誤差が拡大されたのではない。 . .
減算の場合には相対誤差計算の分母が小さくなるので結果の相対誤差は拡大され、AとBの値が近い程拡大倍率は大きくなり、最悪の場合には有効桁がなくなる。このいわゆる桁落ち誤差が伝播により異常な拡大をすると現時点でいえる唯一のものであり、2次方程式の根の計算や、連立1次方程式の解の計算においてはその解決法も考えられているが、一般的には解決法はない。しかし、桁落ちしたものにそれより絶対誤差の大きな単精度実数が加減算されゝば上記の実例の如く精度は一挙に単精度迄改善されるので複雑な計算程桁落ち誤差も伝播しない可能性が大きい。このような例は微分方程式の数値解にはよく現れる。例えば、解が x 軸と交叉するとき、交点の近傍では零に近づくため桁落ちして精度が悪化するが、交叉後 x 軸の反対側に離れるに従い精度は改善される。解が x 軸に漸近する微分方程式、
___________(1.1)
の2進法による著者の解法では、解の指数部が1減少する、即ち、仮数部の1bit 桁落ちに相当する解の減衰で仮数部末尾に 2〜3bit の誤差が入っても、区分幅を適当に小さくして次に指数部が1減少する迄の間に適当な数の計算点を確保すれば誤差は改善されていくことが観察される。その結果、Milne 法では x=5 近辺で有効桁はなくなり以後異常振動と化し、Runge.K. 法でも x=5 近辺で10 進4桁、x=9 では2桁の有効桁しかないのに対し、第2章で示すが、著者の解法では x=5 近傍では7桁の有効桁、x=12 でも6桁の有効桁を維持し、y1=y0+Δy0 等の計算で初期値 10 から 10−30 に渡る桁落ちに相当する減衰があるにも関らず初期値等の持つ誤差は伝播しないことを示している。
. .
以上は計算に丸め誤差が入らないことを仮定して数値の持つ誤差の伝播を検討したが、1回の計算で入る丸め誤差は末尾桁に1であり、この誤差のその後の挙動は上記に述べたものと同様である。従って、従来の誤差論が主張するように一般的には単純に誤差が累積することは期待しがたく、著者の微分方程式の数値解法が示すように複雑な計算である程、丸め誤差も又伝播はしないといえる。
1.2 情報落とその改善 . .
情報落ちは何度も続けておき、累積される場合以外は直接計算精度の悪化にはならないが、単精度実数AがBより桁違いに大きいので
(A+B)−A≠B___________(1.2)
となり、理論数学で成立すべき等式が成立しないことは重大な誤差原因となる。計算を筆算で行なっていた頃は計算桁数に対する制限は緩く、視覚的な判断により可変長精度で対応できたのでこのようなことはあまり問題にならなかった。計算機の発達と共に、有効桁数以外の部分を計算することは誤差を操作しているにすぎないから意味がないという考えが一般的となり、全ての計算を単精度に丸めてしまう結果であり、A+Bで情報落ちしたBの末尾有効桁はAを減算したとき回復できず、Bの精度は著しく悪化する。これは桁落ちということもできるが、2つのデータの直接減算による桁落ちと異なり、改善する方法もある。 . .
第1の方法は、数式計算の結果、即ち、Bを直接用いることである。2次方程式の小根を求める際の逆有理化はこれに相当する。根の公式の−b と b2−4ac の平方根とがこの関係にあり、両者の和を各々の2乗の差に変換して b を相殺したものであるが、
として平方根を級数展開して b を相殺しても同じである。大きい根を根の公式で求め、小さい根は2根の積と方程式の係数との関係から求めるのは、2数の乗除算の相対誤差が高々和であることを用いたとも考えられるが、数式的には上の2つの場合と同じである。このような方法は色々考えられているが、数式計算が困難であるから数値計算の意味があるのであり、一般的な問題にこのような簡単な方法を見出すことは困難である。 . .
第2の方法は、A及びBの末尾に 0 を数桁付けて多倍長精度数とし、多倍長精度計算をすることである。こうすれば情報落ちが起きないので(1.2)は等式が成立し正しい結果となる。2次方程式の根では各係数末尾に0 を数桁付けて多倍長精度数とし、多倍長精度で平方根を求めれば逆有理化は必要ない。この方法は必要なだけの多倍長計算が可能である限り有効な方法である。しかし、倍精度計算では倍精度長の結果を得たいと思うのが計算の手間やハードウエアの制約から冗長性を嫌う計算機の分野では普通であり、部分的に倍精度長を用いるのも、2次方程式のようにそれを必要とする計算式が明確である場合以外は困難である。 . .
第3の方法は、情報落ちが生じたときは自動的に情報落ち部分を他の変数に累積していく、いわゆる積み残し法を用いることである。このとき計算に切り捨て等の丸め誤差が入るときはその補正分も積み残す必要があり、一般計算における単純な積み残し法は困難である。 . .
常微分方程式の数値解法において、従来の解法では y0, y1, y2, y3, …… という関数値を直接計算するのに対し、著者の解法は逐次階差 y0, Δy0, Δ2y0, Δ3y0, …… を直接計算し補間公式により関数値を求める。Δy0=y1−y0 で求めた階差は区分幅が小さいとき桁落ちして有効桁が減少し末尾桁は 0 であるが、著者の解法では常微分方程式の右辺の関数より直接計算されるので末尾桁も有効な情報を含んでいる。y1=y0+Δy0 の計算で y0>0 かつ Δy0<0 による減算のとき、Δy0 の絶対値が y0 に比べて十分小さくても、y0 の最上位桁が 1 で下位桁からの借りにより最上位桁が失われる桁落ちがある。微分方程式の数値解が零に漸近する場合はこのようにして最上位桁が失われていくことによるものである。そのとき最下位桁に補うべき情報、即ち、積み残し分を著者の解法による Δy0 は持っている。同様に、Δ2y0 は y2 の計算に必要な Δy1 を計算する際の積み残し分を持っている。この様に著者の解法は積み残し法を構成しているのであり、それが従来の解法では到底及びもつかない高精度と安定性を持っている1つの理由であり、逐次階差を直接計算する意義である。
1.3 問題の数値化精度 . .
2次方程式 ax2+bx+c=0 の数値解を求める際に係数をある精度で数値化するが、解の計算で誤差が入ると係数の数値化精度を悪化させたことと等価になる。単精度が 10 進5桁の計算機を仮定し、一般性を保つために解も係数も無限少数となる次の2次方程式を数値解法で解く場合を考える。a=1 としても一般性は失われない。
______(1.3)
2根 α, β から各係数を十分正確に計算し、6桁目を4捨5入して有効桁5桁に丸めると、
___________(1.4)
この2次方程式の係数は有効桁5桁の精度であるが、定数項には2根が有効桁5桁で含まれているのに対し、x の係数には根 α が含まれないこととなる。従来、このように2根の大きさが著しく異なるときは根の公式では小根は正しく求まらないと言われている。しかし、この係数数値化の情報落ちは根の精度を悪化させることはない。従来の解決法は、大きい根を根の公式で求め、定数項が2根の積として両根を有効桁5桁で含んでいるから、これを大きい根で割ることにより以下のように正しく求める。
. .
小根の計算で根の公式をそのまゝ単精度で計算すると x1=0 となるが、根の公式は2次方程式の x の項の係数を用いていて、この係数が小根を含んでいないからである。判別式は定数項 c を含んでいるが、D=b2−4ac の計算で 4ac が b2 に対し 10−5 の大きさであるため情報落ちする結果、根の公式の b とDの 平方根との減算に(1.2)の関係が生じ、情報落ちした 4ac を回復できないからである。1.2節に述べたように、係数末尾に0を5桁補い2倍長精度で計算すれば情報落ちが起こらず、この問題は解決する。
. .
(1.4)の係数の末尾に0を5桁補った係数の末尾5桁の下に記した数値は、(1.3)の係数を 10 桁で表した係数の末尾5桁である。計算値の末尾数桁の下に記した数値は正しい 10 桁の係数で計算した値の末尾数値である。上位5桁以外は全く一致していないし、誤差論からも単精度係数を2倍長で計算することは意味がないと従来言われる。しかし、それは間違いである。この計算は末尾5桁が0である 10 桁の係数を持つ2次方程式の根の計算であり、各計算の末尾5桁は誤差ではなく正しい値である。従来、単精度計算はこの正しい末尾5桁を誤差として丸めてしまう、即ち、末尾5桁に誤差を加えてしまうから小根 x1 が正しく求まらないのである。大根の方は、末尾5桁を丸める誤差を加えても、根の上位5桁は変わらないが、加えた誤差が上位5桁に影響しないほど小さいからである。 . .
単精度計算で小根が x1=0 となるのは計算の途中結果を全て単精度に丸める計算の仕方が悪いのであり、(1.4)は(1.3)を 10−5 の精度で数値化近似しているということができる。しかるに、途中計算を単精度に丸めることにより判別式の平方根の計算で 4ac が無視されたことに相当する計算結果になるのは c が無視されたことと同じであり、方程式を(1.5)に変えたことになる。この2次方程式の根は(1.4)を単精度計算した根と同じである。4ac の一部が情報落ちするときはそれに相当する c の末尾桁が失われた方程式に変えられたのと同じである。即ち、途中計算を単精度に丸めることは、この場合、方程式の数値化の精度を悪化させたことになるのである。
___________(1.5). .
単精度データの計算を2倍長精度で計算することに対し、誤差を含んだ下5桁を正確に計算しても無意味であるという現在の常識的な考え方は正しい場合もあるが、前記のように正しくない場合もある。正しくない場合にもその常識を強行すれば1.2 節で述べたような別の解決策を探す必要がある。計算の手間も多倍長精度の計算より少ないそのような方法があればよいが、数式計算が困難であるから数値計算が必要なのであるから一般的にはその保証はない。実際に、連立1次方程式の消去法あるいは掃出し法におけるピボット選択のように、特定の条件を満足する場合にしか成立しない誤った解決策が常識として一般的に使用されている例もある。 . .
連立1次方程式、(1.6)の係数を単精度5桁で近似すると(1.7)となる。
___________(1.6)
___________(1.7). .
絶対値最大の(1)の x の係数をピボットにすると、
(1)へ代入して、
図1. 1 | 真の解は、x=1.772920195……×10−3,y=1.153677512…… であるから、y は有効桁5桁で求まるが、x は3桁目に誤差が入る。この場合は、絶対値最小の(2)の y の係数をピボットに選べば x=1.7727×10−3,y=1.1537 となり両者共に有効桁5桁で求まる。次に小さい(2)の x の係数をピボットに選んでも x=1.7728×10−3 となり有効桁5桁の解を得るが(1)の y の係数を選ぶと x=1.7723×10−3 となり末尾桁の精度が落ちる。即ち、この場合は、絶対値最大の係数をピボットに選ぶことは最悪の結果となり、いわゆるピボット選択の常識は成立しない。但し、(1)及び(2)の左辺をそれぞれの右辺で割れば絶対値最大の係数は(2)の x の係数となるのでピボット選択は成立する。しかし、この操作は消去法あるいは掃出法の逆操作であり二度手間となる。 . .
ピボット選択が必要なのは解の一方が極端に小さい場合であり、そのとき図1.1 の様に一方の直線が大きい方の解の座標軸と極端な鋭角を成すときこのような問題が生ずる。2元の場合には(2)式を 100 倍した表記を用いればその x の係数が絶対値最大となるので解決するが、多元の場合にはこの様な解がいくつも有り得るので消去の過程で上記(1)と(2)の関係が生ずるのを避けることはできない。 . .
連立方程式の解法としては(3)の計算で求めた y を(1)ではなく(2)へ代入してもよいのであり、その場合は下記のように有効桁5桁の x を得る。
しかし、計算機による消去法あるいは掃出し法では(2)の x の項は消去されているのでピボット側の(1)に代入しなければならず、(4)の計算で大きな桁落ちを生ずるので x は精度が悪くなる。この桁落ちによる精度の悪化は(3)の計算において5桁に丸めたことによる情報落ちに原因があり、(4)の計算の桁落ちで(1.2)の関係が生ずるからである。(1)及び(2)を一般的にa1x+b1y=c1,a2x+b2y=c2,k=a2/a1=−8.6490×10−1 と記述すると、
______(1.8)
(2)の y の計算で分母分子に情報落ちが生ずるが、有効桁は5桁あるので y は有効桁5桁である。しかし、(4)の x の計算を記号で表した(1.8)の最初の等号の右辺の減算で3桁の桁落ちを生ずるため y の丸め誤差が3桁桁上がりし、x の精度が悪化する。これは(1.8)の最右辺のD=−5.5720×10−3 と c1 の和を単精度に丸めることによるDの情報落ちを回復できないことと同じである。従って、この場合も係数末尾に零を5桁付加した 10 桁の係数の方程式として、2倍長精度で計算すれば有効桁5桁の解を得ることができる。
従って、(1.7)は(1.6)を 10−5 の精度で数値化近似しているということができる。しかるに、単精度に丸める計算では (1.8)のDが情報落ちし、b1 と c1 は略同じ大きさであるから b2 とc2 の末尾桁が情報落ちすることと等価であり、b2 と c2 の有効桁を短くしたことになる。即ち、問題の数値化近似の精度を悪化させてしまうのである。これも多倍長精度計算を用いて有効桁以下の部分を正確に計算することは無意味であるという考えの正しくない例である。 . .
2直線が各座標軸と十分な角度を持ち解が各座標軸から十分離れていればこの様な問題は生じないが、両直線が鋭角に交わるときは別の問題が生ずる。
_____(1.10)
(1)へ代入し、
. .
真の解は、x=2.107348979……×102,y=−2.098696598……×102 であるから x も y も有効桁2桁しかない。(1.10)の各係数は殆ど同じであるから、ピボットを何れに選んでも結果は同じである。これらの解を(1)及び(2)の左辺に代入すれば2.7300 と3.1500 となり右辺との一致は有効桁3桁しかない。このような解となる原因は y の計算では分母が3桁桁落ちすることにあり、x の計算では分子の第1項が y を代入した第2項の 10−2 以下のため y の誤差の範囲に入ってしまうからである。y の計算の分母の桁落ちはそれ以前に情報落ちがないので改善する方法はなく、従って、これより良い精度の解を得ることはできない。 . .
(1.10)の各係数の末尾に零を5桁付けて2倍長精度で計算すると、
となり、やはり有効桁は2桁しかない。しかし、この解は(1.10)へ代入し2倍長精度で計算すれば有効桁5桁で(1.10)を満足するから(1.10)の正しい解である。この解の6桁目以降を丸めて単精度にすると(1.10)を有効桁3桁でしか満足しなくなる。単精度計算で求めた解と比べれば5桁目が1又は2異なるだけであることから明らかなように、(1.10)を有効桁5桁で満足するためには6桁目以降が必要である。即ち、単精度係数の方程式の解が単精度に収まるとは限らないのである。簡単な2次方程式 x2=4 の解である 4 の平方根は 2 であるが、2 の平方根は 1.4142…… であり1桁では表せないことからも明白である。これも係数精度が単精度であるからといって途中計算を単精度に丸める計算の仕方が正しくない例であり、この場合は2倍長精度の計算を用いる以外に正しい解を求める方法はない。 . .
この(1.10)の正しい解が(1.9)の真の解と有効桁2桁でしか一致しないということは方程式自体の数値化近似の精度が 10−2 でしかないということであり、この誤差は問題自身の数値化の誤差で、解の計算途中に生ずる計算誤差ではない。この2直線は各 x, y切片がほゞ1で交点はその 200 倍も遠方という極めて鋭角な交叉をしていて、(1.10)の各係数の末尾桁が1 異なるだけの僅かな切片または勾配の誤差で交点は大きく変わるから係数を5桁で近似した(1.10)では交点を有効桁5桁で求めることは不可能なのである。従って、係数を有効桁5桁で近似しても方程式が 10−5 の精度で近似出来たとは限らないのである。著者はこれを問題の数値化近似の精度と呼び、それが 10−2 であるという。 . .
2次方程式では近接2実根または虚数部の小さい虚根を持つとき、即ち、その左辺の2次方程式の頂点が x 軸に極めて近いとき、2実根か等根かあるいは虚根であるのかの判定が困難となり、正しく判定できる場合も根の精度は悪化することはよく知られている。判別式に桁落ちが生じ(1.2)に相当する情報落ちがないので桁落ちを補う手段 がないからである。 . .
虚根 π±je×10−3 を2根とする2次方程式(1.11)を単精度5桁で近似すると(1.12)となるが、π2=9.869604…… であるから定数項が e2×10−6 を含んでいないし、x の係数も e×10−3 を含んでいないので真の解を求めることはできない。係数を有効桁5桁で近似したのでは問題の数値化近似の精度が悪すぎて(1.13)の近似式と区別ができないのであるが、更に、(1.12)から(1.13)の重根 πを求めることもできず、下記の計算に示すように2実根となる。
この2根の和は 6.2832、積は 9.8694 であり、(1.12)を有効桁5桁で満足するからその正しい解である。しかし、(1.11)の解ではなく、その実部としても有効桁3桁であり、(1.13)の解としても有効桁3桁しかない。係数末尾に零を5桁付けて2倍長精度で計算しても以下に示すように解の精度は有効桁3桁で殆ど改善されない。
. .
この2根の和と積は(1.12)の係数末尾に零を5桁付けた 10 桁の係数と 10 桁一致するからその正しい解である。しかし、単精度計算の解とも(1.11)の真の解の実部とも有効桁3桁でしか一致しない。(1.11)の係数を有効桁 10 桁で近似すると、下記に示すように、虚根 α±jβ の実部は有効桁 10 桁で求まるが虚部は有効桁5桁でしかない。この原因は判別式の計算で6桁の桁落ちがあることである。平方根の計算で上部6桁の0は3桁になるが桁落ちの桁数は減少しないから有効桁は4桁である。その次の桁には誤差が入っているが、2で割る演算により誤差が半分になり、その桁の真値との差が2程度になるので有効桁は5桁といってもよい。
. .
(1.13)の係数を有効桁 10 桁で近似すると、下記に示すように判別式は負になるが、10 桁の桁落ちがあるので判別式の有効桁は零である。このような時は判別式の値は零とすれば有効桁 10 桁の解を得ることができる。
. .
(1.13)の単精度計算の判別式の値は4桁の桁落ちがあり、残った1桁の値が1であるから次の桁にあった誤差の桁上がりとも考えられるので、判別式を零にすれば有効桁5 桁の正しい解が得られる。その下に示した係数末尾に零を5桁付けて2倍長精度で計算した判別式の値が5桁桁落ちしているのがその考えの正しいことを示している。この誤差だけの判別式の値を零にしないと、平方根の計算でゾンビのように復活して解の上位3桁目に誤差を与えるのである。しかし、この残った1桁の値が3や4であったなら、これを零にするのは適当ではない。そして、その値が持つ誤差は解の上位に誤差を与えることになる。 . .
この誤差は計算の誤差ではなくて問題自身の数値化近似の際に設定されていた誤差である。このことは(1.12)の左辺の関数値を計算した表1.1 を見れば明白である。途中結果を全て5桁に丸める計算では頂点の近傍はでたらめであるが、丸め誤差の入る桁を 10 桁目にするため係数末尾に零を5桁補って 10 桁計算した場合は上に求めた2根で x 軸と交叉し、x=π のあたりに頂点がある様子がわかる。しかし、関数値は真値である(1.13)の左辺の値とは著しく異なっている。微分値は多少精度がよいが関数値の精度が悪いのでNewton-Raphson 法でも真の根を求めることはできない。
表 1.1_____y=x2−6.2832x+9.8696 と dy/dx |
x | 5桁計算 | 10 桁計算 | 真___値 | . | dy/dx | 真___値 |
3.1100 3.1200 3.1300 3.1350 3.1400 3.1450 3.1500 3.1600 3.1700 |
0.0007 0.0000 0.0005 −0.0002 0.0002 −0.0004 0.0001 0.0002 0.0006 |
0.000948 0.000416 0.000084 −0.000007 −0.000048 −0.000039 0.000012 0.000288 0.000756 |
0.000998095 0.000466242 0.000134389 0.000043463 0.000002536 0.000011610 0.000070683 0.000338830 0.000806977 | |
−0.0632 −0.0432 −0.0232 −0.0132 −0.0032 +0.0068 +0.0168 +0.0368 +0.0568 |
−0.063185307 −0.043185307 −0.023185307 −0.013185307 −0.003185307 +0.006814692 +0.016814692 +0.036814692 +0.056814692 | . .
係数精度を決めたとき関数の全ての特性値の精度は決定されるが、それぞれの精度は係数精度に達するとは限らないし、定義域全体に渡って同じ精度で近似できるとも限らない。従って、如何に正確な計算法を用いても、そのとき設定されている精度以上の特性値を得ることはできないのであり、その誤差は数値計算の誤差ではなくて問題自身の誤差である。普通に桁落ち誤差と呼ばれるものには2種類あり、情報落ちの後に桁落ちがあり(1.2)の関係が生ずる場合は途中計算を単精度に丸める計算の仕方に起因する計算誤差であるが、以前に情報落ちがなく、その後桁落ちを補う数値の加減算のない場合は問題の数値化の際に設定された誤差で計算誤差ではない。前者は数式計算が可能な簡単な問題では単精度計算のまゝ改善する方法もあるが、後者は問題の数値化に際して無限桁で表わされる係数を有限桁で打ち切ったことに起因するもので問題の設定法を変えない限り改善できない。無限級数和で表わされる関数を有限項で近似したときの誤差を打ち切り誤差と呼び計算誤差に含めているが、打ち切った高次項を補うか、もっと精度の良い近似法を用いない限り、如何に計算を正確にしてもこの誤差を解消することは不可能であるのと同様である。即ち、後者の桁落ち誤差は問題の数値化の際の打ち切り誤差が伝播したのではなくて、予め設定された精度の限界に突き当たったのである。 . .
この様な桁落ちは x 軸の近傍における関数値の計算の際に生じ、微係数が零に近いとき著しく、表1.1 に示すように2次関数では頂点が x 軸の近傍にあるとき頂点の近傍の関数値や微係数は普通の方法では正確に求めることができないし、関数が x 軸に漸近するときも同様である。これは数値微積分や微分方程式の数値解に著しい誤差を生じ、微分方程式(1.1)の数値解の計算で、Runge K. 法における著しい誤差や Milne の解法に生ずる不安定現象と呼ばれる現象の大きな原因となる。 . .
問題の数値化の精度が正しい解を得るために十分な精度であっても、数値計算が正しい解を得るためには(1.2)の関係は等号である、即ち、(A+B)−A=Bが成立しなければならない。そのためには、データは単精度でも計算は情報落ちを起こさないために必要な桁数の多倍長計算でなければならない。単精度データを2倍長計算するのは誤差論的に意味がないという誤った計算論と、初期の計算機のメモリやレジスタにおける制限から単精度データは単精度計算で十分という考えが常識的となっている。それが上記に述べたような計算誤差や微分方程式の解の暴走原因となっている。これはディジタル計算機を用いた自動制御機器は暴走する危険性を持つことを意味する。しかし、必要なだけの多倍長計算も実用上は難しく、計算桁数の制限はやむを得ない。このとき有効桁を失ったデータを生かしておく従来の計算法に大きな問題がある。データは数値とその有効桁数を常に対にして四則演算し、有効桁数が零になったときは数値も零にクリアしなければならない。固定小数点演算のときは自動的にこれが行われていた。アナログ計算機やアナログ自動制御機器も増幅素子の閾値によりそれより小さな信号は増幅できないことで自動的にこれが行われていた。今の浮動小数点演算は、浮動小数点数は幾らでも小さい数値を扱えるから閾値がなく正確な計算が出来るという間違った議論に基づいている。それが可能であるためには丸めの起きない桁数の計算が出来なければならない。
目 次 へ
|