Gnuplot拟合函数 - 拟合q指数

时间:2013-08-05 16:23:15

标签: c gnuplot curve-fitting data-fitting

我使用 C 程序进行了一项实验。我一直在使用GNU图来绘制直方图/图表来分析数据。 下面的代码获取我文件中的数据,并创建一个名为'tableavalanchesizeGSA'的文件,其中包含用于绘制数据直方图的信息 - 即此表格中的数据是分箱的,以及每个箱子的频率。然后我记录频率的日志并根据分箱数据绘制它。 (简单地说它只是频率的对数与分箱的原始数据)。

#Gnuplot commands for avalanche size GSA Log plot (axes as Log of freq/totaltrials):
 reset
 set xlabel 'Avalanche size'
 set ylabel 'Log of Frequency'
 set title "Avalanche Size with GSA"
 set table 'tableavalanchesizeGSA'
 #bw is the binwidth for the histogram
  bw = 50.0
  bin(x,s)=s*int(x/s)
  plot 'avalanche_size_GSA_n_trials_2048000.dat' using (bin($1,bw)+bw/2.0):(1.0/2048000)        smooth frequency with points
  unset table
  set logscale y
  plot 'tableavalanchesizeGSA' with points title 'Frequency of Avalanche size with 2048000 trials using 1.0/2048000'

现在我正在努力使我的数据符合以下功能:

Q(x)=(1+(1-q)*((s+x)/m))**(1/(1-q))

其中q,s和m是我的参数。我通过在同一个绘图上绘制我的日志图和这个函数来玩一下,并且知道q = 1.16,m = s = 100是好的值/有点适合数据但不完全适合。所以我将以下内容添加到我的代码中:

  q = 1.16
  s = 100
  m = 100
  Q(x)=(1+(1-q)*((s+x)/m))**(1/(1-q))
  fit Q(x) 'tableavalanchesizeGSA' via s, m, q

尝试使用'close'参数值将数据拟合到函数中。但是一旦完成迭代,它就会给我q = 1.16116并且s = m = 100仍然存在,这与我之前使用q = 1.6时没有任何不同。

这里有什么不对吗?为什么拟合功能不能更贴合?

下图显示了适合我数据的功能(绿色)。但我仍然希望更准确。

enter image description here

1 个答案:

答案 0 :(得分:1)

我想通过“更贴合”你的意思是较低的雪崩尺寸(你有更高的频率)的值应该更接近拟合函数。您可能希望为拟合添加权重,因为较高频率的值应具有更高的保真度。考虑代码

q = 1.16
s = 100
m = 100
Q(x)=(1+(1-q)*((s+x)/m))**(1/(1-q))
fit Q(x) 'tableavalanchesizeGSA' using 1:2:(1/sqrt($2)) via s, m, q

这里,using语句的第三列被认为是第二列中值的标准偏差(参见gnuplot文档)。这应该可以让您更好地适应,但您可能需要使用正确的标准偏差。

有关加权的示例,另请参阅gnuplot fit demos