阶跃函数和指数衰减的卷积

时间:2018-08-04 16:23:51

标签: python numpy matplotlib convolution

我正在尝试将以下公式应用于我的数据:

M(t)=\int_{0}^{t}f(\tau&space;)G(t-\tau)d\tau=\int_{0}^{t}f(\tau&space;)[A\frac{\lambda&space;_{bi}}{\lambda&space;_{bi}-\lambda&space;_{pb}}(e^{-\lambda&space;_{pb}(t-\tau)}-e^{-\lambda&space;_{bi}(t-\tau)})+Be^{-\lambda&space;_{bi}(t-\tau)}]d\tau

其中A = 0.3,B = 1,lambda_pb = 0.000431062,lambda_bi = 0.000580525。

对于时间t,我有:

t=np.array([0, 900, 1800, 2700, 3600, 4500, 5400, 6300, 7200, 8100])

和f(t):

f=np.array([ 0., 0., 0.00555556, 0., 0., 0., 0., 0., 0., 0.])

对于G(t):

G=np.array([ 1., 0.69255058,  0.47822256,  0.32940846, 0.22642738,  0.15536312,  0.10643991,  0.07282715,  0.04977304,  0.03398402])

然后我使用以下代码对G(t)和f(t)进行卷积:

import numpy as np
from numpy import convolve
convolution=np.convolve(f, G)[:len(t)]*(t[1]-t[0])

我得到以下图:enter image description here 对于t tau的响应函数G(t-tau)?也许使用步进功能?

1 个答案:

答案 0 :(得分:0)

关于情节有问题吗?

我对您的公式一无所知,但对我来说卷积结果看起来不错。但是,对于数据[0,0,0.00555556 ...],plt.plot将绘制一条这样的曲线。 plt.step可以解决这个问题

plt.step(t[:3], convolution[:3], where='post', color='r')
plt.plot(t[2:], convolution[2:], color='r')

或者,如果可以的话,重采样t也可以减轻

def G(t):
    term1 = A * lambda_bi / (lambda_bi - lambda_pb) 
    term2 = np.exp(-lambda_pb * t) - np.exp(-lambda_bi * t)
    term3 = B * np.exp(-lambda_bi * t)
    return term1 * term2 + term3

t = np.linspace(0, 8100, 811)

f = np.zeros(t.shape)
f[t==1800] = 0.00555556

g = G(t)

conv = np.convolve(f, g)[:len(t)]*(t[1]-t[0])
plt.plot(conv)