我使用我的 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 时并没有什么不同。
这里有什么问题吗?为什么拟合函数找不到更接近的拟合?
下图显示了适合我的数据的函数(绿色)。但我仍然想要更准确的配合。
最佳答案
我猜“更接近拟合”是指较低雪崩尺寸(频率较高)的值应该更接近拟合函数。您可能想要为您的拟合添加权重,因为更高频率的值应该具有更高的保真度。考虑代码
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有关加权的示例。
关于c - Gnuplot 拟合函数 - 拟合 q 指数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063028/