防灾数学分享 http://blog.sciencenet.cn/u/fzmath 防灾科技学院数学教研室

博文

高斯消去法的matlab程序

已有 23363 次阅读 2010-12-21 09:41 |个人分类:生活点滴|系统分类:科研笔记| MATLAB, 高斯消去法

在数学之家群里有人写了一个高斯消去法的程序,不够规范完整,有时不能得到正确结果。

我改了一下:

测试主程序

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



http://blog.sciencenet.cn/blog-292361-395660.html

上一篇:零截距线性模型的T-型稳健估计的matlab代码
下一篇:非线性方程求解——牛顿法

2 黄富强 唐常杰

发表评论 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2020-10-29 06:56

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部