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

Python中使用循环实现多n值积分计算与绘图的求助

实现多n值的傅里叶级数计算与绘图

没问题!我帮你把代码改成循环处理多个n值的版本,还会把每个n的结果画在同一张图里方便对比~ 下面是完整的可运行代码,之后我会解释关键的修改点:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import quad

# 原始函数
y_original = lambda t: 3*t
T = 4  # 周期
n_list = [2, 5, 20]  # 要计算的n值列表
t = np.linspace(-6, 6, 1000)  # 更密的采样点让曲线更平滑

# 创建画布
plt.figure(figsize=(10, 6))

# 循环处理每个n值
for n in n_list:
    w = 2 * np.pi * n / T  # n次谐波的角频率
    
    # 计算A0
    A0 = (1/T) * quad(y_original, -T/2, T/2)[0]
    
    # 计算An
    An = (2/T) * quad(lambda t: y_original(t)*np.cos(n*w*t), -T/2, T/2)[0]
    
    # 计算Bn
    Bn = (2/T) * quad(lambda t: y_original(t)*np.sin(n*w*t), -T/2, T/2)[0]
    
    # 构造傅里叶近似函数
    y_approx = lambda t: A0 + An*np.cos(n*w*t) + Bn*np.sin(n*w*t)
    
    # 绘制当前n的结果,添加标签方便区分
    plt.plot(t, y_approx(t), label=f'n={n}')

# 绘制原始函数作为参考
plt.plot(t, y_original(t), '--', label='原始函数 y(t)=3t', color='black')

# 添加图表元素
plt.xlabel('t')
plt.ylabel('y(t)')
plt.title('不同n值的傅里叶级数近似')
plt.legend()
plt.grid(True)
plt.show()

关键修改说明:

  • 改用n值列表+循环:把单个的n改成n_list = [2,5,20],通过for n in n_list循环遍历每个需要计算的n,自动重复计算和绘图流程
  • 避免变量名冲突:把原始函数重命名为y_original,防止和后面的傅里叶近似函数y_approx重名导致覆盖问题
  • 简化被积函数定义:直接用lambda表达式作为quad的参数,省去了重复定义integrand函数的冗余代码,让逻辑更紧凑
  • 优化可视化:
    • 增加了原始函数的虚线参考线,方便对比近似效果
    • 给每条曲线添加标签,通过图例清晰区分不同n的结果
    • 设置了画布大小、坐标轴标签、网格等,让图表更易读
    • 把采样点从默认的50个增加到1000个,让曲线更平滑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:02:53