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

如何在SymPy中计算半区间傅里叶级数(正弦级数示例)

在SymPy中计算半区间正弦傅里叶级数

要在SymPy中得到你手动推导的正弦级数,核心是要基于奇延拓后的函数在完整对称区间[-π, π]上计算傅里叶级数,而不是仅在[0, π]区间计算。以下是两种可行方案:

方案一:构造奇延拓函数并在对称区间计算

SymPy的fourier_series默认对[0, L]区间的函数做偶延拓生成余弦级数,若要得到正弦级数,需先将函数奇延拓到[-π, π],再在该对称区间上计算级数:

import sympy as sp
x = sp.symbols('x', real=True)
f = x * (sp.pi - x)

# 构造奇延拓到[-π, π]的函数:x∈[-π,0)时取-f(-x),x∈[0,π]时取原函数
p = sp.Piecewise(
    (-(-x)*(sp.pi - (-x)), x < 0),
    (f, x >= 0)
)

# 在[-π, π]区间计算傅里叶级数
ps = sp.fourier_series(p, (x, -sp.pi, sp.pi))
print(ps.truncate(4))

运行结果为:

8*sin(x)/pi + 8*sin(3*x)/(27*pi) + 8*sin(5*x)/(125*pi) + 8*sin(7*x)/(343*pi)

方案二:手动计算正弦级数系数

正弦级数的形式为$\sum_{n=1}^\infty b_n \sin(nx)$,其中系数$b_n = \frac{2}{\pi}\int_0^\pi f(x)\sin(nx)dx$,可直接用SymPy计算系数并构造级数:

import sympy as sp
x, n = sp.symbols('x n', real=True, integer=True, positive=True)
f = x * (sp.pi - x)

# 计算正弦级数系数b_n
b_n = (2/sp.pi) * sp.integrate(f * sp.sin(n*x), (x, 0, sp.pi))
b_n_simplified = sp.simplify(b_n)
print("正弦级数系数b_n:", b_n_simplified)

# 生成前4项级数
series = sp.Sum(b_n_simplified * sp.sin(n*x), (n, 1, 4)).doit()
print("前4项正弦级数:", series)

运行后得到系数$b_n = \frac{8}{n^3\pi}$(n为奇数时),n为偶数时系数为0,最终级数结果与方案一一致。

为什么之前的方法无效?

你之前构造了奇延拓的Piecewise函数,但仍在[0, π]区间计算傅里叶级数。SymPy的fourier_series在[0, L]区间计算时,只会利用该区间内的函数值做偶延拓,完全忽略x<0的定义,因此得到的还是余弦级数。必须将计算区间扩展为对称的[-π, π],才能让SymPy识别函数的奇偶性,生成正弦级数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:50:22