Объект как аргумент для fsolve

Я пытаюсь решить, что является эффективным нелинейным уравнением, содержащим сплайновый объект. Поскольку я хочу делать это много раз с разными данными, я не хочу создавать новую функцию для каждого набора данных, а создаю только одну функцию и передаю сплайн в качестве аргумента.

Данные на самом деле являются экспериментальными данными, к которым я подгоняю сплайн, и уравнение, которое я пытаюсь решить, довольно сложное, но для иллюстрации моей проблемы я использую простую синусоидальную функцию в приведенном ниже примере.

import numpy as np
from scipy import interpolate
from scipy.optimize import fsolve
import matplotlib.pyplot as plt

def equation(x0,func):
    return ( interpolate.splev(x0,func) - 1 )

x = np.arange(0,2*np.pi,1)
y = np.sin(x)
yy = interpolate.splrep(x,y)

x0 = 3
root = fsolve(equation,x0,yy)

Я получаю следующую ошибку:

TypeError: equation() takes exactly 2 arguments (4 given)

Как я могу это сделать? Любое предложение? Может быть, это невозможно сделать таким образом, и если да, то есть ли другое решение?


person Erik    schedule 10.07.2018    source источник
comment
это может помочь: stackoverflow.com/questions/19843116/   -  person Md. Tazbir Ur Rahman Bhuiyan    schedule 10.07.2018
comment
Третий аргумент fsolve должен быть кортежем (читайте документы). Вы хотите, чтобы yy интерпретировалось как таковое? Или, может быть, вам следует использовать args=(yy,).   -  person hpaulj    schedule 10.07.2018
comment
Вот еще один ответ на вопрос о той же проблеме: nu/31388592#31388592" title="передача аргументов в scipy, оптимизация минимизации целевой функции, получение ошибки на nu"> stackoverflow.com/questions/31388319/.   -  person Warren Weckesser    schedule 10.07.2018
comment
@hpaulj Спасибо!   -  person Erik    schedule 10.07.2018