Я пытаюсь решить, что является эффективным нелинейным уравнением, содержащим сплайновый объект. Поскольку я хочу делать это много раз с разными данными, я не хочу создавать новую функцию для каждого набора данных, а создаю только одну функцию и передаю сплайн в качестве аргумента.
Данные на самом деле являются экспериментальными данными, к которым я подгоняю сплайн, и уравнение, которое я пытаюсь решить, довольно сложное, но для иллюстрации моей проблемы я использую простую синусоидальную функцию в приведенном ниже примере.
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)
Как я могу это сделать? Любое предложение? Может быть, это невозможно сделать таким образом, и если да, то есть ли другое решение?
fsolve
должен быть кортежем (читайте документы). Вы хотите, чтобыyy
интерпретировалось как таковое? Или, может быть, вам следует использоватьargs=(yy,)
. - person hpaulj   schedule 10.07.2018