绘图软件gnuplot(6)-利用fit函数进行数据拟合

经过前几节进行一些简单的2D绘图后,今天让我们来了解一下如何用gnuplot进行数据拟合,有时候我们需要对实验数据进行拟合去求得某些信息。万事从简单开始做起,先来讲讲线性拟合,用到的数据列于linearfit.dat文件中,如:

利用gnuplot作图可得(略过作图步骤,此处可以忽略,只是为了先让大家看看文件中的数据是怎么分布的):

线型A呈直线,对其进行线性拟合可输入如下命令:

> f(x)=a*x+b #定义一元一次函数f(x)

> fit f(x) "linearfit.dat" using 1:2 via a, b 利用fit函数对第一二列数据进行拟合,变量为a和b

按回车键后目录中为出现一个fit.log文件,而且终端也会显示出相关信息,包括变量a, b的值和误差,并没有发现R2的值,拟合结果为f(x)=2.00333x+0.986667,如:

那么,要如何得到R2的值呢,首先来推导一波,

忘记刚开始的拟合,重新输入以下命令可以得到R2,即COD系数(coefficient of determination), 如:

> mean(x)=yfit #yfit为拟合所得y值

> fit mean(x) 'linearfit.dat' u 1:2 via yfit

> A=FIT_WSSR #求总体方差

> f(x)=a*x+b

> fit f(x) 'linearfit.dat' u 1:2 via a, b

> B=FIT_WSSR #求残差平方和

> print "R^2=", 1-B/A #求R2

可得:a=2.00333, b=0.986667, R2的值为0.9992,与下图中的从excel拟合得来的方程和R2一致,完美。

如果你想在图中显示出方程以及R2的值,那就在之前的命令后面加上以下命令,即:

> plot a*x+b w line lw 2 title "A-fit", "linearfit.dat" using 1:2 w point pt 4 lc black lw 2 title "A"

> set label "f(x)=2.00333x+0.986667" at 5,14 #关键词label可以在图中加入字符串或文本

> set label "R^2=0.9992" at 5,13 #将字符串置于(5,13)处

> set key center at 1,16 #后面是对图例的例常美化

> set key reverse

> set key Left

> set key spacing 1.5

> set key samplen 4

可得:

线型B用二元二次函数来拟合,详细过程解释此处就不赘述了,如:

> mean(x)=yfit

> fit mean(x) 'linearfit.dat' u 1:3 via yfit

> A=FIT_WSSR

> f(x)=a*x**2+b*x+c

> fit f(x) 'linearfit.dat' u 1:3 via a, b, c

> B=FIT_WSSR

> print "R^2=", 1-B/A

> plot a*x**2+b*x+c w line lw 2 title "B-fit", "linearfit.dat" using 1:3 w point pt 4 lc black lw 2 title "B"

> set label "f(x)=1.02781x^2+2.76582x+1.06182" at 5,70

> set label "R^2=0.9999" at 5,60

> set key center at 1,80

> set key reverse

> set key Left

> set key spacing 1.5

> set key samplen 4

可得:

同样地,得到了与excel拟合同样的数据,完美+1。

好了,今天介绍到这。记得把模板保存下来哈,下次拟合就方便多了。下回预告:阶梯图的绘制。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180319G0PYWJ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券