使用MATLAB实现列主元消去法

可以逐步输出消去的每一步结果,更改矩阵的话只需更改代码中数值即可。

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);

你可能感兴趣的:(matlab,机器学习,线性代数)