3

numpy を使用して、統計力学で定義されている自己相関関数を計算しようとしています。私が見つけたドキュメントのほとんどは、correlateconvolveなどの関数に関連しています。ただし、特定の確率変数 x について、これらの関数は合計を計算しているように見えます

ACF(dt) = sum_{t=0}^T [(x(t)*x(t+dt)]

平均の代わりに

ACF(dt) = mean[x(t)*x(t+dt)]

実際、自己相関関数を計算するには、次のようにする必要があります。

acf = np.correlate(x,x,mode='full')
acf_half = acf[acf.size / 2:]
ldata = len(acf)
acf = np.array([x/(ldata-i) for i,x in enumerate(acf_half)])

もちろん、正しい acf から mean(x)**2 を引く必要があります。

これが正しいことを誰でも確認できますか?

4

1 に答える 1

0

一般的に言えば、自己相関、相関などは合計(積分)です。正規化されている場合もありますが、上で書いたような意味で平均化されていません。これは、それらが数学的畳み込み操作の観点から定義されているためです。これは、上記の合計として記述した積分です。

stat mech ページの括弧は熱平均を示します。これは、ある温度で多くの異なる状態で何度も行われた「実験」のアンサンブルまたは時間平均です。これ (有限温度) は、問題の「統計的」性質を引き起こす変動を引き起こし、相関の減衰 (長距離秩序の喪失) を引き起こします。これは単純に、複数のデータセットの自己相関を見つけてそれらを平均する必要があることを意味しますが、関数の平均はとらないでください。

私が知る限り、あなたのコードはオーバーラップ長の長さで相関を重み付けdtdtしようとしていますが、これが正しいとは思いません。

<s>2の減算に関しては、それはスピンモデルの場合であり<s>、平均スピン (磁化) はどこにあるので、 を使用する必要があるという点で正しいと思いますmean(x)**2

mode='same'補足として、出力の半分だけを見る必要なく、相関のドメインが入力のドメインと一致するように、の代わりに使用することをお勧めし'full'ます(ここでは、出力は対称であるため、実際にはそうではありません違いが生じる・異なる)。

于 2013-04-15T15:08:22.747 に答える