用牛顿切线法求函数最小值python实例

算法:

step1:对任意的x0\epsilon[a,b],\varepsilon>0,k:=0;

step2:计算^{}f^{'}(xk)f^{''}(xk);

step3:如果|f^{'}(xk)|<\varepsilon,则转step4;否则令x_{k+1}:=x_{k}-\frac{f^{'}(x_{k})}{f^{''}(x_{k})},k:=k+1,转step2;

step4:停,输出xk。

代码实例:

#求f = 2*x*x*x-12*x+9在-1,3的最小值
import numpy as np
#求一阶导
def jacobian(x):
    return 6*x*x-12
#求二阶导
def hessian(x):
    return 12*x
#求f(x)结果
def f(x):
    f = 2*x*x*x-12*x+9
    return f

epsilong = 0.001
i=0
imax=100
x1=np.zeros(10)
x0=1
x1[0]=x0
print("初始点为:",x1[0])
k=0

for i in range(0,imax):
    x1[i+1] = x1[i]-jacobian(x1[i])/hessian(x1[i])
    i=i+1
    k=k+1
    if abs(jacobian(x1[i-1]))> epsilong:
        print("第",i,"次迭代结果:",x1[i])
    else:
        break
#输出迭代结果序列
print(x1)
print("f(x*)= ",f(x1[i-1]))

运行结果:

初始点为: 1.0
第 1 次迭代结果: 1.5
第 2 次迭代结果: 1.4166666666666667
第 3 次迭代结果: 1.4142156862745099
[1.         1.5        1.41666667 1.41421569 1.41421356 0.
 0.         0.         0.         0.        ]
f(x*)=  -2.313708498946486
 

小小白第一次写,当笔记用的,也分享给大家!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值