Я пытаюсь подогнать дифференциальное уравнение ay '+ by' '= 0 к кривой, изменяя a и b. Следующий код не работает. Проблема с curve_fit, похоже, заключается в том, что отсутствие первоначальной догадки приводит к неудаче при подгонке. Я также попробовал наименьшее количество. Может ли кто-нибудь предложить мне другие способы подбора такого дифференциального уравнения? Если у меня нет правильного предположения, то получится, что Curve_fit не удастся!
from scipy.integrate import odeint
from scipy.optimize import curve_fit
from numpy import linspace, random, array
time = linspace(0.0,10.0,100)
def deriv(time,a,b):
dy=lambda y,t : array([ y[1], a*y[0]+b*y[1] ])
yinit = array([0.0005,0.2]) # initial values
Y=odeint(dy,yinit,time)
return Y[:,0]
z = deriv(time, 2, 0.1)
zn = z + 0.1*random.normal(size=len(time))
popt, pcov = curve_fit(deriv, time, zn)
print popt # it only outputs the initial values of a, b!