您的位置:首页 > 编程语言 > MATLAB

(matlab系列)线性方程组求根-------列主元高斯消元法

2012-09-23 21:45 519 查看
线性方程组求根的数值方法有直接法和迭代法,直接法常用于处理阶数较小的方程组。其中, 列主元高斯法比较简单,但是实现成代码需要考虑很多细节,matlab的调试过程需要很大的耐心,下面贴出matlab程序。

%Gaussian elimination method to find root of linear equations
function x=Gaussian_elimination(A,b) %b is a column vector
[n,~]= size(A);
x(1:n,1) = 0;

if abs(det(A))<=1e-8
error('The matrix is a singular matrix');
return ;
end

%elimination
for k=1:n
ak = max( abs( A(k:n,k) ) );
index = find( abs(A(:,k))==ak );   %index is a column vector

%main element
temp = A(k,:);   %temp is a row vector
A(k,:) = A(index(1),:);
A(index(1),:) = temp;
temp_b = b(k);
b(k) = b(index(1));
b(index(1)) = temp_b;

%clear up column elements
if A(k,k)~=0
for i=k+1:n
if A(i,k)~=0
m=A(i,k)/A(k,k);
A(i,k:n) = A(i,k:n)-A(k,k:n).*m;
b(i) = b(i)-b(k)*m;
end
end
end
end

%back substitution
for k=n:-1:1         %step size : -1
x(k) = b(k)/A(k,k);
for i=k-1:-1:1   %step size : -1
b(i) = b(i)-x(k)*A(i,k);
end
end


亲测成功:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: