您可以使用curve_fit
,这会给出相同的结果:
import scipy.optimize as optimization
import numpy as np
y = np.array([120, 125, 158, 300, 350, 390, 2800, 5900, 7790])
t = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
start = np.array([17933, 0.01, 0.31])
def f(t,a,b,c):
num = a*(np.exp(-t*(b+c))*np.power(b+c, 2)/b)
denom = np.power(1+(c/b)*np.exp(-t*(b+c)), 2)
return num/denom
print(optimization.curve_fit(f, t, y, start))
#(array([ 2.50111448e+04, 1.89129922e-05, 1.25426156e+00]), array([[ 4.12657233e+06, 2.58151776e-02, -2.00881091e+02],
# [ 2.58151776e-02, 1.91318685e-10, -1.44733425e-06],
# [ -2.00881091e+02, -1.44733425e-06, 1.10654268e-02]]))