У меня есть изменяемая во времени трассировка данных, к которой я хочу приспособить функцию. Входными данными для функций являются списки, и я хочу, чтобы curve_fit оптимизировал все значения в списке, чтобы соответствовать кривой. Я дошел до сих пор -
from scipy.optimize import curve_fit
from matplotlib.pylab import plt
from numpy import exp
def ffunc2(x, a, b):
counter = 0
return_value = 0
while counter < len(a):
return_value += a[counter] * exp(b[counter] * x)
counter += 1
return return_value
# INITIAL DATA
x = [1, 2, 3, 5]
y = [1, 8, 81, 125]
number_variable = 2
# INTIAL GUESS
p0 = []
counter = 0
while counter < number_variable:
p0.append(0.0)
counter += 1
p, _ = curve_fit(ffunc2, x, y, p0=[0.0, 0.0])
Я хочу создать al oop, который повторяется так, что он дает мне наилучшее соответствие с максимальным количеством переменных путем минимизации ошибки.
Я также нашел это обсуждение - Использование scipy curve_fit для переменного числа параметров
from numpy import exp
from scipy.optimize import curve_fit
def wrapper_fit_func(x, N, *args):
a, b, c = list(args[0][:N]), list(args[0][N:2*N]), list(args[0][2*N:3*N])
return fit_func(x, a, b)
def fit_func(x, a, b):
counter = 0
return_value = 0
while counter < len(a):
return_value += a[counter] * exp(b[counter] * x)
counter += 1
return return_value
x = [1, 2, 3, 5]
y = [1, 8, 81, 125]
params_0 = [0,1.0,2.0,3.0,4.0,5.0]
popt, pcov = curve_fit(lambda x, *params_0: wrapper_fit_func(x, 3, params_0), x, y, p0=params_0)
Но получите сообщение об ошибке --´´´ File 'C: \ python \ lib \ site-packages \ scipy \ optimize \ minpack.py ", строка 387, в leastsq повышение TypeError ('Неправильный ввод: N =% s не должно превышать M =% s'% (n, m) ) TypeError: Неправильный ввод: N = 6 не должно превышать M = 4 ´´´