Juliaで線型方程式の解の精度保証付き数値計算

$A\in \mathbb{K}^{n\times n}$ を $n$ 次行列、$b\in\mathbb{K}^n$ を $n$ 次元ベクトルとする。ただし $\mathbb{K}=\mathbb{C}$ or $\mathbb{R}$ とする。このとき、線型方程式

$$ Ax=b $$

の解 $\tilde{x}\in\mathbb{K}$ の精度保証付き数値計算法を紹介する。 行列 $A$ が正則($\det(A)\neq 0$)ならば、逆行列 $A^{-1}$ が存在し、線型方程式は厳密解がただ一つ存在する。したがって、精度保証付き数値計算で必要なことは、

の2つ。

注意 数値計算で利用する数値の精度を多数桁に拡張すれば、より高精度な精度保証付き数値計算が可能になるが、今回は倍精度浮動小数点数(Float64)のみを使った精度保証付き数値計算を紹介する。多倍長数値を使った区間演算等は別の機会に。

区間ガウスの消去法

区間ガウスの消去法(IG)はいわゆるガウスの消去法を全て区間演算に置き換えた方法であり、"理論上は"解の厳密な包含が得られることになる。しかし、区間ガウスの消去法は、係数行列 $A$ の 次数 $n$ がある程度以上の大きくなると、解の誤差半径が爆発的に大きくなってしまい、適用不可能になるという致命的な欠点がある。これは区間演算による区間幅の増大が原因で、丸め誤差の過大評価によって計算結果が物凄く粗い評価となってしまう。例えば、IntervalArithmetic.jlは、区間ガウスの消去法に基づいて線型方程式の求解ができる。

解の包含の区間幅は約 $10^{-14}$ と十分小さな区間になっていると思われるが、行列のサイズ $n$ が大きくなるにつれて、区間幅が増大し、この方法は破綻する。

ちなみに区間ガウスの消去法(IG)の名誉挽回のために、もしも $R\approx A^{-1}$ なる前処理行列を方程式の右から区間行列積でかけた方程式

$$ RAx = Rb $$

にIGを行うと、上のような区間幅の増大は起こらない(文献1参照)。しかし、IGの計算コストに加えて、$R$ を計算するコストが必要で計算時間がかかる。

BLAS/LAPACKを使う高速精度保証付き数値計算法

行列 $A$ が密行列の場合の精度保証方法を紹介する。この方法の特長は行列計算単位で区間演算を実行することができる。つまり BLAS や LAPACK などの高速で信頼性の高い数値計算ライブラリを利用することができる。そして、区間ガウスの消去法とは違って、次数 $n$ が数千以上のような比較的大規模な行列も計算が成功する。

ノルム評価

次の定理を使用する。

定理 1 行列 $A\in\mathbb{R}^{n\times n}$, $b\in\mathbb{R}^{n}$ に対して、線型方程式 $Ax=b$ の近似解を $\bar{x}$ とする。いま行列 $R\in\mathbb{R}^{n\times n}\approx A^{-1}$が、

$$ \|I-RA\|<1 $$

をみたすとき、

$$ \left\|A^{-1}b-\bar{x}\right\|\le\frac{\|R(b-A \bar{x})\|}{1-\|I-R A\|} $$

が成り立つ。ただし、$I$ は $n$ 次単位行列とする。

証明 $$ \|A^{-1}b - \bar{x}\|=\|(I-(I-RA))^{-1}R(b-A\bar{x})\|\le \frac{\|R(b-A\bar{x})\|}{1-\|I-RA\|}. $$

ここで、最後の不等式は $\|T\|<1$ となる行列 $T$ に対して、$\|(I-T)^{-1}\|\le 1/(1-\|T\|)$ となる事実(ノイマン級数の上からの評価、$T:=I-RA$)を使っている。

$\Box$

この定理の十分条件は次の命題から行列 $A$ の正則性を保証している。

命題 $\rho(I-RA)\le \|I-RA\|<1$ とする。このとき行列 $R$ と $A$ は正則となる。

証明 もしも正則でないとすると、$0\neq x\in\mathrm{Ker}(A)$ に対して、$(I-RA)x=x$ となる。すなわち行列 $I-RA$ は少なくとも一つ固有値 $1$ を持つ。しかしこれは $\rho(I-RA)<1$ に矛盾する。

$\Box$

丸めの向きを変更しない精度保証方法

