以下是用 MATLAB 编写的选主元高斯消去法的示例代码:

function [x] = gauss_elimination(A, b)
% Gaussian elimination with partial pivoting
% Input:
%   A: coefficient matrix
%   b: right-hand side vector
% Output:
%   x: solution vector

n = size(A, 1);
for k = 1:n-1
    % partial pivoting
    [~, p] = max(abs(A(k:n, k)));
    p = p + k - 1;
    if p ~= k
        A([k p], :) = A([p k], :);
        b([k p]) = b([p k]);
    end
    % elimination
    for i = k+1:n
        factor = A(i, k) / A(k, k);
        A(i, k+1:n) = A(i, k+1:n) - factor * A(k, k+1:n);
        b(i) = b(i) - factor * b(k);
    end
end
% back substitution
x = zeros(n, 1);
x(n) = b(n) / A(n, n);
for i = n-1:-1:1
    x(i) = (b(i) - A(i, i+1:n) * x(i+1:n)) / A(i, i);
end

end

在这个函数中,我们首先进行了选主元操作,即在每一次消元前,从当前列下面的所有行中找到绝对值最大的元素,并将其所在行与当前行交换。这样可以避免在消元过程中出现除以零的情况,从而增加了运算的稳定性。

之后,我们进行了消元操作,即将当前列下面的所有行都减去一个系数,使得当前列下面的所有元素都成为零。这个系数是当前行下面的行与当前行之间的系数,计算公式为 factor = A(i, k) / A(k, k)

最后,我们进行了回代操作,即从最后一行开始,依次求解出每一个未知数的值。回代的计算公式为 x(i) = (b(i) - A(i, i+1:n) * x(i+1:n)) / A(i, i)

使用这个函数,我们可以解决任意大小的线性方程组,并得到其解向量 x

MATLAB 高斯消元法代码:选主元消去法实现

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

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