Python:numpy.ndarray对象不可调用根查找函数错误

Python:numpy.ndarray对象不可调用根查找函数错误,python,Python,我一直在试图找出如何使用Python查找根。如果我正确理解了文档,scipy.optimize.newton(f,x_o)可以用来寻找根,f是一个函数,x_o是根的初始猜测 我正在使用的函数都是多项式,而且对于我曾经使用Python(插值和直线拟合)的目的来说,用系数数组表示多项式总是足够的。以这种方式定义f会给我一个numpy.ndarray错误,我假设这是因为我将f作为一个数组,而牛顿(f,x_o)期望f有一个函数 我对Python非常缺乏经验,当我遇到这个问题时,我意识到我实际上不知道如何

我一直在试图找出如何使用Python查找根。如果我正确理解了文档,scipy.optimize.newton(f,x_o)可以用来寻找根,f是一个函数,x_o是根的初始猜测

我正在使用的函数都是多项式,而且对于我曾经使用Python(插值和直线拟合)的目的来说,用系数数组表示多项式总是足够的。以这种方式定义f会给我一个numpy.ndarray错误,我假设这是因为我将f作为一个数组,而牛顿(f,x_o)期望f有一个函数


我对Python非常缺乏经验,当我遇到这个问题时,我意识到我实际上不知道如何定义一般的f,而不必定义另一个将其限制在某个区间的变量。对于一些任意多项式,例如f=2x^2+7,有没有一种方法可以定义f而不必给出x的区间?通常我也习惯于定义x=arange(n)或类似的东西,将其限制在一个区间内

你说得对,错误是因为
f
的形式。如果您查看牛顿函数的scipy文档(此处),您会发现必须提供一个函数
f(x,a,b,c)
,其中
a,b,c
作为参数

如果你提供了一个函数

def f(x, a, b, c):
    return a*x**2 + b*x + c
然后调用牛顿法,如下所示:

root = scipy.optimize.newton(f, x0, args=(a, b, c))
变量
root
将包含函数根的大致位置。当然,在调用方法之前,您必须提供参数
a、b、c
的值


希望能有帮助。干杯。

你可以简单地用你的系数数组做一个可调用的。我从来都不知道这个。谢谢,这很好用。也许使用多项式根函数会更省事。你如何避免不通过这种方法定义x?这也是我最初的想法,但我无法回避不定义x的问题。我试着定义f(x)(我只是选择了func=cosh(x)),然后就像你调用牛顿方法一样,但它给了我一个错误,告诉我x没有定义。嗯。。。我使用了scipy.optimize.minimize。在这里,您只需调用函数
f
,不带参数,如上所述。通常,scipy引擎应注意函数
f
中的值
x
。我只知道这么多…嗯。尝试scipy.optimize.root会在定义x时遇到同样的问题。我喜欢你的想法,因为它让我使用的函数不是多项式,但我似乎无法绕过x值。我将看看是否可以找到一个替代函数来避免必须定义x。为了完成:如何调用根函数
scipy.optimize.root(f,x0,args=(a,b,c))
应该是正确的方法。即使您的函数定义为
f(x,a,b,c)
,也只需在根函数中使用其名称即可调用它。