如何提取scipy.optimize.newton()结果中的converged布尔值
使用scipy.optimize.newton()判断迭代收敛状态的问题
我用scipy.optimize.newton()求解函数的根,由于函数十分复杂,设置了固定迭代次数——即使未达到要求精度也保留最终结果,因此需要一个单独的布尔变量来判断迭代是否收敛。
问题在于,当开启full_output=True时,newton()返回的第二个元素是包含多个属性的对象,我无法直接提取其中的converged属性值。
测试代码如下:
from scipy.optimize import newton def function(x): return x**2-1 def fprime(x): return 2*x x0=5 test = newton(function, x0, fprime=None, args=(), tol=1.48e-08, maxiter=5, fprime2=None, x1=None, rtol=0.0, full_output=True, disp=False) print(test[1])
运行后输出:
converged: False flag: 'convergence error' function_calls: 7 iterations: 5 root: 1.0103336911991998
我希望得到仅包含False(如本示例)的单个布尔变量。
解决方法
直接通过属性访问的方式即可提取converged值,修改后的代码如下:
# 从返回的结果对象中提取收敛状态 is_converged = test[1].converged print(is_converged) # 输出: False
newton()返回的第二个元素是OptimizeResult对象,它的所有属性都可以通过.运算符直接访问,除了converged,你也可以用同样方式获取iterations、flag等其他属性。
内容的提问来源于stack exchange,提问作者Reflets de Lune
相关产品推荐
相关产品推荐

