Python指数函数

时间:2018-11-05 18:56:31

标签: python-3.x sympy exp

我定义了以下符号矩阵:

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,但在其他情况下,我想保留符号表达式。 有什么我可以使用的方法吗?我该怎么办?

致谢!

1 个答案:

答案 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)]])