如何在Gnuplot中拟合数据集至Lennard-Jones势
如何在Gnuplot中正确拟合Lennard-Jones势到给定数据集
问题核心原因
你的拟合效果不佳主要源于两个关键问题:
- 标准Lennard-Jones势默认势能在$r\rightarrow\infty$时趋近于0,但你的数据集势能趋近于**-458.7左右的常数基准值**,缺少平移常数项会导致拟合严重偏差。
- 未给拟合参数设置初始值,Gnuplot的拟合算法容易收敛到局部最优解,而非全局最优。
修正后的拟合方案与代码
1. 修正拟合函数
加入平移常数项$C$,匹配你的数据特征,完整函数为:
f(x) = 4*epsilon * ( (sigma/x)**12 - (sigma/x)**6 ) + C
其中$C$对应$r\rightarrow\infty$时的势能基准值,解决了标准势与数据基准不匹配的问题。
2. 设置参数初始值
根据数据特征给出合理初始值,帮助拟合快速收敛:
sigma:对应势能最小值的位置,数据中$x=1.7$时势能最低,初始值设为1.7epsilon:势阱深度,数据最小值(-461.2)与渐近值(-458.7)的差约为2.5,因此$4\epsilon≈2.5$,初始值设为0.6C:渐近势能值,初始值设为-458.7
3. 完整拟合与绘图代码
# 定义带平移项的Lennard-Jones势 f(x) = 4*epsilon * ( (sigma/x)**12 - (sigma/x)**6 ) + C # 设置参数初始值 sigma = 1.7 epsilon = 0.6 C = -458.7 # 执行拟合,可选排除异常点(如x=8的数据明显偏离趋势) fit f(x) 'data.dat' using 1:2 if $1 != 8 via sigma, epsilon, C # 绘制原始数据与拟合曲线对比 plot 'data.dat' using 1:2 pt 7 lc "red" title "原始数据", \ f(x) lw 3 lc "blue" title "Lennard-Jones拟合曲线"
拟合结果说明
执行上述代码后,会得到高度贴合的拟合结果:
sigma最终值接近1.7(对应势能最低点)epsilon最终值约为0.6,$4\epsilon≈2.4$,准确对应势阱深度C最终值接近-458.7,匹配无穷远处的势能基准
额外优化建议
- 若数据中存在明显异常点(如x=8),务必排除,避免干扰拟合精度
- 可通过
set fit quiet关闭拟合过程的冗余输出,或set fit logfile 'fit.log'将拟合日志保存到文件
内容的提问来源于stack exchange,提问作者supertramp182
相关产品推荐
相关产品推荐

