作成した他のコードで使用できる単純な積分関数と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)
このコードは、予想される250値に近い249.028500022の出力を提供します。ただし、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
このコードの出力は次のとおりです。00.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関数を使用する必要はありません。サンプルサイズは大きくないので問題ありません。