我正在尝试编写一个自定义函数,用于查找第n个离散傅里叶变换矩阵,如here所述(除了不除以sqrt(N)
)。我已经成功地得到了单位的第n个根,但是由于某种原因,当我把它乘以一个矩阵时,我得到了我所期望的复共轭。您可以通过比较myfunction的输出和sp.fft(np.eye(n))
的输出来看到这一点(它们应该匹配):
import numpy as np, scipy as sp
def dftmat(n):
# nth root of unity
# w = complex(np.cos(2*np.pi / n), np.sin(2*np.pi / n))
w = np.exp(2j * np.pi / n)
# bind its powers into a matrix
F = np.matrix([ [w**(a*b) for a in range(n)] for b in range(n)])
return(F)
a = np.round(dftmat(6),3)
b = np.round(sp.fft(sp.eye(6)),3)
print(a)
print(b)
收益率
[[ 1. +0.j 1. +0.j 1. +0.j 1. +0.j 1. +0.j 1. +0.j ]
[ 1. +0.j 0.5+0.866j -0.5+0.866j -1. +0.j -0.5-0.866j 0.5-0.866j]
[ 1. +0.j -0.5+0.866j -0.5-0.866j 1. -0.j -0.5+0.866j -0.5-0.866j]
[ 1. +0.j -1. +0.j 1. -0.j -1. +0.j 1. -0.j -1. +0.j ]
[ 1. +0.j -0.5-0.866j -0.5+0.866j 1. -0.j -0.5-0.866j -0.5+0.866j]
[ 1. +0.j 0.5-0.866j -0.5-0.866j -1. +0.j -0.5+0.866j 0.5+0.866j]]
[[ 1. +0.j 1. +0.j 1. +0.j 1. +0.j 1. +0.j 1. +0.j ]
[ 1. +0.j 0.5-0.866j -0.5-0.866j -1. +0.j -0.5+0.866j 0.5+0.866j]
[ 1. +0.j -0.5-0.866j -0.5+0.866j 1. +0.j -0.5-0.866j -0.5+0.866j]
[ 1. +0.j -1. +0.j 1. +0.j -1. +0.j 1. +0.j -1. +0.j ]
[ 1. +0.j -0.5+0.866j -0.5-0.866j 1. -0.j -0.5+0.866j -0.5-0.866j]
[ 1. +0.j 0.5+0.866j -0.5+0.866j -1. -0.j -0.5-0.866j 0.5-0.866j]]
我认为问题可能与我设置定义F
的列表的方式有关,但是从该行中删除w**
似乎可以产生正确的指数集:
n = 6
F = np.matrix([ [(a*b) for a in range(n)] for b in range(n)])
print(F)
收益率
[[ 0 0 0 0 0 0]
[ 0 1 2 3 4 5]
[ 0 2 4 6 8 10]
[ 0 3 6 9 12 15]
[ 0 4 8 12 16 20]
[ 0 5 10 15 20 25]]
Here's a TIO link.提前感谢您的帮助
目前没有回答
相关问题 更多 >
编程相关推荐