我有一个距离与能量的列表,我正试着用scipy.optimize.curve_fit将其拟合为摩尔斯电势。数据为:
距离: 0.7,0.78,0.86,0.94,1.02,1.1,1.18,1.26
能量:-1428.03995379,-1428.13375727,-1428.18294153,-1428.20472839,-1428.20977469,-1428.2047732,-1428.19393863,-1428.17996123
摩尔斯电势是:
def morsePotential(r, D, alpha, r0):
return D * (1 - np.exp(-alpha * (r - r0)))**2当我这样做的时候
param, cv = curve_fit(morsePotential, distances, energies, np.array([0.005, 10, 1.0]))
D, alpha, r0 = paramscipy表示,它无法估计协方差,拟合会产生完全荒谬的输出,例如D << 0,这对此势没有任何意义,其中D是能量井的深度。我也很难将这些数据拟合到谐波电位,这甚至更令人担忧。我如何才能将curve_fit推向正确的方向?现在,它要么返回无意义的值,要么完全失败。
发布于 2021-09-25 15:54:27
正如Warren Weckesser已经指出的,函数y (r ) =D* (1 - np.exp(-alpha *(r-r0)**2对于正确拟合给定的数据并不方便。
当然,最好的方法是从物理上考虑找到一个更好的模型。另一方面,下面提出的函数仅来自数学调整。这是第二个最佳的解决方案。

https://stackoverflow.com/questions/69321374
复制相似问题