可以逐步输出消去的每一步结果,更改矩阵的话只需更改代码中数值即可。
clc
clear
% 定义系数矩阵和常数项向量
a1 = [0 2 0 1;
2 2 3 2;
4 -3 0 1;
6 1 -6 -5];
b = [0;-2;-7;6];
% 构建增广矩阵
a = [a1 b];
n = size(a, 1);
% 消元
for i = 1:n-1
fprintf('步骤 %d:\n', i);
% 列选主元
[~, nmax] = max(abs(a(i:n, i)));
nmax = nmax + i - 1;
% 交换当前行与主元所在行
p = a(i, :);
a(i, :) = a(nmax, :);
a(nmax, :) = p;
% 打印当前矩阵状态
disp(a);
% 消元
for k = i+1:n
mik = a(i, i:n+1) ./ a(i, i) .* a(k, i);
a(k, i:n+1) = a(k, i:n+1) - mik;
end
end
% 打印最终列主元矩阵状态
fprintf('最终列主元矩阵:\n');
disp(a);
% 回代
x(n) = a(n, n+1) / a(n, n);
for i = n-1:-1:1
x(i) = (a(i, n+1) - sum(x(i+1:n) .* a(i, i+1:n))) / a(i, i);
end
% 打印解向量x
fprintf('解向量 x:\n');
disp(x);