【问题标题】:Integration offset with cumtrapz (python/scipy)cumtrapz 的积分偏移量(python/scipy)
【发布时间】:2021-03-18 22:47:43
【问题描述】:

我希望能够在 Python 中对数组进行数值微分和积分。我知道在 numpy 和 scipy 中有这方面的功能。但是,在集成时,我注意到偏移量。

例如,我从一个初始函数 y=cos(x) 开始。

image, y = cos(x)

然后我使用 numpy.gradient 求导数。它按预期工作(绘图为 -sin(x)):

image, dydx = d/dx(cos(x))

当我将导数与 scipy.cumtrapz 集成时,我希望得到初始函数。但是,有一些偏移量。我意识到 -sin(x) 的积分是 cos(x)+constant,那么 cumtrapz 数值积分不考虑这个常数吗?

image, y = int(dydx)

我担心的是,如果您有一些任意信号,并且不知道初始/边界条件,那么 cumtrapz 是否会忽略 +constant 项? cumtrapz 有解决方案吗?

我使用的代码如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

x = np.linspace(-2*np.pi, 2*np.pi,100)

y = np.cos(x) #starting function 
dydx = np.gradient(y, x) #derivative of function 
dydx_int = integrate.cumtrapz(dydx, x, initial = 0) #integral of derivative 

fig, ax  = plt.subplots()
ax.plot(x, y)
ax.plot(x, dydx)
ax.plot(x, dydx_int)
ax.legend(['y = cos(x)', 'dydx = d/dx(cos(x))', 'y = int(dydx)'])
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

【问题讨论】:

    标签: python numpy scipy integration offset


    【解决方案1】:

    cumtrapz()cumsum() 和类似的人按照他们所说的去做:对输入数组进行累积求和。如果求和数组与输入数组 (dydx) 一样以 0 开头,则求和数组的第一个元素也为零。
    要在您的代码中修复它,您应该将偏移量添加到累积总和中: dydx_int = dydx_int + y[0]

    但是对于关于积分初始条件的一般问题:

    我担心的是,如果您有一些任意信号,并且不知道初始/边界条件,那么 cumtrapz 是否会忽略 +constant 项? cumtrapz 有解决方案吗?

    好吧,如果您不知道初始/边界条件,cumtrapz 也不会知道...您的问题不太合理..

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2023-03-29
      • 2015-08-25
      • 2020-01-23
      • 2018-05-10
      • 1970-01-01
      • 2013-08-24
      • 2012-04-09
      • 2011-01-23
      相关资源
      最近更新 更多