反復法は,未知数に適当な初期値を仮定し,必要な精度に到達するまで同じ手
順を繰り返して,解を求める方法である。
方程式の元数が非常に多く(数千元以上),係数行列がスパース行列(要素の大部分
が0の行列)の場合は,直接法(ガウスの消去法など)よりは,反復法が有利である。
しかし,反復法の公式の多くは,無条件に収束しない(反復回数の増加とともに近似
解が真の解から離れていく)から,適用に際しては収束条件に注意しなければならな
い。
まず,ヤコビ法の考え方を,次の例題によって,説明しよう。解こうと する連立1次方程式は次式とする。
4x+ y=8 @
x+2y=5.5
これを解くには次のようにする。まず,第1式をxについて解き,第2式をy について解くと,次のようになる。
x=2.0−0.25y A
y=2.75−0.5x
ここで,xとyに適当な値を仮定して,この2つの式の右辺に代入する。適当 な値は何でもよいが,例えば,x=y=0 として右辺に代入すると,次のように なる。
x=2.0-0.25・0=2.0 B
y=2.75-0.5・0=2.75
この値をまた,式Aの右辺に代入すると,次のようになる。
x=2.0-0.25×2.75=1.3125 C
y=2.75-0.5×2.0=1.75
このように,つぎつぎと代入を繰り返していくと,xとyは, 次のように,真 の解に近づいていく。
表4.1 ヤコビ法による連立1次方程式@の解を求める途中の過程|
|
|
|
この反復法がヤコビ法(Jacob)である。
以上の手順を,次のn元連立1次方程式の場合について一般化しよう。
|
a11x1+a12x2+
・・・・・+a1nxn=b1 a21x1+a22x2+ ・・・・・+a2nxn=b2 ・・・・・・・・・・・・・・・・・・・・・・ ai1x1+ai2x2+ ・・・・・+ainxn=bi ・・・・・・・・・・・・・・・・・・・・・・ an1x1+an2x2+ ・・・・・+annxn=bn |
(4.51) |
いま,対角要素a11,a22,・・・,ann は0でないとして,x1,x2,・・・,xn を求めると,次のようになる。
|
x1=(b1−a12x2−
a13x3・・・・・−a1nxn
)/a11 x2=(b2−a21x1− a23x3・・・・・−a2nxn )/a22 ・・・・・・・・・・・・・・・・・・・・・・・ xi=(bi−ai1x1・・・ −aii−1xi−1−ai+1x i+1・・・−ainxn)/aii ・・・・・・・・・・・・・・・・・・・・・・・ xn=(bn−an1x1− an2x2−・・・・・−ann−1x n−1)/ann |
(4.52) |
上式を用いて,まず,1番目の式の未知数x2,・・・・,xn
に近似値を代入してx1を求め,2番目の式からx2
以外の未知数に近似値を代入してx2を求める。このように,
右辺の未知数に近似値を代入し,それによって左辺の未知数のより良い近似解を計
算する。これを何回も繰り返してやれば,解の精度が高くなってくる。
いま,k回繰り返して,x1,x2,・・・,xn
の「第k近似解」を,xの右肩に(k)をつけて,
x1(k),x2(k) ,・・・・,xn(k)
のように表すとする。これをもとに第(k+1)近似解求める反復公式は次の ようになる。
|
x1(k+1)=(b1−a12
x2(k)−a13x3
(k)・・・・・−a1nxn(k)
)/a11 x2(k+1)=(b2−a21 x1(k)−a23x3 (k)・・・・・−a2nxn(k) )/a22 ・・・・・・・・・・・・・・・・・・・・・・・ xi(k+1)=(bi−ai1 x1(k)・・・−aii−1x i−1(k)−ai+1xi+1 (k)・・・−ainxn(k) )/aii ・・・・・・・・・・・・・・・・・・・・・・・ xn(k+1)=(bn−an1 x1(k)−an2x2 (k)−・・・・・−ann−1xn−1 (k))/ann |
(4.53) |
上式をまとめて書くと,次のようになる。
|
(4.54) |
これがヤコビ法の公式である。
ヤコビ法の公式(4.54)を用いて,次の手順で連立1次方程式の解を求める。
|
(0)k=0として,ヤコビの公式(4.54)の右辺のx1
(0),x2(0),・・・,xn
(0)に任意の値を与え、公式(4.54)より, (1)次に,k=1として,いま求めたx1(1)
,x2(1),・・・,xn(1)
を式(4.54)の右辺に代入し, (2)次に,k=2として,いま求めたx1(2)
,x2(2),・・・,xn(2)
を式(4.54)の右辺に代入し, ・・・・・・・・・・・・・・ (k)この反復を繰り返して,あるkに対して求めた解, |
以上の手順をフローチャートに示した結果を図4.37に示す。
図中に用いた収束判定条件は次式を用いた。
dx/|xnew|<ε (4.55)
ここで,dx=|xnew−xo(i)|
xnew :いま,求めた近似解
xo(i) :前回に求めた近似解
ε :許容相対誤差
収束判定条件がすべてのxiに対して成り立っていることが,反復 終了のためには必要である。反復は,式(4.55)が成り立つまで続けられる。
ヤコビ法の公式(4.54)の右辺を見ると,総和が2つある。第1の総和は, j=1からi−1であり,第2の総和は,j=i+1からnまでである。 第1の 総和のxj(k)をすでに計算されたxj (k+1)で置き換えると,最新のxjの値を使っている ことになり,収束が早くなることが予想される。すなわち,次のガウス・ザイデル 法(Gauss-Seidel)の公式が得られる。
|
|
|
|
| |
|
[解]第1式をxについて,第2式をyについて,解くと次のようになる。
|
ガウス・ザイデル法の公式(4.56)にしたがって,ガウス・ザイデル法の フロー・チャートを図4.38に示した。このガウス・ザイデル法は,つねに最新の xjを使うので,古いxj(k)と新しい xj(k+1)の両方を記憶しておく必要がない。した がって,ヤコビ法(図4.37)のように,xo(j)が必要ないし,x(j)をxo(j)に 入れ換える操作も不要になり,フロー・チャートは簡単になる。
これらの手法はどの場合でも収束するわけではなく、収束するための十分条件
は次の条件を満足することである。すなわち、
係数マトリックスの各行とも、対角要素の絶対値|aii|が非対
角要素の絶対値の和より大きいことである。
|
(4.57) |