我正在尝试使用 python 进行参数估计,但有一些麻烦。
每当我改变初始值或边界时,参数的值就会改变。
我知道初始值和边界会影响参数值但波动太大。
而且预测值和真实值的差异也太大了。
你能告诉我我该怎么做吗?
from scipy.optimize import curve_fit
import numpy as np
E= np.array([(3.652,3.604,3.53,3.47,3.373,3.265,3.205,3.128,3.022,2.957,2.881,2.8,2.707,2.661,2.586,2.494),(0.728,0.727,0.725,0.724,0.722,0.719,0.718,0.717,0.715,0.714,0.712,0.711,0.709,0.708,0.707,0.706),(0.0029375,0.002895295,0.002851811,0.002809605,0.0027674,0.002723916,0.002681711,0.002639505,0.002596021,0.002553816,0.002511611,0.002468126,0.002425921,0.002383716,0.002340232,0.002298026)])
def func(E,a,b):
return (a*b*E[0,:]*E[1,:])/((1+b*E[1,:])**2)
guess= ([0.005,5])
popt, pcov = curve_fit(func, E[:2,:], E[2,:], guess, bounds=(0,[100,100]), maxfev=10000)
print(popt)
print(pcov)
#true values = [a : 0.0055 ± 0.00055, b : 5.52 ± 0.57]
#predicted values = [ a : 6.2364958e-02, b:1.0000000e+02]