声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7011|回复: 18

[共享资源] 最小二乘法算法程序

  [复制链接]
发表于 2007-6-20 14:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
呵呵,前几天在论坛上写了一个帖子给eight,感谢他一语惊醒梦中人,把我从一个提问者变成了动手者,而后又继续自己的编程之旅。经过一个多星期的学习,我又有了一些体会。现在,我的作业已经完成了大部分,回头再看当初贴在论坛上的程序觉得真丢人:@L ,居然写得那么“笨”,可惜帖子已经不能修改了,只能留在那里继续丢人了。不过,那倒也记录了我成长的历程:@)
其实最小二乘法也可以写得不像我原来的那么麻烦:
  1. fid=fopen('input.txt','r+');
  2. U=fscanf(fid,'%f',a);
  3. fclose(fid);
  4. fid1=fopen('output1.txt','r+');
  5. Y=fscanf(fid1,'%f',a);
  6. fclose(fid1);
  7. U1=U(1:a-1);
  8. U2=U(1:a-2);
  9. Y1=Y(1:a-1);
  10. Y2=Y(1:a-2);
  11. D1=-1*[0;Y1];
  12. D2=-1*[0;0;Y2];
  13. D3=[0;U1];
  14. D4=[0;0;U2];
  15. D=[D1 D2 D3 D4];
  16. Q=inv(D'*D)*D'*Y
复制代码

下面是递推最小二乘的算法:
  1. m=input('m=')
  2. fid=fopen('input.txt','r+');
  3. U=fscanf(fid,'%f',a);
  4. fclose(fid);
  5. fid1=fopen('output1.txt','r+');
  6. Y=fscanf(fid1,'%f',a);
  7. fclose(fid1);
  8. U1=U(1:m-1);
  9. U2=U(1:m-2);
  10. Y1=Y(1:m-1);
  11. Y2=Y(1:m-2);
  12. Y3=Y(1:m);
  13. D1=-1*[0;Y1];
  14. D2=-1*[0;0;Y2];
  15. D3=[0;U1];
  16. D4=[0;0;U2];
  17. D=[D1 D2 D3 D4];
  18. Q=inv(D'*D)*D'*Y3;
  19. P=inv(D'*D);
  20. %以上程序是用最小二乘法计算的初值,取前m个数据%
  21. for i=m:a-1;
  22.     x=[-1*Y(i);-1*Y(i-1);U(i);U(i-1)];
  23.     y=Y(i+1);
  24.     p=1/(1+x'*P*x);
  25.     Z=Q+P*x*p*(y-x'*Q);
  26.     P=P-P*x*p*x'*P;
  27.     q=norm(Z-Q)/norm(Q);
  28.     Q=Z;
  29.     if q<10e-6;
  30.         k=i-m
  31.         q
  32.         Q
  33.         break
  34.     end
  35. end
  36. ppp='help me!'
复制代码

[ 本帖最后由 eight 于 2007-6-20 15:23 编辑

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-6-20 14:56 | 显示全部楼层
一猜就知道是好学心细的女孩子,欢迎。
 楼主| 发表于 2007-6-20 14:59 | 显示全部楼层
谢谢:@) 还得努力
发表于 2007-11-28 20:40 | 显示全部楼层
原帖由 chengtianmmz 于 2007-6-20 14:41 发表
呵呵,前几天在论坛上写了一个帖子给eight,感谢他一语惊醒梦中人,把我从一个提问者变成了动手者,而后又继续自己的编程之旅。经过一个多星期的学习,我又有了一些体会。现在,我的作业已经完成了大部分,回头 ...

出来乍到!以后要多向你学习-----多动手,少提问!
发表于 2009-9-7 20:30 | 显示全部楼层
不错,就是注释太少
发表于 2009-9-9 10:43 | 显示全部楼层
我也学习了,,谢谢
发表于 2011-5-18 19:45 | 显示全部楼层
谢谢分享
发表于 2011-7-29 14:20 | 显示全部楼层
收藏以后留着参考 学习
发表于 2011-7-29 15:37 | 显示全部楼层
很好 很不错
发表于 2011-8-4 22:04 | 显示全部楼层
这个大学时学过~~~~~~~~
发表于 2011-8-11 16:42 | 显示全部楼层
回复 1 # chengtianmmz 的帖子

不错, 我初次来这里,很高兴以后一起讨论
发表于 2012-11-22 09:01 | 显示全部楼层
学习学习~
发表于 2012-11-26 10:04 | 显示全部楼层
没事看看,多多学习
发表于 2013-4-6 11:58 | 显示全部楼层
这论坛牛人真多!
发表于 2013-4-6 20:04 | 显示全部楼层
ginger 发表于 2007-11-28 20:40
出来乍到!以后要多向你学习-----多动手,少提问!

个人以为"多动手,多讨论", 或许更好些!
多动手, 增进自己实力
多讨论, 学习别人精髓, 也比较不会偏颇
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-18 09:01 , Processed in 0.062276 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表