我有一个函数,我想用牛顿法求解。问题是收敛性取决于初始猜测。我想写一个if语句。如果函数收敛,那么存储变量,但如果不收敛,我想改变初始语句。初始语句将先验地存储在一个列表中。
for i in range(len(initial_guess)):
t_end = newton(self.ray_param_eq, initial_guess[i],
fprime=self.ray_param_eq_prime,
fprime2=self.ray_param_eq_second_prime,
args=(self.c, self.k, ray.z_0, ray.y_0, ray.theta, self.A, self.B),
maxiter=100, tol=1.48e-5, disp=False)
if t_end is not None: break
if t_end is None: continue
initil_guess =包含初始猜测变量的列表
上面的代码没有引发错误,但我不知道它是否有效。
2条答案
按热度按时间axkjgtzd1#
实际上,
scipy.optimize.newton()
提供了一种获得收敛性元素信息的方法(如评估迭代参数序列与容差水平tol
的差异)。将此代码片段作为最小可行示例
反过来,您可以通过以下方式利用聚合信息
对于带有标量参数
x
的函数f
(如上面的代码片段所示)或如果函数输入
x
是可迭代对象(元组、列表、NumPy数组等)h4cxqtbf2#
除非你的迭代遇到了灾难性的数值不稳定性,或者你接近一个重根,否则收敛在某个点上是“爆炸性的”,所以你可以检查迭代是否稳定到浮点表示的最后一位(少量ULP)。