1

我使用我的C程序运行了一个实验。我一直在使用 GNU plot 绘制直方图/图表来分析数据。下面的代码获取我文件中的数据并创建一个名为“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

尝试使用“关闭”参数值将数据拟合到函数中。但是一旦迭代完成,它仍然给我 q = 1.16116 和 s = m = 100,这与我之前的 q = 1.6 并没有什么不同。

这里有什么问题吗?为什么拟合函数找不到更接近的拟合?

下图显示了适合我的数据的函数(绿色)。但我仍然想要更准确的拟合。

在此处输入图像描述

4

1 回答 1

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 演示以获取有关加权的示例。

于 2013-08-05T18:29:29.107 回答