我定义了以下符号矩阵:
def DFT(d):
a = symbols('pi')
DFT = Matrix(d, d, lambda i,j: exp((2*I/d)*i*j*a))
return(DFT)
现在,当参数为整数或半整数值时,我想将指数简化为相应的1,-1,I,-I,但在其他情况下,我想保留符号表达式。 有什么我可以使用的方法吗?我该怎么办?
致谢!
答案 0 :(得分:1)
如果我在sympy.pi
的定义中使用预定义符号a
而不是DFT
,它将自动简化值:
In [27]: from sympy import *
In [28]: def DFT(d):
...: DFT = Matrix(d, d, lambda i,j: exp((2*I/d)*i*j*pi))
...: return(DFT)
...:
In [29]: DFT(4)
Out[29]:
Matrix([
[1, 1, 1, 1],
[1, I, -1, -I],
[1, -1, 1, -1],
[1, -I, -1, I]])
In [30]: DFT(6)
Out[30]:
Matrix([
[1, 1, 1, 1, 1, 1],
[1, exp(I*pi/3), exp(2*I*pi/3), -1, exp(4*I*pi/3), exp(5*I*pi/3)],
[1, exp(2*I*pi/3), exp(4*I*pi/3), 1, exp(8*I*pi/3), exp(10*I*pi/3)],
[1, -1, 1, -1, 1, -1],
[1, exp(4*I*pi/3), exp(8*I*pi/3), 1, exp(16*I*pi/3), exp(20*I*pi/3)],
[1, exp(5*I*pi/3), exp(10*I*pi/3), -1, exp(20*I*pi/3), exp(25*I*pi/3)]])
In [31]: DFT(8)
Out[31]:
Matrix([
[1, 1, 1, 1, 1, 1, 1, 1],
[1, exp(I*pi/4), I, exp(3*I*pi/4), -1, exp(5*I*pi/4), -I, exp(7*I*pi/4)],
[1, I, -1, -I, 1, I, -1, -I],
[1, exp(3*I*pi/4), -I, exp(9*I*pi/4), -1, exp(15*I*pi/4), I, exp(21*I*pi/4)],
[1, -1, 1, -1, 1, -1, 1, -1],
[1, exp(5*I*pi/4), I, exp(15*I*pi/4), -1, exp(25*I*pi/4), -I, exp(35*I*pi/4)],
[1, -I, -1, I, 1, -I, -1, I],
[1, exp(7*I*pi/4), -I, exp(21*I*pi/4), -1, exp(35*I*pi/4), I, exp(49*I*pi/4)]])