これをもう少し速くしたい。丸めの向きを変更しない次のような評価式を使う。

連立一次方程 $Ax=b$, $A\in\mathbb{F}^{n\times n}$, $b\in\mathbb{F}^{n}$ において、$R\approx A^{-1}$ として、上の定理における $\|I-RA\|_{\infty}$ の上からの評価は最近点丸めのみを用いて、次のように計算できる。

$$ a_1:=\mathrm{muls}(|A|),\quad a_2:=\mathrm{muld}(|R|, a_1), $$$$ \alpha_1:=\mathrm{muls}(\mathrm{fl}(I-RA)),\quad \alpha_2:=\mathrm{succ}(\mathrm{fl}((n\mathbf{u})\cdot a_2)),\quad \alpha_3:=\mathrm{fl}(n\,\mathbf{S}_{\min}\cdot e_{n}). $$

ただし、$\mathbf{u}:=2^{-53}$, $\mathbf{S}_{\min}:=2^{-1074}$, $\mathbf{F}_{\min}:=2^{-1022}$, $e_n:=(1,1,\dots,1)\in\mathbb{F}^n$。そして $r\in\mathbb{F}$ に対して、$\mathrm{succ}(r):=\min\{f\in \mathbb{F}:r<f\}$, $\mathrm{ufp}(r):=2^{\lfloor\log_2|r|\rfloor}$として

$$ \operatorname{muls}(A):=\operatorname{succ}(\mathrm{fl}(|A| e_n+(n-1) \mathbf{u} \cdot \operatorname{ufp}(|A| e_n)))\ (\geq|A| e_n) $$$$ \operatorname{muld}(A, x):=\operatorname{succ}(\mathrm{fl}(|A x|+(n+2) \mathbf{u} \cdot \operatorname{ufp}(|A \| x|)+\mathbf{F}_{\min} \cdot e))\ (\geq|A x|). $$

このとき、$\max(\alpha_1)<1$ であれば、

$$ \|I-RA\|_{\infty}\le \left\|\mathrm{fl}\left(\operatorname{succ}\left(\alpha_{1}+\alpha_{2}+\alpha_{3}+\mathbf{u} e_n\right)+3 \mathbf{u} \cdot \operatorname{ufp}\left(\alpha_{1}+\alpha_{2}+\alpha_{3}+\mathbf{u} e_n\right)\right)\right\|_{\infty}=:\alpha $$

と評価できる。さらに、$\|R(A\bar{x}-b)\|_{\infty}$の上からの評価は次のように得られる。$r:=A\bar{x}-b$として、

$$ r_{\mathrm{mid}}=\mathrm{fl}(r),\quad r_{\mathrm{rad}}=\mathrm{fl}((n+3) \mathbf{u} \cdot \operatorname{ufp}(|A \| \bar{x}|+|b|)+\mathbf{F}_{\min} \cdot e_n) $$

で残差 $r$ の包含が $\mathbf{r}:=\langle r_{\mathrm{mid}}, r_{\mathrm{rad}}\rangle$と得られ、

$$ |Rr|\le (|Rr_{\mathrm{mid}}| + |R|r_{\mathrm{rad}}) $$

より、

$$ b_1:=\operatorname{muld}(R, r_{\mathrm{mid}}),\quad b_{2}:=\operatorname{muld}(|R|, r_{\mathrm{rad}}) $$

最終的に、

$$ \|R(A\bar{x}-b)\|_{\infty}\le \max(\mathrm{succ}(b_1+b_2)). $$

計算時間は早くなった。しかし、誤差評価が約100倍大きくなるため、少し悔しい。

成分毎評価

定理 2(山本の定理) $A$, $R\in\mathbb{R}^{n\times n}$, $b$, $\bar{x}\in\mathbb{R}^n$, $G:=I-RA$ とする。このとき、$\|G\|_{\infty}<1$ ならば、行列 $A$ は正則であり、次の評価が成り立つ。

$$ |A^{-1}b-\bar{x}|\le |R(b-A\bar{x})| + \frac{\|R(b-A\bar{x})\|_{\infty}}{1-\|G\|_{\infty}}|G|e_n, $$

ここで、$e_n = (1,1,\dots,1)\in\mathbb{R}^n$で、行列・ベクトルの絶対値は成分毎に絶対値を取るものとし、不等式は成分毎に不等式が成立しているものとする。

証明 $A^{-1}=(RA)^{-1}R$ ($R$ は正則行列)であり、$\|G\|_{\infty}<1$ より、

