我使用 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时没有任何不同。
这里有什么不对吗?为什么拟合功能不能更贴合?
下图显示了适合我数据的功能(绿色)。但我仍然希望更准确。
答案 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。