Scipy 优化牛顿正割法
Scipy optimize newton secant method
Scipy optimize.newton 的初始步长硬编码为 1e-4。使用具有不同步长(理想情况下,指定为参数)的此函数的最佳方法是什么?
# https://github.com/scipy/scipy/blob/v0.19.0/scipy/optimize/zeros.py#L160
else:
# Secant method
p0 = x0
if x0 >= 0:
p1 = x0*(1 + 1e-4) + 1e-4
初始步长不是1e-4
,而是abs(x0)*1e-4 + 1e-4
。例如,x0 = 1000 将导致初始步长为 0.1001。
如果目标是具有一定的初始步长 h
,可以通过变量的线性变化来实现,x = x0 + 1e4*h*t
其中 t
是新变量。根据 t
,起点是 0。因此牛顿法将进行大小为 1e-4 的步长,根据 x
转换为 h
。
示例:
root = newton(lambda t: func(x0 + 1e4*h*t), 0) * 1e4 * h + x0
其中 func
是原始函数。这 returns 原始变量 x 的根。
Scipy optimize.newton 的初始步长硬编码为 1e-4。使用具有不同步长(理想情况下,指定为参数)的此函数的最佳方法是什么?
# https://github.com/scipy/scipy/blob/v0.19.0/scipy/optimize/zeros.py#L160
else:
# Secant method
p0 = x0
if x0 >= 0:
p1 = x0*(1 + 1e-4) + 1e-4
初始步长不是1e-4
,而是abs(x0)*1e-4 + 1e-4
。例如,x0 = 1000 将导致初始步长为 0.1001。
如果目标是具有一定的初始步长 h
,可以通过变量的线性变化来实现,x = x0 + 1e4*h*t
其中 t
是新变量。根据 t
,起点是 0。因此牛顿法将进行大小为 1e-4 的步长,根据 x
转换为 h
。
示例:
root = newton(lambda t: func(x0 + 1e4*h*t), 0) * 1e4 * h + x0
其中 func
是原始函数。这 returns 原始变量 x 的根。