声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

声振论坛 展示 科学计算 算法编程 查看内容

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

2015-11-17 04:01| 发布者: aspen| 查看: 1605| 评论: 2|原作者: MVH|来自: 声振论坛

摘要: 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=lengt ...
  1. function x=maker6(A,b)
  2. %最速下降法求线性方程
  3. %基于公式如下:
  4. %r0=b- Ax0,a=(r0,r0)/(Ar0,r0),x1=x0+a*r0,r1=b-Ax1;
  5. %上式根据||r0||< errs,(errs为一个非常小的数据)
  6. %chinamaker
  7. %2003.12.27
  8. numer=length(A);
  9. x0=ones(numer,1);
  10. errs=1;
  11. while  errs>0.001
  12.     r0=b-A*x0;
  13.     a=sum(r0.*r0)/sum((A*r0).*r0);
  14.     x1=x0+a*r0;
  15.     r1=b-A*x1;
  16.     x0=x1;
  17.     r0=r1;
  18.     errs=norm(r1);
  19. end
  20. x=x1;
  21. %end
复制代码

< BR>实例
>> A=[4,3,0;3,4,1;0,-1,4];
>> b=[24;20;-24];
>> x=maker6(A,b)

x =

    2.9998
    4.0002
   -5.0000


12下一页
发表评论

最新评论

引用 MVH 2005-7-28 17:50
介绍一种求多元方程组的方法
come from shumo.com
%简单的GAUSS消去法
%a为系数方阵,b为右端向量
  1. function x = gauss(a,b)
  2. [n,m] = size(b);
  3. if size(a) == [n,n]
  4.     for i = 1 : (n - 1)
  5.         if a(i,i) == 0 error('Divide by zero');end
  6.         b((i + 1):n,:) = b((i + 1):n,:) - a((i + 1):n,i)*b(i,:)/a(i,i);
  7.         a((i + 1):n,i:n) = a((i + 1):n,i:n) - ...
  8.             a((i + 1):n,i)*a(i,i:n)/a(i,i);
  9.         [a,b]
  10.     end
  11.     if a(n,n) == 0,error('Divide by zero');end
  12.     x(n,:) = b(n,:)/a(n,n);
  13.     for i = n-1:-1:1
  14.         x(i,:) = b(i,:) - a(i,(i + 1):n)*x((i + 1):n,:)/a(i,i);
  15.     end
  16. else,error('Divede of matrix must agree');
  17. end
复制代码


%请大家赐教其他的好方法
引用 xinyuan110 2006-5-23 11:11
不错,不错谢谢了!!!

查看全部评论(2)

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-11 05:53 , Processed in 0.097368 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部