You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gnuplot中拟合Lennard-Jones势数据?参数不符求助

Gnuplot拟合Lennard-Jones势参数问题

问题背景

现有以下数据集,需要拟合至Lennard-Jones势公式:

1    20.6711
1.1  12.8327
1.2  6.70081
1.3  2.56984
1.4  -0.0348628
1.5  -1.50733
1.6  -2.21619
1.7  -2.41084
1.8  -2.29524
1.9  -2.02128
2    -1.76153
2.1  -1.47329
2.2  -1.21735
2.3  -0.986853
2.4  -0.786588
2.5  -0.602345
2.6  -0.442397
2.7  -0.314293
2.8  -0.208958
2.9  -0.121526
3    -0.16448
4    -0.0488864
5    0
6    0.0207913
7    0.0275973
8    0.186272
9    0.0402228
10   0.0421324

使用以下Gnuplot代码拟合后,得到的sigma和epsilon参数与预期值(epsilon=2.43,sigma=1.39)不符:

f(x) = (4*epsilon) * ( (sigma/(x))**12 - (sigma/(x))**6  )
set fit brief nolog
fit f(x) "data" u 1:2 via sigma,epsilon
plot f(x) lw 3 lc "blue"

修正方案

1. 给拟合参数设置初始值

Gnuplot的非线性拟合对初始参数猜测高度敏感,默认从0开始迭代容易收敛到局部最优解。直接用预期值附近的数值作为初始点,引导拟合器找到正确的全局最优:

# 设置初始参数,贴近预期值
sigma = 1.39
epsilon = 2.43

2. 筛选异常数据点

观察数据集可知,x=8的数值0.186272明显偏离Lennard-Jones势的趋势(正常情况下x增大时势能应趋近于0),属于异常点,拟合时排除这类干扰点:

# 只拟合x=1到7的数据点(前23行)
fit f(x) "data" u 1:2 every ::0::22 via sigma,epsilon

3. 调整拟合选项确保收敛

增加最大迭代次数,避免因迭代次数不足导致拟合不收敛;开启详细输出可监控拟合过程:

set fit maxiter 1000
set fit verbose

完整修正代码

# 设置初始参数
sigma = 1.39
epsilon = 2.43

# 定义Lennard-Jones势公式
f(x) = 4*epsilon * ( (sigma/x)**12 - (sigma/x)**6 )

# 配置拟合选项
set fit maxiter 1000
set fit verbose

# 拟合筛选后的数据
fit f(x) "data" u 1:2 every ::0::22 via sigma,epsilon

# 绘制拟合曲线与原始数据对比
plot "data" u 1:2 pt 7 ps 0.8 title "原始数据", \
     f(x) lw 3 lc "blue" title "拟合曲线"

可选优化:加权拟合

对于Lennard-Jones势,x较小时势能变化幅度大,这些点对参数估计的贡献更重要,可以通过加权拟合强化这类点的权重,削弱噪音点的影响:

# 用势能绝对值的倒数作为权重,数值波动大的点权重更高
fit f(x) "data" u 1:2:(1/abs($2)) via sigma,epsilon

内容的提问来源于stack exchange,提问作者supertramp182

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 18:50:54