Python实现cos(x)有限差分的步长逐次减半迭代功能求助
问题原因
你编写的while循环仅执行了h逐次减半的操作,没有将有限差分计算、绘图的逻辑放入循环体的缩进块中,因此循环结束后只会执行一次计算,无法输出每个步长对应的差分结果。
修改方案
- 首先补全自变量x的定义,示例中我们取0到2π区间的均匀采样点,可直接替换为你自己的x数组
- 将差分计算、绘图逻辑全部放入while循环的缩进块内,确保每次h更新后都执行对应计算
- 可通过调整曲线透明度、设置图例标注步长值,区分不同步长下的计算结果
完整可运行代码
import numpy as np import matplotlib.pyplot as plt f = lambda x: np.cos(x) # 预先定义自变量x的采样数组,可根据需求修改 x = np.linspace(0, 2 * np.pi, 1000) h = 5 plt.figure(figsize=(10, 6)) while h > 0.0005: # 前向有限差分 dff_forward = (f(x + h) - f(x)) / h plt.plot(x, dff_forward, '-b', alpha=0.5, label=f'FFD_h={h:.4f}') # 后向有限差分 dff_backward = (f(x) - f(x - h)) / h plt.plot(x, dff_backward, '-r', alpha=0.5, label=f'BFD_h={h:.4f}') # 中心有限差分 dff_central = (f(x + h) - f(x - h)) / (2 * h) plt.plot(x, dff_central, '-g', alpha=0.5, label=f'CFD_h={h:.4f}') # 步长减半 h = h / 2 # 全局绘图配置 plt.xlabel('x') plt.ylabel('导数近似值') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left') plt.grid() plt.tight_layout() plt.show()
可选调整
如果需要单独查看每个步长的差分结果,将plt.show()语句移动到while循环的缩进块内部即可,每次步长计算完成后会单独弹出对应画布。
内容的提问来源于stack exchange,提问作者gtl533
相关产品推荐
相关产品推荐

