You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sympy未返回预期结果:求解A|sin2πf₀t|的傅里叶级数异常

解决Sympy求解|sin2πf₀t|复指数傅里叶级数返回0的问题

问题根源

  1. 基频匹配错误:|sin2πf₀t|的周期是原正弦函数的一半,即( T = \frac{1}{2f_0} ),因此复指数傅里叶级数的基频应为( 2f_0 ),而非原代码中的( f_0 ),这会导致求和项的频率完全不匹配目标信号。
  2. 直流分量未单独处理:当( k=0 )时,原系数公式( \frac{2A_0}{\pi(1-k^2)} )会出现分母为0的情况,必须单独计算直流分量( c(0) = \frac{A_0}{\pi} )。
  3. 分支函数导致求和失效:直接用Python的if-else定义系数函数,Sympy无法在求和时正确解析分段逻辑,导致有效项被错误抵消,最终返回0。

修正后的代码

from sympy import Sum, I, pi, exp, oo, Piecewise
from sympy.abc import k, t

A0 = 12
f0 = 50

# 用Piecewise定义复傅里叶系数,明确各分段逻辑
c = Piecewise(
    (A0 / pi, k == 0),
    (2*A0/(pi * (1 - k**2)), (k % 2 == 0) & (k != 0)),
    (0, True)
)

def x(t):
    # 基频改为2*f0,匹配|sin2πf0t|的实际周期
    expr1 = Sum(c * exp(2*I*pi*k*2*f0*t), (k, -oo, oo))
    return expr1.doit()

# 验证示例:t=0时结果为0,t=1/(4f0)时结果为A0
print(x(0))
print(x(1/(4*f0)))

修正说明

  • 使用Sympy的Piecewise替代Python分支函数,让求和操作能正确识别系数的分段规则。
  • 调整基频为( 2f_0 ),确保级数的频率分量与目标信号周期匹配。
  • 单独处理( k=0 )的直流分量,避免数学错误的同时保证级数的完整性。

内容的提问来源于stack exchange,提问作者DynoMonster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 18:45:37