哪位帮忙看下这个程序(牛顿法求极值)
这个程序能运行,但结果不对,不知道问题在哪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
编得不怎样,希望高手能指点一下 你把原题目也发上来啊~,里面这么多数字~会不会是数字错了啊~ 能将原型说明白么,你想得到的结果又是什么呢? 要不然无法对比分析阿 最好是把算法和结果传上来。 原题是求香蕉函数极小值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)<误差 停止迭代 几条建议:
注意使用分号,不要给我刷屏;
我想你可能想看每一步修正的结果(刚好结果是2*1矩阵,可以用2*n矩阵保存结果);
语句尽量简单如第一部分(循环之前有很多重复),xnew也是重复,这样给阅读带来不便;
对于norm他好象就有求模的最大值的意思; 谢谢
页:
[1]