python - 计算python中点的导数

标签 python numpy scipy

我想计算点的导数,建议使用 np.diff 函数的一些互联网帖子。但是,我尝试对手动计算的结果使用 np.diff(选择一个随机多项式方程并对其进行微分),以查看是否最终得到相同的结果。我使用了以下等式:Y = (X^3) + (X^2) + 7 并且我最终得到的结果是不同的。任何想法为什么?有没有其他方法来计算差异。

在这个问题中,我试图解决,我收到了拟合样条函数的数据点(不是需要用样条拟合的原始数据,而是已经拟合的样条的点)。 x 值的间隔相等。我只有点没有方程,我需要的是计算一阶,二阶和三阶导数。即 dy/dx、d2y/dx2、d3y/dx3。关于如何做到这一点的任何想法?提前致谢。

xval = [1,2,3,4,5]
yval = []
yval_dashList = []

#selected a polynomial equation
def calc_Y(X):
      Y = (X**3) + (X**2) + 7
      return(Y)

#calculate y values using equatuion 
for i in xval:
    yval.append(calc_Y(i))

#output: yval = [9,19,43,87,157]

#manually differentiated the equation or use sympy library (sym.diff(x**3 + x**2 + 7))
def calc_diffY(X):
   yval_dash = 3*(X**2) + 2**X

#store differentiated y-values in a list
for i in xval:
    yval_dashList.append(yval_dash(i))

#output: yval_dashList = [5,16,35,64,107]

#use numpy diff method on the y values(yval)
numpyDiff = np.diff(yval)
#output: [10,24,44,60]

numpy diff 方法的值 [10,24,44,60]不同于 yval_dashList = [5,16,35,64,107]

最佳答案

您尝试做的事情背后的想法是正确的,但有几点可以使其按预期工作:

  • calc_diffY(X) 有一个错字,X**2 的导数是 2*X,不是 2**X:
  •   def calc_diffY(X):    
          yval_dash = 3*(X**2) + 2*X
    

    通过这样做,您不会获得更好的结果:
    yval_dash = [5, 16, 33, 56, 85]
    numpyDiff = [10. 24. 44. 70.]
    
  • 要计算数值导数,您应该做一个“差商”,它是导数的近似值
  • numpyDiff = np.diff(yval)/np.diff(xval)
    

    如果点的值更密集,则近似值会越来越好。
    x 轴上的点之间的差异为 1,因此您最终处于这种情况(蓝色为解析导数,红色为数值):

    enter image description here

    如果你将 x 点的差异减少到 0.1,你会得到这个,这要好得多:

    enter image description here

    只是为了添加一些东西,看看这张图片,它显示了减少数值计算导数的点的距离的效果,取自 Wikipedia :

    enter image description here

    关于python - 计算python中点的导数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997541/

    相关文章:

    python - 在 scipy python 中使用 UnivariateSpline 拟合数据

    python - 为 Django 表单编码 UTF-8

    python - python 中的 zope.interface.registry 导入错误

    python - 在 python 中将 XML 编辑为字典?

    python - 寻找大矩阵最小二乘解的更快方法

    python - 直方图操作以删除不需要的数据

    python - 比较同一数据框列中的值

    python - 如何从 pandas 数据框创建 scipy 稀疏矩阵?

    python - 使用 %s 格式化输入/输出

    python - 按日期排序字典列表