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 の場合と実際には何の違いもありません。
ここで何か問題がありますか?フィット関数がより近いフィットを見つけられないのはなぜですか?
次の画像は、私のデータに当てはめられた関数 (緑) を示しています。しかし、私はまだより正確なフィッティングを望んでいます。