2022年度プログラミング演習A・B

第10回レポート課題の解説

演習1

SOR法のアルゴリズムを実現するコードを書き、

$$ A= \begin{pmatrix} 2 & -1 & 0 & 0\\ -1 & 2 & -1 & 0\\ 0 & -1 & 2 & -1\\ 0 & 0 & -1 & 2 \end{pmatrix} ,\quad b= \begin{pmatrix} 1\\ 1\\ 1\\ 1 \end{pmatrix} $$

に対して $Ax=b$ の近似解を求めてください。ただし、

$$ x^{(0)}= \begin{pmatrix} 0\\ 0\\ 0\\ 0 \end{pmatrix} ,\quad EPS=10^{-5},\quad K=100,\quad w=1.5 $$

とします。

演習2

演習1と同様に

$$ A= \begin{pmatrix} 2 & -1 & 0 & 0\\ -1 & 2 & -1 & 0\\ 0 & -1 & 2 & -1\\ 0 & 0 & -1 & 2 \end{pmatrix} ,\quad b= \begin{pmatrix} 1\\ 1\\ 1\\ 1 \end{pmatrix}, $$$$ x^{(0)}= \begin{pmatrix} 0\\ 0\\ 0\\ 0 \end{pmatrix} ,\quad EPS=10^{-5},\quad K=100 $$

に対してSOR法を適用する際に、

$$ w=1,1.1,1.2,\ldots,1.8,1.9 $$

の中から最も収束の速い(反復回数の少ない)ものを求め、その $w$ の値と反復回数を表示してください。ただし、最適値の判定はプログラムの中で行うようにすること。

演習3(オプション)

SOR法による収束の様子を可視化して確認します。

$$ A= \begin{pmatrix} 2 & -1\\ 1 & 2 \end{pmatrix} ,\quad b= \begin{pmatrix} 1\\ 3 \end{pmatrix}, $$$$ x^{(0)}= \begin{pmatrix} 0\\ 0 \end{pmatrix} ,\quad EPS=10^{-2},\quad K=100 $$

に対してSOR法を適用する際のパラメータ $w$ の最適値(なるべく良い値)を求めた上で、連立一次方程式

$$ \left\{ \begin{matrix} 2x_1-x_2 = 1\\ x_1+2x_2 = 3 \end{matrix} \right. $$

における各方程式が表す直線のグラフ(ただし、範囲は $0\leq x_1\leq 1.4$)と、求めた $w$ に対するSOR法により得られるベクトル列 $\left\{x^{(k)}\right\}$ の各項が表す点を、一つの図に描画してください。

さらに、求めた $w$ の最適値および描画した図について自由に考察してください。

(考察)

SOR法では多くの問題に対して $1<w<2$ のときに収束が速くなると言われているが、ここで考えている問題はそれには当てはまらず、$w$ の最適値が $0<w<1$ の範囲に存在するという結果になった。

SOR法とガウス・ザイデル法によって生成されるベクトルをそれぞれ $x^{(k)}$、$\tilde{x}^{(k)}$ とした際の関係式

$$ x^{(k)}=x^{(k-1)}+w\left(\tilde{x}^{(k)}-x^{(k-1)}\right) $$

が表すように、「青い直線にぶつかるまで水平に移動した後に、さらにオレンジの直線にぶつかるまで鉛直に移動する」というガウス・ザイデル法と比較して、$w=0.91$ のSOR法では変化量のベクトルを少し縮めて点の移動が行われていることが、描画した図から分かる。

それによって、直線の交点に到達するまでの点の動きの無駄が非常に少なくなっている。