1

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 の場合と実際には何の違いもありません。

ここで何か問題がありますか?フィット関数がより近いフィットを見つけられないのはなぜですか?

次の画像は、私のデータに当てはめられた関数 (緑) を示しています。しかし、私はまだより正確なフィッティングを望んでいます。

ここに画像の説明を入力

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 ステートメントの 3 列目は、2 列目の値の標準偏差と見なされます (gnuplot のドキュメントを参照)。これにより適合性が向上しますが、正しい標準偏差を使用する必要がある場合があります。

重み付けの例については、 gnuplot fit demosも参照してください。

于 2013-08-05T18:29:29.107 に答える