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

Gnuplot线性拟合异常求助:拟合结果与预期正交

Gnuplot线性拟合结果与预期正交的解决办法

看起来你遇到的问题核心是Gnuplot的xyerrors拟合默认采用正交距离拟合(Total Least Squares),而你预期的是普通最小二乘拟合(Ordinary Least Squares,仅最小化y方向误差)——这就是为什么拟合线看起来和你想要的呈正交状态,而LibreOffice默认用的是后者,所以结果符合预期。

问题拆解

  • 当你使用xyerrors选项时,Gnuplot会同时考虑x和y方向的误差,拟合的是数据点到直线的垂直距离,最终得到的是一条兼顾x、y误差的“最优”正交拟合线。
  • 而普通最小二乘拟合只聚焦y方向的误差,拟合的是y对x的回归(最小化数据点到直线的竖直距离),这正是你在LibreOffice里得到的符合预期的结果。

解决方案

根据你的需求,有两种针对性处理方式:

1. 忽略x误差,采用普通最小二乘拟合(适合x误差远小于y误差的场景)

如果你的x轴误差可以忽略,或者相比y轴误差小很多,直接去掉xyerrors,改用yerrors选项,只拟合y对x的回归:

set fit errorvariables
f(x)=a*x+b
# 只使用x、y、y误差列(假设第3列是x误差,第4列是y误差)
fit f(x) 'Data1f.txt' using 1:2:4 yerrors via a,b
g(x)=c*x+d
fit g(x) 'Data2f.txt' using 1:2:4 yerrors via c,d

# 后续绘图命令保持不变
set xlabel 'U_G [V]'
set ylabel '{/Symbol=\326}(U_{Ph}-U_0) [{/Symbol=\326}U]'
set xrange [0:0.9]
set yrange [0:4.5]
set grid
plot 'Data1.txt' using 1:2:3:4 w xyerrorbars title 'Measurement 1', f(x) title 'f(x)', 'Data2.txt' using 1:2:3:4 w xyerrorbars title 'Measurement 2', g(x) title 'g(x)'

2. 考虑x和y误差,同时实现y对x的回归(适合需要保留x误差权重的场景)

如果必须考虑x的误差影响,可以通过加权最小二乘来实现。思路是把x的误差转化为拟合的权重,给x误差大的数据点赋予更低的权重:

set fit errorvariables
f(x)=a*x+b
# 使用weight选项,权重为1/(x误差的平方)
fit f(x) 'Data1f.txt' using 1:2:4:(1/$3**2) yerrors weight via a,b
g(x)=c*x+d
fit g(x) 'Data2f.txt' using 1:2:4:(1/$3**2) yerrors weight via c,d

# 绘图命令不变

这种方法既保留了对x误差的考量,又能得到接近你预期的回归拟合线。

3. 快速排查:确认数据列顺序

虽然你说LibreOffice拟合正常,但还是可以快速核对一下数据文件的列顺序:第1列是x(U_G)、第2列是y(Δ(U_Ph-U0))、第3列是x误差、第4列是y误差,确保没有搞反x和y列导致的方向错误。

验证方法

修改后重新运行拟合脚本,你应该会得到和LibreOffice一致的拟合线,同时还能保留Gnuplot处理误差棒和输出误差变量的功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:23:59