为了账号安全,请及时绑定邮箱和手机立即绑定

如何判断牛顿法是否失败

如何判断牛顿法是否失败

侃侃无极 2021-06-10 18:01:29
我正在为一个无约束优化问题创建一个基本的牛顿法算法,我的算法结果不是我所期望的。这是一个简单的目标函数,因此很明显该算法应该收敛于 (1,1)。我之前创建的梯度下降算法证实了这一点,这里:def grad_descent(x, t, count, magnitude):    xvalues.append(x)    gradvalues.append(np.array([dfx1(x), dfx2(x)]))    fvalues.append(f(x))       temp=x-t*dfx(x)    x = temp    magnitude = mag(dfx(x))        count+=1    return xvalues, gradvalues, fvalues, count我为牛顿法创建算法的尝试在这里:def newton(x, t, count, magnitude):  xvalues=[]  gradvalues=[]  fvalues=[]  temp=x-f(x)/dfx(x)  while count < 10:    xvalues.append(x)    gradvalues.append(dfx(x))    fvalues.append(f(x))      temp=x-t*f(x)/dfx(x)    x = temp    magnitude = mag(dfx(x))        count+=1    if count > 100:      break  return xvalues, gradvalues, fvalues, count这是目标函数和梯度函数:f = lambda x: 100*np.square(x[1]-np.square(x[0])) + np.square((1-x[0]))dfx = lambda x: np.array([-400*x[0]*x[1]+400*np.power(x[0],3)+2*x[0]-2, 200*(x[1]-np.square(x[0]))])这里是初始条件。请注意,在牛顿法中不使用 alpha 和 beta。x0, t0, alpha, beta, count = np.array([-1.1, 1.1]), 1, .15, .7, 1magnitude = mag(np.array([dfx1(x0), dfx2(x0)]))调用函数:xvalues, gradvalues, fvalues, iterations = newton(x0, t0, count, magnitude)这是因为初始猜测与最佳点非常接近,还是我的算法中存在一些我没有发现的错误?任何建议将不胜感激。看起来解甚至可能是振荡的,但很难说
查看完整描述

3 回答

?
慕的地10843

TA贡献1785条经验 获得超8个赞

我现在确定 python 代码有问题。我决定在 Matlab 中实现该算法,它似乎工作正常。这是代码:


clear; clc;

x=[-1.1, 1.1]';

t=1;

count=1;


xvalues=[];


temp = x - inv([(-400*x(2)+1200*x(1)^2+2), -400*x(1); -400*x(1), 200]);

disp(x-inv([(-400*x(2)+1200*x(1)^2+2), -400*x(1); -400*x(1), 200])*[-400*x(1)*x(2)+400*x(1)^3+2*x(1)-2; 200*(x(2)-x(1)^2)])


while count<10

    xvalues(count,:)= x;

    temp = x - inv([(-400*x(2)+1200*x(1)^2+2), -400*x(1); -400*x(1), 200]) * [-400*x(1)*x(2)+400*x(1)^3+2*x(1)-2; 200*(x(2)-x(1)^2)];    

    x = temp;

    count = count+1;

end


disp(xvalues)

输出:


-1.1000    1.1000

   -1.0087    1.0091

   -0.2556   -0.5018

   -0.2446    0.0597

    0.9707   -0.5348

    0.9708    0.9425

    1.0000    0.9991

    1.0000    1.0000

    1.0000    1.0000


查看完整回答
反对 回复 2021-06-15
  • 3 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号