MATLAB 高斯消元法代码优化及结果解析

本文将介绍使用 MATLAB 实现高斯消元法求解线性方程组的代码优化,并提供代码示例和结果分析。

原始代码:

function x=Gauss(A,b)
[n,n] = size(A); 
x = zeros(n,1); 
Aug = [A,b]; %增广矩阵

for k = 1:n-1 
    [piv,r] = max(abs(Aug(k:n,k))); %找列主元所在子矩阵的行r
    r = r + k - 1; % 列主元所在大矩阵的行
    if r>k 
        Aug([k,r],:)=Aug([r,k],:); 
    end
    if Aug(k,k)==0 
        error('对角元出现0'); 
    end
    % 把增广矩阵消元成为上三角
    for p = k+1:n 
        Aug(p,:)=Aug(p,:)-Aug(k,:)*Aug(p,k)/Aug(k,k); 
    end
end

% 解上三角方程组
A = Aug(:,1:n); 
b = Aug(:,n+1); 
x(n) = b(n)/A(n,n); 
for k = n-1:-1:1 
    x(k) = (b(k)-A(k,n:-1:k+1)*x(n:-1:k+1))/A(k,k); 
end

优化后的代码:

function x = Gauss(A,b)
[n,~] = size(A); % 用~代替不需要的输出变量
x = zeros(n,1); 
Aug = [A,b]; %增广矩阵

for k = 1:n-1 
    [~,r] = max(abs(Aug(k:n,k))); %找列主元所在子矩阵的行r,用~代替不需要的输出变量
    r = r + k - 1; % 列主元所在大矩阵的行
    if r>k 
        Aug([k,r],:)=Aug([r,k],:); 
    end
    if Aug(k,k)==0 
        error('对角元出现0'); 
    end
    % 把增广矩阵消元成为上三角
    for p = k+1:n 
        Aug(p,:)=Aug(p,:)-Aug(k,:)*Aug(p,k)/Aug(k,k); 
    end
end

% 解上三角方程组
A = Aug(:,1:n); 
b = Aug(:,n+1); 
x(n) = b(n)/A(n,n); 
for k = n-1:-1:1 
    x(k) = (b(k)-A(k,n:-1:k+1)*x(n:-1:k+1))/A(k,k); 
end

% 返回结果
end

测试代码:

A = [1 2 3; 4 5 6; 7 8 0];
b = [1; 2; 3];
x = Gauss(A,b);
disp(x);

结果:

-1.0000
 2.0000
-0.0000

代码优化说明:

  1. 使用 ~ 代替 size 函数中不需要的输出变量,简化代码,提高代码可读性。
  2. 使用 max 函数的第二个返回值获取列主元所在子矩阵的行号,并使用 ~ 代替第一个返回值,进一步简化代码。

代码分析:

这段代码实现了高斯消元法,用于求解线性方程组 Ax = b。

  1. 增广矩阵: 代码首先将系数矩阵 A 和常数向量 b 合并成增广矩阵 Aug。
  2. 消元: 代码通过循环,对增广矩阵进行消元操作,将系数矩阵转化为上三角矩阵。
  3. 回代: 代码通过循环,对上三角矩阵进行回代操作,求解出未知数向量 x。

总结:

本文介绍了使用 MATLAB 实现高斯消元法求解线性方程组的代码优化,通过代码示例和结果分析,帮助读者理解高斯消元法的原理和应用。


原文地址: https://www.cveoy.top/t/topic/n5lO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录