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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:15:04