具有以下功能:
f(x) = x * cos(x-4)
使用x = [-2.5, 2.5]时,此函数在0f(0) = 0处交叉。
这是用以下代码确定的:

import math
from scipy.optimize import fsolve
def func(x):
    return x*math.cos(x-4)
x0 = fsolve(func, 0.0)
# returns [0.]
x0 = fsolve(func, -0.75)
# returns [-0.71238898]

使用f(-0.71238898) = 0(或任何其他python根查找工具)在一个调用中查找两个根的正确方法是什么?是否有不同的fzero函数执行此操作?
scipy reference

最佳答案

定义函数,以便它可以接受标量或numpy数组作为参数:

>>> import numpy as np
>>> f = lambda x : x * np.cos(x-4)

然后将参数向量传递给fsolve
>>> x = np.array([0.0, -0.75])
>>> fsolve(f,x)
array([ 0.        , -0.71238898])

10-08 00:47