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

如何修正Numpy Gradient计算y=x³导数时的振幅偏差问题?

解决数值导数振幅异常的问题

首先,你的代码存在两个明显问题导致导数显示异常:

  • 绘图时误用了未定义的变量y1和y2,应该替换为实际定义的y(原函数)和dy(数值导数);
  • ylim(-2,2)的范围设置过小,导数3x²在x=1时取值为3,已经超出了这个范围,导致曲线被截断,无法看到完整形态。

其次,np.gradient本身的计算逻辑是正确的——它对中间点使用中心差分、端点使用前后差分计算数值梯度,对于$y=x³$这种光滑函数,计算结果和理论导数$3x²$几乎完全重合。

修正后的完整代码如下:

import numpy as np
import matplotlib.pyplot as plt

x, sp = np.linspace(-3, 3, 100, retstep=True)
y = x**3
# 计算数值导数
dy_num = np.gradient(y, sp)
# 理论导数用于对比
dy_theory = 3 * x**2

plt.figure(figsize=(8, 5))
plt.plot(x, y, label='原函数 $y=x^3$')
plt.plot(x, dy_num, label='数值导数', linestyle='--')
plt.plot(x, dy_theory, label='理论导数 $y\'=3x^2$', linestyle=':')
plt.xlabel('x')
plt.ylabel('y')
# 调整y轴范围以显示完整曲线
plt.ylim(-30, 30)
plt.legend()
plt.grid()
plt.show()

另外需要纠正一个认知:原函数$y=x³$和其导数$y'=3x²$的交点并不在(1,1)。解方程$x³=3x²$可得,交点位于x=0(y=0)和x=3(y=27),这一点在修正后的图中可以清晰看到。

内容的提问来源于stack exchange,提问作者Camilo Ruiz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:48:21