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 回答