算法:
step1:对任意的x0[a,b],>0,k:=0;
step2:计算和;
step3:如果||<,则转step4;否则令,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
小小白第一次写,当笔记用的,也分享给大家!