【问题标题】:Sympy not showing expected answerSympy没有显示预期的答案
【发布时间】:2022-10-18 22:53:25
【问题描述】:
from sympy import Sum,I,pi,exp,oo
from sympy.abc import k

A0 = 12
f0 = 50

def c(k):
    if k%2==0:
        return 2*A0/(pi * (1- k**2))
    else:
        return 0

def x(t):
    expr1 = Sum(c(k)*exp(2*I*pi*k*f0*t),(k,-oo,oo))
    return(expr1.doit())

上面的代码为 x(t) 的每个 t 返回 0,但它不应该那样做。我想要的是 A|sin2pif0t| 的傅里叶级数

【问题讨论】:

  • 我怀疑k % 2 永远不会评估为0,因为k 是一个符号而不是整数,所以c(k) 将始终返回0
  • 我同意 DrBwts。你需要的是sympy.core.mod.Mod。你可以在这里找到它的文档:sympy.core.mod.Mod
  • 我尝试将 k 替换为其他变量(不是从 sympy.abc 导入的),但仍然相同。正如@DrBwts 和@Invarianz 所说,我尝试使用sympy.core.mod.Mod,但还是一样。

标签: python sympy


【解决方案1】:

您需要一个符号条件表达式:

In [95]: c = Piecewise((2*A0/(pi * (1- k**2)), Eq(k%2, 0)), (0, True))

In [96]: c
Out[96]: 
⎧    24                     
⎪──────────  for k mod 2 = 0
⎪  ⎛     2⎞                 
⎨π⋅⎝1 - k ⎠                 
⎪                           
⎪    0          otherwise   
⎩ 

不幸的是,SymPy 仍然无法计算封闭形式的总和(这可能是不可能的):

In [97]: s = Sum(c*exp(2*I*pi*k*f0*t),(k,-oo,oo)).doit()

In [98]: s
Out[98]: 
  ∞                                     
______                                  
╲                                       
 ╲                                      
  ╲    ⎧    100⋅ⅈ⋅π⋅k⋅t                 
   ╲   ⎪24⋅ℯ                            
    ╲  ⎪───────────────  for k mod 2 = 0
    ╱  ⎨     ⎛     2⎞                   
   ╱   ⎪   π⋅⎝1 - k ⎠                   
  ╱    ⎪                                
 ╱     ⎩       0            otherwise   
╱                                       
‾‾‾‾‾‾                                  
k = -∞ 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 1970-01-01
    相关资源
    最近更新 更多