$$ (RA)^{-1}=(I-G)^{-1} = I + G + G^2 + \dots = I + G(I-G)^{-1} $$

となる。任意の $v\in\mathbb{R}^n$ に対して、$|v|\le\|v\|_{\infty} e_n$ であることに注意すると、

\begin{align*} |A^{-1}b-\bar{x}| &= |(RA)^{-1}R(b-A\bar{x})|\\ &= |(I+G(I-G)^{-1})R(b-A\bar{x})|\\ &\le |R(b-A\bar{x})|+|G||(I-G)^{-1}R(b-A\bar{x})|\\ &\le |R(b-A\bar{x})|+\|(I-G)^{-1}\|_{\infty}\|R(b-A\bar{x})\|_{\infty}|G|e_n \end{align*}

となり、$\|(I-G)^{-1}\|_{\infty}\le 1/(1-\|G\|_{\infty})$ を用いると上記の評価式を得る。

$\Box$

成分毎評価は細かな評価ができる一方で、計算時間がかかってしまう。そこで、上で実装したverifylss関数のように、丸めの向きを変更しない実装をしてみる。

まず $\|G\|_{\infty}<1$ の検証部分は以前と同様、違うのは

$$ |G|e_n \le \mathrm{fl}\left(\operatorname{succ}\left(\alpha_{1}+\alpha_{2}+\alpha_{3}+\mathbf{u} e_n\right)+3 \mathbf{u} \cdot \operatorname{ufp}\left(\alpha_{1}+\alpha_{2}+\alpha_{3}+\mathbf{u} e_n\right)\right) $$

で計算して、$\|R(A\bar{x}-b)\|_{\infty}$ の上からの評価部分の最大値ノルムを計算しない

$$ |R(A\bar{x}-b)|\le \mathrm{succ}(b_1+b_2) $$

とコードを書き換えてあげると、丸め向きを変更しない事前誤差評価と山本の定理を組み合わせた関数verifylss_ewが実装できる。

計算時間がかかる事を許容すれば、一番精度が良いのはverifylss_yamamotoであるが、計算時間が気になる場合は、約10倍ほど過大評価になるけれども、丸めの向きを使用しないverifylss_ewが実行速度は速く計算できる。

まとめると

定理 1 定理 2(山本の定理)
区間演算だけ使用 verifylss_naive verifylss_yamamoto
丸め向きの変更なし verifylss verifylss_ew

という4つの線型方程式のBLAS/LAPACKを使う精度保証付き数値計算方法が実装できた。

謝辞

Juliaのnorm関数の実装に関して、黒木玄さんから有益な助言をいただきました。ありがとうございます。また、丸め方向を変更しないBLAS/LAPACKを線型方程式の精度保証付き解法verifylssや区間ガウスの消去法の前処理について、森倉悠介先生や南畑淳史先生から助言をいただきました。ここに感謝申し上げます。 さらに、以下のような文献・Web ページ等を参考にこの文章は書いています。

参考文献

  1. E. R. Hansen, R. R. Smith: "Interval arithmetic in matrix computations", Part 2, SIAM J. Numerical Analysis Vol.4, pp. 1-9, 1967. (https://doi.org/10.1137/0704001) (区間ガウスの消去法は前処理して解くべきと書いてある論文)
  2. 森倉悠介, 事前誤差評価を用いた線形計算の精度保証 –誤差解析から大規模計算まで–, http://www.sr3.t.u-tokyo.ac.jp/jsiam/slides/2015/morikura_20151224_yokou_ver1.3.pdf (丸め方向を変更しない数値線形代数の区間演算について端的にまとまっている)
  3. 大石進一編著, 精度保証付き数値計算の基礎, コロナ社, 2018.
    (精度保証付き数値計算の教科書。3.3章に連立1次方程式の各種事後誤差評価が載っている。高精度と計算速度は一般的に両立しないため、「より高精度」で「より高速」なアルゴリズムの考案は研究対象になる)
  4. 黒木玄, norm(interval, Inf),https://gist.github.com/genkuroki/b3346321f8b0603e7a1fd23f3864f06f. (区間ベクトルのノルム評価がうまく動かない点について、解説をいただいた。区間に対する大小比較が想定した挙動をしないことが原因。その一時的な解決方法も提示いただいた)
高安亮紀,2020年10月29日,2021年2月1日(最終更新)