Экспоненциальная функция Python - PullRequest
0 голосов
/ 05 ноября 2018

Я определил следующую символическую матрицу:

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, когда ее аргумент является целочисленным или половинным целочисленным значением, но в остальных случаях я хотел бы сохранить символическое выражение. , Есть ли способ, который я мог бы использовать? Как мне это сделать?

Привет! * * 1006

1 Ответ

0 голосов
/ 05 ноября 2018

Если я использую предопределенный символ 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)]])
...