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

将Mathematica傅里叶级数代码转换为Python的技术求助

将Mathematica傅里叶级数代码转换为Python

问题分析

你的Mathematica代码是计算方波的傅里叶级数前11项(n从0到10)的和,对应的通项公式是:
$$a_n = \frac{(-1)^n \cdot 4}{\pi(2n+1)}, \quad f_n(t) = a_n \cdot \cos((2n+1)t)$$
求和后绘制$t \in [-2\pi, 2\pi]$的图像。

你尝试的Python代码存在两个核心问题:

  • 未定义变量t:Python中需要先生成t的数值数组才能进行向量化计算
  • 通项逻辑与原代码不符:原代码中是$2n+1$形式的奇数(n从0到10,对应1,3,...,21),而你的代码用了1到19的奇数,且系数的分母和符号逻辑错误

完整实现代码

import numpy as np
import matplotlib.pyplot as plt

# 生成t的取值范围:从-2π到2π,取1000个点保证绘图平滑
t = np.linspace(-2 * np.pi, 2 * np.pi, 1000)

# 初始化求和结果为全0数组,与t的长度一致
f_sum = np.zeros_like(t)

# 循环n从0到10,对应原Mathematica的求和范围
for n in range(0, 11):
    a_n = ((-1) ** n) * 4 / (np.pi * (2 * n + 1))
    term = a_n * np.cos((2 * n + 1) * t)
    f_sum += term

# 绘制图像
plt.figure(figsize=(10, 6))
plt.plot(t, f_sum, label='前11项傅里叶级数和')
plt.xlabel('t')
plt.ylabel('f(t)')
plt.title('方波的傅里叶级数逼近')
plt.grid(True)
plt.xticks([-2*np.pi, -np.pi, 0, np.pi, 2*np.pi], ['$-2\pi$', '$-\pi$', '$0$', '$\pi$', '$2\pi$'])
plt.legend()
plt.show()

代码说明

  1. 库导入:numpy负责数值计算和数组操作,matplotlib.pyplot负责绘图
  2. t的生成:用np.linspace生成均匀分布的t值,保证绘图的平滑性
  3. 求和逻辑:
    • 初始化f_sum为与t同长度的0数组,避免循环中变量未定义的问题
    • 循环n从0到10,严格对应原Mathematica的求和范围,计算每一项的系数和余弦项,累加到f_sum中
  4. 绘图优化:添加坐标轴标签、标题、网格,将x轴刻度替换为π相关的符号,提升可读性

效果说明

运行上述代码后,会得到与你提供的Mathematica绘图一致的方波逼近图像,随着项数增加,逼近效果会更接近理想方波。

内容的提问来源于stack exchange,提问作者J. O'connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:00:56