Это мой первый пост о переполнении стека, поэтому, пожалуйста, наберитесь терпения, если какая-либо информация отсутствует.
Я пытаюсь согласовать функцию с помощью данных, используя Python 2.7.15 (ubuntu 18.04) с scipy.optimize.curve_fit ().Эта функция подбора состоит из суммы переменного числа экспонент с соответствующими параметрами, которые передаются через параметр * args моей функции подбора.
Я пробовал передавать векторы параметров в мою функцию подбора.К сожалению, кажется, что сумма экспонент, которую я выполняю с помощью цикла for, на самом деле интерпретируется как numpy.ndarray, где это должно быть одно значение, которое будет возвращено в алгоритм подбора.Ниже приведен (упрощенный) пример того, что я пробовал:
import numpy as np
import scipy
import math
from scipy import optimize
# Fitting function:
def fitFuncTau(amplitude, nFit, t, *args):
C0=args[0]
C=list(args[1:(nFit+1)])
tau=list(args[(nFit+1):(2*nFit+2)])
sumFit=0
for i in range(0, nFit):
sumFit+=C[i]*np.exp(-t/tau[i])
print sumFit
return C0+amplitude*sumFit
#Fitting Args: C0 parameter, then two lists C[] and tau[] (size Nfit)
fitArgs=[1, 0.01, 0.01, 0.1, 0.1]
nFit=2
amplitude=1
# Dummy fitting data
x=np.linspace(0, 4, 100)
np.random.seed(1729)
y=np.random.normal(size=x.size)
#Fit
wrapFunc=lambda t, *args: fitFuncTau(amplitude, nFit, t, *args)
fit_opt, fit_cov = scipy.optimize.curve_fit(wrapFunc, x, y, p0=fitArgs)
Любая помощь будет высоко ценится!