I have a time series of experimental data x = x(t) in two numpy arrays, x for the observable and t for the time values of the observations. Is there a numpy function or a way that can evaluate the laplace transform of the timeseries? Thank you in advance.
答案 0 :(得分:5)
我认为你应该考虑f(x)的拉普拉斯变换作为Gamma(x)f(x)e ^(bx)的傅里叶变换,其中Gamma是一个阶梯函数,删除了负面部分积分和e ^(bx)构成复指数的实部。 有一种众所周知的傅里叶变换算法,称为快速傅里叶变换"快速傅里叶变换" (FFT),你可以在Python和Matlab网站上找到很多教程。
这里我给你一个简短的代码来计算阶梯函数的傅里叶变换,如 对于| x |,y = 0 > 1 对于| x |,y = 1 < 1
其傅里叶变换可以分析计算为sin(pi x)/(pi x)。
import matplotlib.pyplot as plt
import scipy
from scipy.fftpack import fftshift
import numpy as np
x = np.arange(-3, 3, 0.01)
y = np.zeros(len(x))
y[150:450] = 1
plt.plot(x, y) # plot of the step function
yShift = fftshift(y) # shift of the step function
Fourier = scipy.fft(yShift) # Fourier transform of y implementing the FFT
Fourier = fftshift(Fourier) # inverse shift of the Fourier Transform
plt.plot(Fourier) # plot of the Fourier transform
请注意,在应用快速傅立叶变换之前和之后,您必须使用fftshift命令,该命令将绘图的左侧移动到右侧,反之亦然。 这不是你问题的完整答案,但我相信这是一个好的开始。
答案 1 :(得分:0)
您可以使用梯形法则以数字方式计算拉普拉斯变换的积分。一篇描述这种方法的论文是Edward H. Hellen: Padé –Laplace analysis of signal averaged voltage decays obtained from a simple circuit(公式2)
备注:强>
1)“只要数据在最后一个数据点接近零,总和就近似了[在文章中]等式1中的积分。”
2)“p0的一个好选择是它所需时间的倒数 数据衰减到其初始值的1/2。“
3)由于您的数据间隔不均匀,我会首先使用插值(来自scipy import interpolate)来获取数据。 Trepozoidal规则需要等间距的数据。