nvwu 发表于 2006-6-16 09:43

哪位帮忙看下这个程序(牛顿法求极值)

这个程序能运行,但结果不对,不知道问题在哪
x=[-1.9,2]'
f=100* (x(2)-x(1)^2)^2+(1-x(1))^2;
grade=[ -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);200*x(2)-200*x(1)^2];
hessian=;
invhessian=inv(hessian);
dk=-invhessian*grade;
x=x+dk
n=1;
while(abs(norm(grade))>=1e-6)&(n<10000)
   xnew=x
   grade=[ -400*(x(2)-x(1)^2)*x(1)-2+2*x(1);200*x(2)-200*x(1)^2]
   dk=-inv()*grade;
   x=xnew+dk;
    n=n+1
end
f=100*(x(2)-x(1)^2)^2+(1-x(1))^2

nvwu 发表于 2006-6-16 13:04

编得不怎样,希望高手能指点一下 

xiejin17 发表于 2006-6-19 16:35

你把原题目也发上来啊~,里面这么多数字~会不会是数字错了啊~

xuebx 发表于 2006-6-19 18:54

能将原型说明白么,你想得到的结果又是什么呢?

xuebx 发表于 2006-6-19 18:55

要不然无法对比分析阿

wei343 发表于 2006-6-19 20:51

最好是把算法和结果传上来。

nvwu 发表于 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*=',f(x*)=0
算法是利用x(k+1)=x(k)-grad(f(x))/hessian(f(x))直到梯度 gradef(x)<误差 停止迭代

branch 发表于 2006-6-20 22:05

几条建议:
注意使用分号,不要给我刷屏;
   我想你可能想看每一步修正的结果(刚好结果是2*1矩阵,可以用2*n矩阵保存结果);
语句尽量简单如第一部分(循环之前有很多重复),xnew也是重复,这样给阅读带来不便;
对于norm他好象就有求模的最大值的意思;

nvwu 发表于 2006-6-22 17:46

谢谢
页: [1]
查看完整版本: 哪位帮忙看下这个程序(牛顿法求极值)