微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fx= a * x的Gnuplot线性拟合

如何解决fx= a * x的Gnuplot线性拟合

我有以下数据集:

0 6
25 27 
91 25
160 21
190 32
335 28

如何绘制y=ax + 6形式的线性回归,以便线包含点(0,6)?我尝试了以下代码

f(x) = a*x +6
fit f(x) "data.txt" u 1:2 via a
plot "data.txt" u 1:2 w p pt 7,f(x) w l

较高点的距离之和大于较低点的距离(实际上,我们仅看到一个较低点:(335,28))。如何拟合f(x)以使距离之和相等?

plot

解决方法

使用gnuplot拟合是最小二乘拟合,即该算法将数据点与f(x)之间的差异的平方和最小化(选中help fit)。

相比之下,显然您正在寻找对数据点与f(x)之间的差求和并试图使总和为零的方法。不一样。

只要您的函数像a*x+b一样简单,就可以使用stats来计算直线的斜率。

代码:

### different ways of "fitting"
reset session

$Data <<EOD
0 6
25 27 
91 25
160 21
190 32
335 28
EOD

b = 6
f(x) = a0*x + b

# least square fit
set fit nolog quiet
fit f(x) $Data u 1:2 via a0

# make sum of difference to h(x) to zero
stats $Data u 1:2 nooutput
h(x) = a1*x + b
a1 = (STATS_sum_y - STATS_records*b)/STATS_sum_x

set key top left

plot $Data u 1:2 w p pt 7,\
     f(x) w l ti sprintf("Least square fit: f(x)=a0*x+b,a0=%g",a0),\
     h(x) w l ti sprintf("Sum of differences to zero: h(x)=a1*x+b,a1=%g",a1),\
     $Data u 1:2:(0):(h($1)-$2) w vectors lc "red" nohead ti "Differences to h(x)"
### end of code

结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。