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
相关产品推荐
相关产品推荐

