声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2108|回复: 8

[编程技巧] 哪位帮忙看下这个程序(牛顿法求极值)

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

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

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

x
这个程序能运行,但结果不对,不知道问题在哪
  1. x=[-1.9,2]'
  2. f=100* (x(2)-x(1)^2)^2+(1-x(1))^2;
  3. grade=[ -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);  200*x(2)-200*x(1)^2];
  4. hessian=[1200*x(1)^2-400*x(2)+2,-400*x(1);-400*x(1),200];
  5. invhessian=inv(hessian);
  6. dk=-invhessian*grade;
  7. x=x+dk
  8. n=1;
  9. while(abs(norm(grade))>=1e-6)&(n<10000)
  10.    xnew=x
  11.    grade=[ -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);  200*x(2)-200*x(1)^2]
  12.    dk=-inv([1200*x(2)^2-400*x(2),-400*x(1);-400*x(1),200])*grade;
  13.    x=xnew+dk;
  14.     n=n+1
  15. end
  16. f=100*(x(2)-x(1)^2)^2+(1-x(1))^2
复制代码

回复
分享到:

使用道具 举报

 楼主| 发表于 2006-6-16 13:04 | 显示全部楼层
编得不怎样,希望高手能指点一下 
发表于 2006-6-19 16:35 | 显示全部楼层
你把原题目也发上来啊~,里面这么多数字~会不会是数字错了啊~
发表于 2006-6-19 18:54 | 显示全部楼层
能将原型说明白么,你想得到的结果又是什么呢?
发表于 2006-6-19 18:55 | 显示全部楼层
要不然无法对比分析阿
发表于 2006-6-19 20:51 | 显示全部楼层
最好是把算法和结果传上来。
 楼主| 发表于 2006-6-20 21:08 | 显示全部楼层
原题是求香蕉函数极小值f=100*(x(2)-x(1)^2)^2+(1-x(1))^2
初始点x0= [-1.2 1]'(上面写成了x=[-1.9,2]').   其最小值为x*=[1 1]',f(x*)=0
算法是利用x(k+1)=x(k)-grad(f(x))/hessian(f(x))直到梯度 gradef(x)<误差 停止迭代
发表于 2006-6-20 22:05 | 显示全部楼层
几条建议:
注意使用分号,不要给我刷屏;
   我想你可能想看每一步修正的结果(刚好结果是2*1矩阵,可以用2*n矩阵保存结果);
语句尽量简单如第一部分(循环之前有很多重复),xnew也是重复,这样给阅读带来不便;
对于norm他好象就有求模的最大值的意思;
 楼主| 发表于 2006-6-22 17:46 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-25 11:22 , Processed in 0.062468 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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