Skip to content

拉普拉斯变换入门

Introduction to the Laplace Transform

定义

对于一个给定的函数 f(t),其拉普拉斯变换为:

L[f(t)]=F(s)=0f(t)estdt

其中, s 是一个复变量,其定义为

s=σ+jω

The Laplace transform is an integral transformation of a function f(t) from the time domain into the complex frequency domain, given by F(s).

性质

Linearity

L[a1f1(t)+a2f2(t)]=a1F1(s)+a2F2(s)

Scaling

L[f(at)]=1aF(sa)
公式推导L[f(at)]=0f(at)estdt=0f(at)e(s/a)(at)d(at)a=1a0f(u)e(s/a)udu, where u=at=1aF(sa)

Time Shift

L[f(ta)u(ta)]=easF(s), where a0
公式推导L[f(ta)u(ta)]=0f(ta)u(ta)estdt=t=af(ta)estdt=(ta)=0f(ta)es(ta)easd(ta)=easu=0f(u)esudu, where u=ta=easF(s)

Frequency Shift

L[eatf(t)]=F(s+a)
公式推导L[eatf(t)]=0eatf(t)estdt=0f(t)e(s+a)tdt=F(s+a)

Time Differentiation

L[f(t)]=sF(s)f(0)
公式推导L[f(t)]=L[ddtf(t)]=0ddtf(t)estdt=0estdf(t)分部积分法 =estf(t)|00f(t)d(est)=f(0)0f(t)(sest)dt=f(0)+s0f(t)estdt=sF(s)f(0)
分部积分法udv=uvvdu
推广L[f(t)]=sL[f(t)]f(0)=s[sF(s)f(0)]f(0)=s2F(s)sf(0)f(0)L[fn(t)]=sL[fn1(t)]fn1(0)

Time Integration

L[0tf(τ)dτ]=1sF(s)
公式推导

使用分部积分法,令

u=0tf(τ)dτ,du=f(t)dtdv=estdt,v=1sest

于是

L[0tf(τ)dτ]=0[0tf(τ)dτ]estdt=[0tf(τ)dτ](1sest)|00(1sest)f(t)dt=0+1s0f(t)estdt=1sF(s)

Frequency Differentiation

L[tf(t)]=dF(s)ds
公式推导dF(s)ds=0f(t)(test)dt=0(tf(t))estdt=L[tf(t)]

Hence,

L[tf(t)]=dF(s)ds
推广L[tnf(t)]=(1)ndnF(s)dsn

Time Periodicity

F(s)=F1(s)1eTs
公式推导

对于满足以下性质的函数 f(t)

f(t)=f(tnT), where nN

被称作周期函数。函数 f(t) 可以表示为一组和

f(t)=f(t)[u(t)u(tT)]=+f(t)[u(tT)u(t2T)]=+f(t)[u(t2T)u(t3T)]=+=f1(t)+f2(t)+f3(t)+=f1(t)+f1(tT)u(tT)+f1(t2T)u(t2T)+

其中,f1(t)=f(t)[u(t)u(tT)]

于是

F(s)=L[f1(t)]+L[f1(tT)u(tT)]+L[f1(t2T)u(t2T)]+=F1(s)+eTsF1(s)+e2TsF1(s)+=F1(s)[1+eTs+e2Ts+]

利用几何级数公式

1+x+x2+=11x, for |x|<1

可知

F(s)=F1(s)1eTs

Initial and Final Values

f(0)=limssF(s)f()=lims0sF(s)
公式推导 1

利用 the differentiation property,可知

sF(s)f(0)=L[dfdt]=0dfdtestdt

因为 limsest=0,所以

lims[sF(s)f(0)]=0

因为 f(0) 是常数,所以

f(0)=limssF(s)
公式推导 2lims0[sF(s)f(0)]=0dfdte0tdt=0df=f()f(0)

于是

f()=lims0sF(s)

拉普拉斯逆变换

The Inverse Laplace Transform

