A n × n x = b A_{n \times n}x=b An×nx=b
步骤:
1. 列出增广矩阵 Z = [ A ∣ b ] 2. 迭代 , j = 1 , 2 , ⋯ , n Z 第 i 行的每个元素乘以 Z i − 1 , j Z i , j , i = j + 1 , j + 2 , ⋯ , n Z 第 i 行减去第 j 行 , 消元 3. 回代 x i = b i − ∑ j = i + 1 n x j ⋅ A i , j A i , i , i = n , n − 1 , ⋯ , 1 \begin{align*} 1.& 列出增广矩阵Z=[A|b] \\ \\ 2.& 迭代 \,\,,\,\, j=1,2, \cdots ,n \\ \\ & Z第i行的每个元素乘以 \frac{Z_{i-1,j}}{Z_{i,j}} \,\,,\,\, i=j+1,j+2, \cdots ,n \\ \\ &Z第i行减去第j行 \,\,,\,\, 消元 \\ \\ 3. & 回代 \\ \\ &x_i= \frac{b_i- \sum_{j=i+1}^{ n}x_j \cdot A_{i,j}}{A_{i,i}} \,\,,\,\, i=n,n-1, \cdots ,1 \end{align*} 1.2.3.列出增广矩阵Z=[A∣b]迭代,j=1,2,⋯,nZ第i行的每个元素乘以Zi,jZi−1,j,i=j+1,j+2,⋯,nZ第i行减去第j行,消元回代xi=Ai,ibi−∑j=i+1nxj⋅Ai,j,i=n,n−1,⋯,1
不选主元的高斯消元法
matlab实现
%% Ax=b例子
A = [16 -12 2 4;
12 -8 6 10;
3 -13 9 23;
-6 14 1 -28];
b = [17 36 -49 -54]';
[x,A,b] = gaussElim(A,b)
%% 不选主元高斯消元法解 Ax=b 傻逼版
% 输入矩阵A
% 输出解向量x, 消元后的矩阵A,b
function [x, A, b] = gaussElim(A,b)
Z = [A b]
[n,m] = size(Z)
for j=1:m
for i=j+1:n
Z(i,[1:end])=Z(i,[1:end]).* (Z(i-1,j)/Z(i,j)); % 乘数
end
for i=j+1:n
Z(i,[1:end])=Z(i,[1:end])-Z(j,[1:end]); % 消元
end
end
A = Z([1:n],[1:m-1]);
b = Z([1:n],m);
for i=n:-1:1 % 回代
x(i) = b(i);
for j=n:-1:i+1
x(i) = x(i)-A(i,j)*x(j);
end
x(i) = x(i)/A(i,i);
end
x=x';
end
列主元高斯消元法
选每列模最大的元素作为主元,即被除数。
matlab实现
%% 选主元高斯消元法解 Ax=b 傻逼版
% 输入矩阵A
% 输出解向量x, 消元后的矩阵A,b
function [x, A, b] = gaussElim(A,b)
Z = [A b]
[n,m] = size(Z)
for j=1:n
max = 0; % 选主元
for i=j:n
if abs(Z(i,j))>max
max=abs(Z(i,j))
maxi = i
end
end
t = Z(j,[1:end]);
Z(j,[1:end])=Z(maxi,[1:end]);
Z(maxi,[1:end])=t;
for i=j+1:n
Z(i,[1:end])=Z(i,[1:end]).* (Z(i-1,j)/Z(i,j)) % 乘数
end
for i=j+1:n
Z(i,[1:end])=Z(i,[1:end])-Z(j,[1:end]) % 消元
end
end
A = Z([1:n],[1:m-1]);
b = Z([1:n],m);
for i=n:-1:1 % 回代
x(i) = b(i);
for j=n:-1:i+1
x(i) = x(i)-A(i,j)*x(j);
end
x(i) = x(i)/A(i,i);
end
x=x';
end