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 介绍一种求多元方程组的方法
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
%请大家赐教其他的好方法
不错,不错谢谢了!!!
页:
[1]