用两种方法写代码,matlab
高斯消元和选主元高斯消元,保留五位有效数字
以义 下午好🌅🌅🌅
本答案参考ChatGPT-3.5
解决方案:
function x = gauss_elimination(A, b)
[m,n] = size(A);
for k = 1:n-1
% 选取主元
max_index = k;
max_value = abs(A(k,k));
for i = k+1:n
if abs(A(i,k)) > max_value
max_index = i;
max_value = abs(A(i,k));
end
end
% 交换行
temp1 = A(k,:);
A(k,:) = A(max_index,:);
A(max_index,:) = temp1;
temp2 = b(k);
b(k) = b(max_index);
b(max_index) = temp2;
for i = k+1:n
% 计算消元因子
factor = A(i,k) / A(k,k);
A(i,k:n) = A(i,k:n) - factor * A(k,k:n);
b(i) = b(i) - factor * b(k);
end
end
% 回带解方程
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
A = [1.1348 3.8326 1.1651; 3.4017 9.5342 0.5301; 1.7875 2.5330 1.5435];
b = [6.3941; 18.4231; 1.2371];
x = gauss_elimination(A, b);
format long;
x = round(x, 5, 'significant')
function x = gauss_elimination_pivot(A, b)
[m,n] = size(A);
for k = 1:n-1
% 选取主元
[max_value, max_index] = max(abs(A(k:n,k)));
max_index = max_index + k - 1;
% 交换行
temp1 = A(k,:);
A(k,:) = A(max_index,:);
A(max_index,:) = temp1;
temp2 = b(k);
b(k) = b(max_index);
b(max_index) = temp2;
for i = k+1:n
% 计算消元因子
factor = A(i,k) / A(k,k);
A(i,k:n) = A(i,k:n) - factor * A(k,k:n);
b(i) = b(i) - factor * b(k);
end
end
% 回带解方程
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
A = [1.1348 3.8326 1.1651; 3.4017 9.5342 0.5301; 1.7875 2.5330 1.5435];
b = [6.3941; 18.4231; 1.2371];
x = gauss_elimination_pivot(A, b);
format long;
x = round(x, 5, 'significant')
输出结果:
x =
4.99790
0.68881
8.66274