【问题标题】:How can I successfully fit data to a Morse potential with scipy.optimize.curve_fit?如何使用 scipy.optimize.curve_fit 成功地将数据拟合到莫尔斯势?
【发布时间】:2021-11-18 02:43:35
【问题描述】:

我有一个距离与能量的列表,我正在尝试使用 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 = param

scipy 说它无法估计协方差,并且拟合会产生完全荒谬的输出,例如 D

【问题讨论】:

  • 检查您的建模假设。 energies 中的值都是 -1428 附近的负值,但定义为 morsePotential 的函数永远不会是负数,因此您的方法存在根本问题。

标签: scipy curve-fitting


【解决方案1】:

正如 Warren Weckesser 已经指出的那样,函数 y(r) = D * (1 - np.exp(-alpha * (r - r0)))**2 不方便将其正确拟合到给定数据.

当然,最好的方法是从物理方面的考虑找到更好的模型。另一方面,下面提出的函数仅来自数学调整。这是次优的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 1970-01-01
    • 2014-09-18
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多