|||
在数学之家群里有人写了一个高斯消去法的程序,不够规范完整,有时不能得到正确结果。
我改了一下:
测试主程序
clc
A = rand(10);
x = [1;2;3;4;5;2;1;2;9;10];b = A*x;
sol=gaussMethod(A,b)
高斯消去法程序:
function x=gaussMethod(A,b)
%高斯列主元消去法,要求系数矩阵非奇异的, %
n = size(A,1);
if abs(det(A))<= 1e-8
error('系数矩阵是奇异的');
return;
end
%
for k=1:n
ak = max(abs(A(k:n,k)));
index = find(A(:,k)==ak);
if length(index) == 0
index = find(A(:,k)==-ak);
end
%交换列主元
temp = A(index,:);
A(index,:) = A(k,:);
A(k,:) = temp;
temp = b(index);b(index) = b(k); b(k) = temp;
%消元过程
for i=k+1:n
m=A(i,k)/A(k,k);
%消除列元素
A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n);
b(i)=b(i)-m*b(k);
end
end
%回代过程
x(n)=b(n)/A(n,n);
for k=n-1:-1:1;
x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k);
end
x=x';
end
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-12-4 12:01
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社