声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1045|回复: 2

[综合讨论] 求一个最优化算法的问题

[复制链接]
发表于 2006-11-6 16:28 | 显示全部楼层 |阅读模式

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

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

x
小弟初学matlab
想验证一下袁亚湘提出的最速下降法的新步长
所以要写一个函数: y=(X-X*)A(X-X*)'
要求这个X是1*10000的
A是10000*10000的
因为要用最速下降法
所以要求上面函数的梯度函数(在作步长的时候用)
我不知道怎么写梯度函数
跪求各位大侠帮忙!

[ 本帖最后由 eight 于 2007-1-24 18:48 编辑 ]
回复
分享到:

使用道具 举报

发表于 2006-11-6 16:56 | 显示全部楼层
最速下下降法程序,其中梯度函数你可以用diff获得

  1. function y=F(x)
  2. y=(x(1)-15)^2+(x(2)-45)^4;

  3. function y=D_F(x)
  4. %D_F Summary of this function goes here
  5. %  Detailed explanation goes here
  6. y=[0,0];
  7. y1=2*(x(1)-15),  y2=4*((x(2)-45)^3);
  8. y=[y1,y2];


  9. format long
  10. x=[0,0];
  11. x=input('请输入初始值[x0,x1]=',[0,0]);
  12. s=input('请输入初始精度s=',0.1);
  13. g=D_F(x);
  14. g=g.';%转置为列向量;
  15. while(norm(g)>s)
  16.     s_k=-g,   r=min_F(x,s_k),   x=x+r.*s_k.';
  17.     g=D_F(x);
  18.     g=g.';
  19. fprintf('The result is %8.5f\n', x);
  20.     fprintf('The daosu is %8.5f\n', g);   
  21. end
  22. axis normal;
  23. hold on;
  24. view([1,1,1]);
  25. for i=-100:100
  26.    for j=-100:100
  27. z=[i,j],  z=F(z);
  28. plot3(i,j,z);
  29. end
  30. end
  31. hold off;
复制代码

评分

1

查看全部评分

 楼主| 发表于 2006-11-6 19:11 | 显示全部楼层
太感谢了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 01:19 , Processed in 0.055885 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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