L1[F(s)]=f(t)=12πjσ1jσ1+jF(s)estdsF(s)=N(s)D(s)
python
import sympy as sp
import IPython.display as display
s = sp.symbols('s', complex=True)
t = sp.symbols('t', real=True)
F = 1 / s
# 输出:
# $\displaystyle \theta\left(t\right)$
f = sp.inverse_laplace_transform(F, s, t)
display(f)

Simple Poles

F(s)=N(s)(s+p1)(s+p2)(s+pn)=k1s+p1+k2s+p2++kns+pn

Partial Fractions

ki=(s+pi)F(s)|s=pif(t)=(k1ep1t+k2ep2t++knepnt)u(t)

Repeated Poles

F(s)=kn(s+p)n+kn1(s+p)n1++k2(s+p)2+k1s+p+F1(s)kn=(s+p)nF(s)|s=pkn1=dds[(s+p)nF(s)]|s=pkn2=12!d2ds2[(s+p)nF(s)]|s=pknm=1m!dmdsm[(s+p)nF(s)]|s=pL1[1(s+a)n]=tn1eat(n1)!u(t)f(t)=(k1ept+k2tept+k32!t2ept++kn(n1)!tn1ept)u(t)+f1(t)

Complex Poles

F(s)=A1s+A2s2+as+b+F1(s)s2+as+b=s2+2αs+α2+β2=(s+α)2+β2A1s+A2=A1(s+α)+B1βF(s)=A1(s+α)(s+α)2+β2+B1β(s+α)2+β2+F1(s)f(t)=(A1eαtcos(βt)+B1eαtsin(βt))u(t)+f1(t)

卷积积分

The Convolution Integral

定义

y(t)=x(λ)h(tλ)dλ

y(t)=x(t)h(t)

如果

  1. t<0 时,x(t)=0
  2. t<λ 时,h(tλ)=0

那么

y(t)=h(t)x(t)=0tx(λ)h(tλ)dλ

性质

  1. x(t)h(t)=h(t)x(t)

  2. f(t)[x(t)+y(t)]=f(t)x(t)+f(t)y(t)

  3. f(t)[x(t)y(t)]=[f(t)x(t)]y(t)

  4. f(t)δ(t)=f(t)

  5. f(t)δ(tt0)=f(tt0)

  6. f(t)δ(t)=f(t)

  7. f(t)u(t)=tf(λ)dλ

与拉普拉斯变换的关系

假设 f1(t)f2(t) 的拉普拉斯变换分别为 F1(s)F2(s),那么

F1(s)F2(s)=L[f1(t)f2(t)]
Python 示例
python
# Example 15.12
# Page 698

import sympy as sp
# 我们要计算 x_1(t) 和 x_2(t) 的卷积:
# y(t) = ∫ x_1(λ) * x_2(t-λ) dλ, λ 从 0 到 t

t = sp.symbols('t', real=True)
lam = sp.symbols('\\lambda', real=True)

x_1 = 2 * (sp.Heaviside(t) - sp.Heaviside(t-1))
x_2 = (sp.Heaviside(t-1) - sp.Heaviside(t-3))

# 卷积表达式,注意 x_2 用 t-lam
y_conv = sp.integrate(x_1.subs(t, lam) * x_2.subs(t, t - lam), (lam, 0, t))
display(y_conv.simplify())

# 作图验证
import matplotlib.pyplot as plt
import numpy as np

# 将 y_conv 转换为可用于数值计算的函数
conv_func = sp.lambdify(t, y_conv, modules=['numpy'])

ts = np.linspace(0, 5, 301)
ys = conv_func(ts)

plt.figure(figsize=(7,4))
plt.plot(ts, ys, label=r'$y(t)$')
plt.xlabel('$t$')
plt.ylabel('卷积值')
plt.title('x_1(t) 和 x_2(t) 的卷积图像, $t \\in [0,5]$')
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置中文字体为黑体,避免中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
plt.grid(True)
plt.legend()
plt.show()

查表法

table-15-1-2