Проблема с scipy.optimize.newton (): объект «Добавить» не вызывается - PullRequest
0 голосов
/ 14 ноября 2018

Я пишу функцию, которая берет 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 голосов
/ 14 ноября 2018

Функция sympy не является функцией Python, поскольку scipy.optimize.newton ожидает этого.Чтобы преобразовать:

pyfunction0 = sympy.lambdify(x, function0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...