ガウス・ジョルダン法による掃き出し計算

  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