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