c - Gnuplot 拟合函数 - 拟合 q 指数

标签 c gnuplot curve-fitting data-fitting

我使用我的 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 时并没有什么不同。

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

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

enter image description here

最佳答案

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

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/

相关文章:

c - 如何将 "MyDef ** t"malloc 到特定长度,而不是 C 中的 "MyDef * t[5]"

c - uint8_t 类型数组的元素是否总是被打包到连续的内存字节中?

gnuplot - 从 gnuplot 中的 2 个文件获取比率

datetime - 如何使用 GnuPlot 从存储在单独列中的 CSV 文件日期和时间绘制时间序列图表?

python - curve_fit 中的多个变量,sigma 形状不正确?

matlab - 在Matlab中移除图像偏移(二维基线)

c - 带字符串的 Switch 语句?

c - C 编程中带有 "struct"的 "for-loop"对象

graph - gnuplot:标记/突出显示区域(折线图的一部分)

python - numpy polynomial.Polynomial.fit() 给出与 polynomial.polyfit() 不同的系数