x - 2y - 2z + 2w = 5 ..... (1)
2x - 2y - 3z + 3w = 10 ..... (2)
-x + 6y + 3z - 2w = 2 ..... (3)
x + 4y - w = -10 ..... (4)
以下各ステップで式番号を、上から順に(1),(2),(3),(4)と繰り返し使う。
[ステップ1]
(1)式のxの係数を1にして、残りの式のxの係数を0に式変形する。
(2)式の変形:(2)式 − (1)式×(+2)
(3)式の変形:(3)式 − (1)式×(−1)
(4)式の変形:(4)式 − (1)式×(+1)
x - 2y - 2z + 2w = 5 ..... (1)
2y + z - w = 0 ..... (2)
4y + z = 7 ..... (3)
6y + 2z - 3w = -15 ..... (4)
[ステップ2]
(2)式のyの係数を1にして、
(2)式の変形:(2)式 ÷(+2)
x - 2y - 2 z + 2 w = 5 ..... (1)
y + 1/2z - 1/2w = 0 ..... (2)
4y + z = 7 ..... (3)
6y + 2 z - 3 w = -15 ..... (4)
残りの式のyの係数を0に式変形する。
(1)式の変形:(1)式 − (2)式×(−2)
(3)式の変形:(3)式 − (2)式×(+4)
(4)式の変形:(4)式 − (2)式×(+6)
x - z + w = 5 ..... (1)
y + 1/2z - 1/2w = 0 ..... (2)
- z + 2 w = 7 ..... (3)
- z = -15 ..... (4)
[ステップ3]
(3)式のzの係数を1にして、
(3)式の変形:(3)式 ÷(−1)
x - z + w = 5 ..... (1)
y + 1/2z - 1/2w = 0 ..... (2)
z - 2 w = -7 ..... (3)
- z = -15 ..... (4)
残りの式のzの係数を0に式変形する。
(1)式の変形:(1)式 − (3)式×(+1)
(2)式の変形:(2)式 − (3)式×(+1/2)
(4)式の変形:(4)式 − (3)式×(−1)
x - w = -2 ..... (1)
y + 1/2w = 7/2 ..... (2)
z - 2 w = -7 ..... (3)
- 2 w = -22 ..... (4)
[ステップ4]
(4)式のwの係数を1にして、
(4)式の変形:(4)式 ÷(−2)
x - w = -2 ..... (1)
y + 1/2w = 7/2 ..... (2)
z - 2 w = -7 ..... (3)
w = 11 ..... (4)
残りの式のwの係数を0に式変形する。
(1)式の変形:(1)式 − (4)式×(−1)
(2)式の変形:(2)式 − (4)式×(+1/2)
(3)式の変形:(3)式 − (4)式×(−2)
x = 9 ..... (1)
y = -2 ..... (2)
z = 15 ..... (3)
w = 11 ..... (4)
以上。
これは係数と定数項とを合わせて4行5列の行列で表して、行についての変形
を行い係数行列部分を単位行列にするのと同じである。つまり次の行列について
| 1 -2 -2 2 5 | ..... (1)
| 2 -2 -3 3 10 | ..... (2)
| -1 6 3 -2 2 | ..... (3)
| 1 4 0 -1 -10 | ..... (4)
上の4つのステップの操作を、まとめると、
| 1 0 0 0 9 | ..... (1)
| 0 1 0 0 -2 | ..... (2)
| 0 0 1 0 15 | ..... (3)
| 0 0 0 1 11 | ..... (4)
となる。この操作を係数行列の対角成分を軸(ピボット pivot)にして掃き出す
(sweep out)という。
このアルゴリズムは、次のようなコードで書かれる。4×5の行列aに対して
(ただし第5列は定数項)、
for(int k = 0; k < getRow(); k++){ // ステップ1〜ステップ4
double p=a[k][k];// ピボット係数
int i;
for (i = k; i < a.getCol(); i++)
a[k][i] /= p; // ピボット係数を1にするためピボット行を割り算
for (i = 0; i < a.getRow(); i++){// ピボット列の掃き出し
if(i != k){
double d = a[i][k];
for(int j = k; j < a.getCol(); j++)
a[i][j] -= d * a[k][j];
}
}
}
| 戻る |
Copyright(c) 1999 Yamada,K