MATLAB 高斯消元法代码:选主元消去法实现
以下是用 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。
原文地址: https://www.cveoy.top/t/topic/oQbX 著作权归作者所有。请勿转载和采集!