gpt4 book ai didi

python - 如果迭代,DFT 会给出不同的结果

转载 作者:太空宇宙 更新时间:2023-11-03 19:19:09 27 4
gpt4 key购买 nike

我创建了一个简单的积分函数和 DFT 函数,可以将它们与我编写的其他代码一起使用。

from math import sin,pi
from time import time
def aintegral(d,step):
return sum(d)*step

def partialdft(d,step,w):
i = 0
x = d
while i/step < len(d):
x[int(i/step)]*=sin(w*pi*i)
i+=step
return aintegral(x,step)


x = []
y = 0
while y<100:
x.append(5*sin(4*pi*y))
y+=.01

print partialdft(x,.01,4)

此代码给出的输出为 249.028500022,接近预期值 250。然而,当我迭代 DFT 时,我得到了一个完全不同的变换值 4。

from math import sin,pi
from time import time
def aintegral(d,step):
return sum(d)*step

def partialdft(d,step,w):
i = 0
x = d
while i/step < len(d):
x[int(i/step)]*=sin(w*pi*i)
i+=step
return aintegral(x,step)


x = []
y = 0
while y<100:
x.append(5*sin(4*pi*y))
y+=.01

y = 0
while y<10.:
print y,partialdft(x,.01,y)
y+=.1

此代码的输出是:0 0.0514628731431

0.1 0.0514628731431

0.2 0.0514628731431

。。。.

4.0 0.0514628731431

。。。.

9.8 0.0514628731431

9.9 0.0514628731431

10.0 0.0514628731431

谁能告诉我这个问题是什么原因造成的?提前致谢。

注意:此时我并不关心使用更高效的 fft 函数。样本量不大,所以没关系。

最佳答案

partialdft 函数修改 x。这是第一个循环之后的 x:

>>> x[0:10]
[0.0, 0.62666616782152129, 1.243449435824274, 1.8406227634233896, 2.4087683705085765, 2.9389262614623659, 3.4227355296434436, 3.852566213878946, 4.2216396275100756, 4.5241352623300983]

调用该函数后,这是 x:

>>> partialdft(x, 0.01, y)
0.051462873158853464
>>> x[0:10]
[0.0, -2.8072359998573911e-13, 1.114040042207106e-12, -2.4744131119314365e-12, 4.316161702819329e-12, -6.5865746141630883e-12, 9.202604511389696e-12, -1.2082375495190468e-11, 1.5129125329320302e-11, -8.1617793532956823e-23]

为了避免覆盖 x,请复制:

def partialdft(d,step,w):
i = 0
x = d[:]
#...

关于python - 如果迭代,DFT 会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10377596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com