以下の連立一次方程式$Ax=b$の例によって,ガウス消去法を説明します。 $$ A= \left( \begin{array}{cccc} 2& 1 & -2 & 3\\ 2 & 0 & 4 & 1 \\ 3 & 0 & 5& 2\\ 1 & -1 & 2 & 1 \end{array} \right) \quad b= \left( \begin{array}{cccc} 11\\ -5\\ -5\\ -4 \end{array} \right) $$

ガウス消去法の基本的な考え方は基本変換によって行列Aをシンプルな形に変形します。 例えば、上三角行列までに変換します。

Step 0. 準備

Aとbを定義します。

nを行列のサイズにします。

In [3]:
A = [2, 1, -2, 3; 2, 0, 4, 1; 3, 0, 5, 2; 1, -1, 2, 1]
b=[11;-5;-5;-4]
n=size(A,1)
x=A\b
A*[1;2;3;4]
A =

   2   1  -2   3
   2   0   4   1
   3   0   5   2
   1  -1   2   1

b =

   11
   -5
   -5
   -4

n =  4
x =

   1.00000
   2.00000
  -2.00000
   1.00000

ans =

   10
   18
   26
    9

Step 1.

Aの行列の第1行を使って、行列の一番目の列の対角以下の成分を0に変形します。

まず、第1行のalpha倍を第2行に加えます。

In [26]:
A = [2, 1, -2, 3; 2, 0, 4, 1; 3, 0, 5, 2; 1, -1, 2, 1];

%対角の第1成分からの作業
i = 1;

%----------- 第2行の変形 ----------- 
j=2; %作業の行の番号
alpha = -A(2,1)/A(1,1);
for k=1:n %k:各列の番号
  A(j,k) = A(j,k) + alpha*A(1,k);
end

%変形後のA
A
A =

   2   1  -2   3
   0  -1   6  -2
   3   0   5   2
   1  -1   2   1

第1行のalpha倍を第3行に加えます。

In [29]:
%----------- 第3行の変形 ----------- 
j=3;
alpha = -A(3,1)/A(1,1);
for k=1:n
  A(j,k) = A(j,k) + alpha*A(1,k);
end
%変形後のA
A
A =

   2.00000   1.00000  -2.00000   3.00000
   0.00000  -1.00000   6.00000  -2.00000
   0.00000  -1.50000   8.00000  -2.50000
   1.00000  -1.00000   2.00000   1.00000

第1行のalpha倍を第4行に加えます。

In [30]:
%----------- 第4行の変形 ----------- 
j=4;
alpha = -A(4,1)/A(1,1);
for k=1:n
  A(j,k) = A(j,k) + alpha*A(1,k);
end
%変形後のA
A
A =

   2.00000   1.00000  -2.00000   3.00000
   0.00000  -1.00000   6.00000  -2.00000
   0.00000  -1.50000   8.00000  -2.50000
   0.00000  -1.50000   3.00000  -0.50000

演習1.

上記のコードをforループでまとめてください。

In [16]:
A = [2, 1, -2, 3; 2, 0, 4, 1; 3, 0, 5, 2; 1, -1, 2, 1];

%対角の第1成分からの作業
i = 1;

for j=?:?
  alpha = ??;
  for k=1:n
     A(j,k) = A(j,k) + alpha*A(??,k);
  end
end
%変形後のA
A

Step 2.

Aの行列の第2行を使って、行列の2番目の列の対角以下の成分を0に変形します。

In [21]:
%対角の第2成分による作業
i = 2;

%----------- 第3行の変形 ----------- 
j=3;
alpha = -A(3,2)/A(2,2)
for k=2:n
  A(j,k) = A(j,k) + alpha*A(2,k);
end

%変形後のA
A

%----------- 第4行の変形 ----------- 
j=4;
alpha = -A(4,2)/A(2,2)
for k=2:n
  A(j,k) = A(j,k) + alpha*A(2,k);
end

%変形後のA
A
alpha = -1.5000
A =

   2.00000   1.00000  -2.00000   3.00000
   0.00000  -1.00000   6.00000  -2.00000
   0.00000   0.00000  -1.00000   0.50000
   0.00000  -1.50000   3.00000  -0.50000

alpha = -1.5000
A =

   2.00000   1.00000  -2.00000   3.00000
   0.00000  -1.00000   6.00000  -2.00000
   0.00000   0.00000  -1.00000   0.50000
   0.00000   0.00000  -6.00000   2.50000

演習2.

上記のコードをループで書き直して、ガウス消去法のコードを完成せよ。

In [ ]: