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

使用numpy gradient计算余弦导数时出现π相位偏移的原因咨询

问题解答:numpy.gradient计算cos(x)导数的相位偏移问题

首先要澄清一个关键的微积分知识点:余弦函数的导数并不是正弦函数,而是负的正弦函数,也就是:
$$\frac{d}{dx} \cos(x) = -\sin(x)$$
而 $-\sin(x)$ 等价于 $\sin(x + \pi)$——这正是你看到的「偏移π相位的正弦函数」,所以numpy的计算结果其实是完全正确的,并没有出错!

验证你的代码

我们可以在你的代码里加入理论导数的对比,直观确认这一点:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,120)
y = np.cos(x)
deriv = np.gradient(y,(2*np.pi/120))
# 计算理论导数
theoretical_deriv = -np.sin(x)

plt.plot(x,y, label='cos(x)')
plt.plot(x,deriv, label='numpy gradient')
plt.plot(x,theoretical_deriv, label='theoretical (-sin(x))', linestyle='--')
plt.legend()
plt.show()

运行这段代码你会发现,deriv和theoretical_deriv几乎完全重合,只有边缘点有极其微小的数值误差(这是数值梯度算法的正常现象)。

为什么你会觉得结果不对?

应该是你记错了三角函数的导数公式:

  • $\frac{d}{dx} \sin(x) = \cos(x)$
  • $\frac{d}{dx} \cos(x) = -\sin(x)$
  • $\frac{d}{dx} -\cos(x) = \sin(x)$

如果你的目标是得到正弦函数,那你需要对原函数取反(比如用y = -np.cos(x)),或者对计算出的导数取反(deriv = -np.gradient(y, dx))。

关于numpy.gradient的说明

numpy的gradient函数对于均匀采样的数据(就像你用linspace生成的x),内部点使用中心差分计算导数,边缘点使用前后差分,这是一种精度较高的数值导数计算方法,完全适用于你后续的数据导数运算。你之前的长期错误根源,大概率是对三角函数导数公式的误解,而不是numpy的计算问题。

内容的提问来源于stack exchange,提问作者Thomas Kroißenbrunner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:12:04