scipy.optimize.newton()出现问题:“添加”对象不可调用

时间:2018-11-13 22:48:09

标签: python python-3.x scipy

我正在编写一个包含2个列表的函数,并创建一个多项式函数,稍后通过优化进行求解。

我正在尝试创建一个看起来像函数的字符串,使用sympy.sympify()将其转换为函数,然后将其传递给optimize.newton()

但是我一直认为TypeError "Add" object is not callable已经正确返回了一个函数,但它一直抛出sympify

我认为我缺少一些非常基本的东西,也许有一个函数可以将我的变量function0转换为scipy可以正确解释的函数类型?

def poly_build(coefficient_list, power_list):
    '''
    coefficient_list & power_list must be iterable objects of the same length, preferably a list
    '''
    if len (coefficient_list) != len(power_list):
        return False
    function = ""
    for n in range(0, len(coefficient_list)):
        if n != len(coefficient_list) - 1:
            function += f'{coefficient_list[n]}*x**{power_list[n]} +'
        else:
            function += f'{coefficient_list[n]}*x**{power_list[n]}'
    function0 = (sympy.sympify(function))
    function1 = sympy.diff(function0)
    function2 = sympy.diff(function1)

    return scipy.optimize.newton(function0, 1.5) 

1 个答案:

答案 0 :(得分:0)

sympy函数不是scipy.optimize.newton所期望的Python函数。转换:

pyfunction0 = sympy.lambdify(x, function0)