我使用我的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 并没有什么不同。
这里有什么问题吗?为什么拟合函数找不到更接近的拟合?
下图显示了适合我的数据的函数(绿色)。但我仍然想要更准确的拟合。