浮動小数誤差解析
浮動小数誤差解析(floating
point error
analysis)とは浮動小数演算機構を前提にした誤差解析のことを言う。それは個々の基本演算の結果として生じる相対誤差をベースにしている。ここではその考え方を紹介する意味で、浮動小数誤差解析に関する簡単な説明を行う。
を実数とするとき、の浮動小数値を表す記号としてを用いることにする。基本的な仮定としては次がある。
(16) |
ここには(1)に示される相対精度(unit roundoff)を意味する。もちろん
(17) |
Example 5.1
(浮動小数)
ここでは10進4桁の演算を考える。このとき である。今、とするとであり となる。とするとであり となる。とするとであり、このときも となる。
今、を浮動小数とすると、Wilkinson [1960] によって紹介された浮動小数演算の標準モデルは(16)に基づき
(18) |
一連の浮動小数演算について考えるとき、誤差項の積としてしばしば次の形のものが得られる。
それ故、
今、2次の項を無視することにすれば
(19) |
次に3つの例を示す。いずれにおいてもは浮動小数値とする。すなわちそれらはコンピュータ上で既に表現されている値とする。これは計算に際しての誤差を分析する上において自然な仮定である。
Example 5.2
(値の積)
とする。個の積を構成する必要があり、それぞれがを上限とする誤差を生むことになる。(18)から
(20) |
一方、(19)から
(21) |
Example 5.3
(値の和)
とする。 と書けることを考慮すると次が容易に導ける。
これより和は後向きには安定であるが、前向きには安定とは限らないことがわかる。Example 3.1は和が前向きに安定でないケースを示すものである。
がすべて同じ符合を持つ場合には
より
となるため、和は前向きに安定となる。
Example 5.4
(2平方の差)
次の計算について考える。
(22) |
もちろんは次のようにも表現できる。
(23) |
(22)をベースにの計算を行うと となるため、後向きには安定であるが、前向きには安定ではない。一方、(23) をベースにの計算を行った場合には となるため、後向きにも前向きにも安定となる。具体的に としたとき、有効桁数4桁での計算を行うと という結果が得られる。の場合には桁落ちが生じているが、の場合には問題なく計算が行えている。
今度は線形代数の問題に関するいくつかの結果を紹介する。ただし証明は抜きにし、結果の引用のみに留める。基本的に個の連立1次方程式
(24) |
(25) |
ここには置換行列、は単位下三角行列(unit
lower triangular
matrix)、は上三角行列(upper
triangular
matrix)である。解析を簡単化するために、慣行に従ってはのように既に並べ替え(permute)られているとする。この場合、(25)
は
のようになる。ただしとは
のような形を持つ。はを消去できるように選択されるため、
という関係にある。は
のように更新される。このとき
となる。
であるため
と表現される。このとき計算結果である因子は
を満たすことが示される。ただしに関する種々の上限があり得る。例えばまたはノルムに関して言えば
が成立する。ここでは成長因子(growth
factor)と呼ばれる。同様に(24)
の計算解が
を満たすことが示される。この場合の典型的な上限は
で与えられる。この不等式はが大きな値でない限り順当なものと言えるので、のサイズを抑えられるようにを選択することが大切である。これが本質的に
Wilkinson [1961], Wilkinson [1963, Section 25]
の結果である。ただしそこではノルムとpartial
pivotingが仮定されている。Higham
[2002, Theorem 9.5]
についても参照されたい。
次はpivotingの必要性を示す簡単な例である。
Example 5.5
(Pivotingの必要性)
行列を とし、有効桁数4桁の計算を行うものとする。は単なる行列のため、となる。算出された行列をと書くことにすれば、計算の結果は次のようになる。
これより 従って となる。はに比べると小さいながら、の大きな相対摂動(relative perturbation)に対応する。一方、の行を入れ替え、 とすると
これより 従って となる。今回の場合、は双方に比べて小さな値となっている。
今、とすると
であることを示すことができる。Partial
pivotingを使えば
とすることができる。しかし極めて特殊な場合にはこれに近づけることができない。Wilkinsonが示した例で言うと
であり、このとき
となる。このような特殊な例はあるものの、現実問題としてはpartial
pivotingは最も良く使用される手法である。しかし慎重なソフトウェアであれば少なくとも成長因子をモニタできるオプションを用意すべきである。
の成長を制御する上でpivotingを必要としない行列のクラスもある
[Higham, 2002, Table
9.1]。最も重要なのは対称正定値行列(symmetric
positive definite
matrices)のケースであり、その場合には成長が起り得ないことが最初から知られている。従って係数行列が対称正定値である連立1次方程式にガウス消去法を適用した場合には、計算は安定したものとなる 。(Note2)
Pivotsの選択はスケーリングと平衡化(equilibration)によって左右される。スケーリングの選択がまずいとpivotsの選択も望ましいものとはならない可能性がある。Pivoting戦略、平衡化、スケーリング、及びそれらに関する助言については
Higham [2002]
に記載されている。
直交変換(orthogonal transformations)を用いる手法に対しては誤差の上限として似たような結果を通常得ることができるが、直交変換はノルムとノルムを維持するために、その中には成長因子は含まれない。例えば最小2乗問題 の解法におけるに対し因子分解を行うためにHouseholder変換を用いるとする。ただしは行列で階数(rank)はとする [Golub, 1965]。このとき数値解は を満足する。ただしを小さな整定数とするとき、に対しては次の不等式が成り立つ [Lawson and Hanson, 1995, page 90]。
を行列としたとき、固有値問題の解法に際して、まずHouseholder変換を用いてを上(upper)Hessenberg形式に変換した後、アルゴリズムを用いてHessenberg形式を上三角Schur形式に変換するものとする。このときの数値解は
を満たす。ただしをの漸増関数としたとき
が成り立つ [Wilkinson, 1965; Anderson et al.,
1999]。
なお、これまで議論してきた上限はnormwise boundsと呼ばれるが、多くの場合においてこれらはcomponentwise boundsで置き換え得る。後者は個々の要素の絶対値に関する上限であり、より都合の良いものである。例えばが疎行列である場合、我々は構造的にである要素に対して摂動を加えることは好まないであろう。簡単な例として方程式 について考える。ただしはの三角行列とする。今、を前進代入(forward substitution)、あるいは後退代入(backward substitution)によって得られた数値解とするとき(前進/後退のいずれを用いるかはが下三角か上三角かによる)、は次の条件を満たす。
これは後向きの安定性を示す強力なcomponentwiseの結果である
[Higham, 2002, Theorem 8.5]。
Componentwiseの誤差上限値に付随してcomponentwiseの条件数(condition numbers)がある。詳細については Higham [2002] を参照されたい。