MVH 发表于 2005-7-28 17:49

maker系列--最速下降法求线性方程

function x=maker6(A,b)
%最速下降法求线性方程
%基于公式如下:
%r0=b- Ax0,a=(r0,r0)/(Ar0,r0),x1=x0+a*r0,r1=b-Ax1;
%上式根据||r0||< errs,(errs为一个非常小的数据)
%chinamaker
%2003.12.27
numer=length(A);
x0=ones(numer,1);
errs=1;
whileerrs>0.001
    r0=b-A*x0;
    a=sum(r0.*r0)/sum((A*r0).*r0);
    x1=x0+a*r0;
    r1=b-A*x1;
    x0=x1;
    r0=r1;
    errs=norm(r1);
end
x=x1;
%end

< BR>实例
>> A=;
>> b=;
>> x=maker6(A,b)

x =

    2.9998
    4.0002
   -5.0000

MVH 发表于 2005-7-28 17:50

介绍一种求多元方程组的方法
come from shumo.com
%简单的GAUSS消去法
%a为系数方阵,b为右端向量
function x = gauss(a,b)
= size(b);
if size(a) ==
    for i = 1 : (n - 1)
      if a(i,i) == 0 error('Divide by zero');end
      b((i + 1):n,:) = b((i + 1):n,:) - a((i + 1):n,i)*b(i,:)/a(i,i);
      a((i + 1):n,i:n) = a((i + 1):n,i:n) - ...
            a((i + 1):n,i)*a(i,i:n)/a(i,i);
      
    end
    if a(n,n) == 0,error('Divide by zero');end
    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
else,error('Divede of matrix must agree');
end

%请大家赐教其他的好方法

xinyuan110 发表于 2006-5-23 11:11

不错,不错谢谢了!!!
页: [1]
查看完整版本: maker系列--最速下降法求线性方程