4. 拉普拉斯逆变换:部分分式展开法
好,咱们接着聊。前面我们把连续世界的微分方程变成了拉普拉斯域里的代数方程,爽是爽了,但问题来了——算出来的结果是个复变函数,怎么变回时域信号?
说白了,拉普拉斯逆变换就是要把 F(s) 变回 f(t)。数学上有个复变积分公式,但说实话,我做了十几年信号处理,几乎没用过那个公式。实际工程里,我们用的方法就一个——部分分式展开法。
核心思想:把复杂的 F(s) 拆成一堆简单分式的和,每个简单分式对应一个已知的时域信号。查表就行。
4.1 为什么是部分分式?
你想想看,拉普拉斯变换表里就那么几个基本对:
1/s→ 阶跃信号u(t)1/(s+a)→ 指数衰减e^{-at}u(t)ω/(s²+ω²)→ 正弦信号sin(ωt)u(t)- ……
实际系统传函往往是 F(s) = N(s)/D(s),分子分母都是多项式。直接查表?查不到。但如果我们把它拆成上面这些基本形式的线性组合,那逆变换就是查表加线性叠加。
我在项目中遇到过一个问题:一个高阶滤波器的传函,直接做逆变换算出来一堆指数项混在一起,根本看不出物理意义。拆成部分分式后,每个极点对应一个模态,哪个模态衰减快、哪个振荡频率高,一目了然。
4.2 部分分式展开的三种情况
做部分分式展开,关键看分母 D(s) 的根——也就是系统的极点。分三种情况:
4.2.1 单实根(最简单的情况)
假设 F(s) = (s+3)/(s²+3s+2)。分母因式分解:(s+1)(s+2)。两个单实根:-1 和 -2。
展开形式:
F(s) = A/(s+1) + B/(s+2)
求系数 A 和 B。方法很简单——留数法:
A = (s+1)F(s)|_{s=-1} = (s+3)/(s+2)|_{s=-1} = 2/1 = 2
B = (s+2)F(s)|_{s=-2} = (s+3)/(s+1)|_{s=-2} = 1/(-1) = -1
所以:
F(s) = 2/(s+1) - 1/(s+2)
查表:
f(t) = 2e^{-t}u(t) - e^{-2t}u(t)
嗯,这里要注意:留数法求系数时,一定要把因子约干净再代入。我刚开始学的时候经常犯这个错,代入时忘了约分,结果算出来系数全错。
4.2.2 重根(稍微麻烦点)
假设 F(s) = 1/(s+1)²(s+2)。分母有重根 -1(二阶)和单根 -2。
展开形式:
F(s) = A/(s+1)² + B/(s+1) + C/(s+2)
求系数:
A = (s+1)²F(s)|_{s=-1} = 1/(s+2)|_{s=-1} = 1
C = (s+2)F(s)|_{s=-2} = 1/(s+1)²|_{s=-2} = 1
B 怎么求?不能直接代了。用求导法:
B = d/ds[(s+1)²F(s)]|_{s=-1} = d/ds[1/(s+2)]|_{s=-1} = -1/(s+2)²|_{s=-1} = -1
所以:
F(s) = 1/(s+1)² - 1/(s+1) + 1/(s+2)
查表:
f(t) = te^{-t}u(t) - e^{-t}u(t) + e^{-2t}u(t)
个人经验:重根情况我建议用待定系数法配合留数法一起用。先求最高次重根的系数(直接代),再求单根系数(直接代),剩下的用待定系数法解方程。这样不容易出错。
4.2.3 共轭复根(振荡的来源)
假设 F(s) = (s+1)/(s²+2s+5)。分母的根:-1 ± 2j。共轭复根。
展开形式有两种处理方式:
方式一:拆成两个一阶复分式
F(s) = A/(s+1-2j) + B/(s+1+2j)
系数也是共轭的。算出来再合并,能得到正弦余弦形式。
方式二(我推荐):配方法
F(s) = (s+1)/((s+1)²+4)
直接查表:
f(t) = e^{-t}cos(2t)u(t)
你看,配方法多快。我一般优先用配方法,实在配不了才拆复根。
避坑指南:我曾经在配方法上栽过跟头。注意分子必须配成 (s+α) 或者常数,才能直接查表。如果分子是 s+3 而分母是 (s+1)²+4,要拆成 (s+1)+2,然后分成两项:
F(s) = (s+1)/((s+1)²+4) + 2/((s+1)²+4)
第一项对应 e^{-t}cos(2t),第二项对应 e^{-t}sin(2t)。千万别直接套!
4.3 部分分式展开的完整流程
我总结了一个标准流程,照着做基本不会错:
- 检查真分式:如果分子阶数 ≥ 分母阶数,先做多项式除法,化成真分式 + 多项式
- 因式分解分母:找出所有极点(实根、重根、复根)
- 写展开形式:每个极点对应一项,重根对应多项
- 求系数:留数法 + 待定系数法
- 查表逆变换:逐项查表,叠加得到
f(t)
举个例子:假设 F(s) = (2s²+5s+5)/(s³+3s²+4s+2)
分母因式分解:(s+1)(s²+2s+2) = (s+1)((s+1)²+1)
展开:F(s) = A/(s+1) + (Bs+C)/((s+1)²+1)
求系数:A=1, B=1, C=2
所以:F(s) = 1/(s+1) + (s+1)/((s+1)²+1) + 1/((s+1)²+1)
逆变换:f(t) = e^{-t} + e^{-t}cos(t) + e^{-t}sin(t)
4.4 知识体系图
下面这张图把部分分式展开法的核心逻辑串起来了。我建议你把它记在脑子里,以后遇到拉普拉斯逆变换,按图索骥就行。
4.5 几点补充
关于数值计算:实际工程中,高阶系统的部分分式展开用手算太痛苦。我一般用 MATLAB 的 residue() 函数或者 Python 的 scipy.signal.residue()。但理解原理很重要——至少你得知道它算出来的是什么意思。
关于物理意义:每个极点对应系统的一个固有模态。实极点对应指数衰减/增长,复极点对应振荡。展开系数(留数)决定了这个模态在输出中的权重。我在做振动分析时,就是靠这个判断哪个模态贡献最大。
关于稳定性:所有极点实部为负 → 系统稳定。只要有一个极点实部为正 → 系统发散。这个判断在控制系统中极其重要。
我的习惯:拿到一个传函,先看极点分布。心里大概就有数了——这个系统是稳还是不稳,响应是快还是慢,有没有振荡。然后再去做逆变换,验证自己的判断。
好了,部分分式展开法就讲到这里。说白了就是拆、算、查、叠四个字。多练几道题,你就能找到感觉。
公众号:蓝海资料掘金营,微信deep3321