我正在编写一个代码,该代码需要一些数据,并使用具有5个未知参数的模型拟合数据。
我给出了这些参数的一些初始值。我使用optimize.minimize函数将数据和模型(chi ^ 2函数)之间的差异最小化,以获得这些参数的最佳拟合值。
我在Jupyter笔记本和python脚本中运行代码。但是,结果不同。 Jupyter笔记本电脑更贴合身体。在python脚本中,拟合度不是很好,未知参数的结果值与初始值似乎没有太大变化(某些参数保持不变)
我尝试查看了Jupyter(0.19.1)和python(0.18.0)中安装的optimize.minimize函数的两个不同版本的文档。
我检查了参数的值,但是两个函数的值都相同(都是由我自己设置的,并且是默认值)。
可能性函数:
def ds_lnlike(par, logm, d, d_err):
logms, ds1, ds2, a1, a2 = par
model= np.log(10)*(ds1*10**((a1 + 1)*(logm - logms)) + ds2*10**((a2 +1)*(logm - logms)))/np.e**(10**(logm - logms))
return -0.5*np.sum(((d-model)**2)/d_err**2)
optimize.minimize:
nll = lambda *args: -model.ds_lnlike(*args)
result = op.minimize(nll, [logms[j], ds1[j], ds2[j], a1[j], a2[j]], args=(x, y, dy), method='TNC', bounds = ((7,13),(0, 0.1),(0, 0.1), (-2, 4), (-2, -1)), tol=1.0e-4)
logms[j], ds1[j], ds2[j], a1[j], a2[j] = result["x"]
初始值:10.7 1.0e-3 0.5e-3 -0.5 -1.5
Jupyter值:1.07708741e+01, 6.59697230e-03, 9.48211306e-04, -3.37329546e-01, -1.57843904e+00
python值:10.699999999999999, 0.0062248066587528919, 0.0012695745516126539, -0.5, -1.5