本ページは作成途中です.

連立一次方程式の解法

科学技術計算において,連立一次方程式はとても重要です. といっても,解きたい問題があって,そのラストピース的な感じで連立一次方程式を解かないといけないことがほとんどです.

みなさん,中学1年生で連立一次方程式を学習して以降(もっといえば小学校でつるかめ算を学習して以降)幾度となく連立一次方程式の解を計算してきたと思います. 大学一年生の線形代数でも,(連立一次方程式を行列を使って表現したときに係数行列が正則な場合に限定しても)掃き出し法や逆行列を右辺ベクトルにかける方法を学習したと思います.

この講義ですべてを説明することは(時間の都合上)できませんが,

ことは,現代科学の 常識 として覚えてほしいと思います.

連立一次方程式の数値解法の分類

連立一次方程式の解法のうち,有限回の演算で真の解に到達するような数値解法のことを総称として 直接法 といいます. おそらく,みなさんがこれまで学習してきたほぼ全ての解法は直接法といえます. 実際,Julia言語では A\b とすれば連立一次方程式を計算してくれますが,その中では直接法が使われています. しかし,\( n\) 元の連立一次方程式の場合,\(n^3\) に比例する計算コストがかかり,\(n\) がものすごく大きい場合,3乗に比例するコストというのは許容できないことが多くなってきます(もちろん,どのような連立一次方程式をどのような計算機でどのくらいの時間で計算したいかによって,どこまで許容できるかは変わってきます).

一方で,ベクトル列を生成していき,厳密解に近づけていく解法がたくさん知られており,そのような解法を総称として 反復法 といいます. 反復法はさらに,定常反復法CG法系統の解法 に大別されるのですが,この講義では定常反復法について説明しようと思います. なお,CG法というのは,共役勾配法(the conjugate gradient method)のことで,20世紀のトップ10アルゴリズムでもある非常に有名な解法です(ただし,万能ではありません).

とりあえず,A\b を試してみましょう

例題として \begin{equation} \begin{bmatrix} 1 & 2 \cr 2 & 1 \end{bmatrix} \mathbf{x} = \begin{bmatrix} 1 \cr 3 \end{bmatrix} \end{equation} を解くことを考えてみましょう. 形式的に \begin{equation} A = \begin{bmatrix} 1 & 2 \cr 2 & 1 \end{bmatrix}, \quad \mathbf{b}= \begin{bmatrix} 1 \cr 3 \end{bmatrix} \end{equation} と書くことにすると,連立一次方程式の解は \begin{equation} \mathbf{x}=A^{-1} \mathbf{b} = \begin{bmatrix} 5/3 \cr -1/3 \end{bmatrix} \end{equation} です.

この計算はJuliaでは次のように実現可能です:

julia> A = [1 2; 2 1]
2×2 Matrix{Int64}:
 1  2
 2  1

julia> b = [1, 3]
2-element Vector{Int64}:
 1
 3

julia> A\b
2-element Vector{Float64}:
  1.6666666666666667
 -0.3333333333333333

たしかに,丸め誤差を除いて正しく計算できています.

Jacobi法

SOR法