課堂作業常要求:自行設計二階微分方程 y''(t) + a1 y'(t) + a0 y(t) = e(t),給定邊界條件 y(0-), y'(0-) 與激勵訊號(指數、階躍、正弦),求零輸入響應、零狀態響應與全響應並畫連續波形。這其實是經典線性系統理論練習,按部就班即可完成。
例如選擇:
a1 = 3, a0 = 2 → 特徵方程 s² + 3s + 2 = 0,根 s1=-1, s2=-2(過阻尼)。
邊界條件:y(0-)=1, y'(0-)=0。
激勵:單位階躍 e(t) = u(t)(拉普拉斯域 E(s)=1/s)。
方程變換:
s²Y(s) - s y(0-) - y'(0-) + 3[sY(s)-y(0-)] + 2Y(s) = 1/s
代入初始條件整理得:
Y(s) = (s+3)/[s(s+1)(s+2)]
Y(s) = 3/2·1/s - 2·1/(s+1) + 1/2·1/(s+2)
E(s)=0):y_zi(t) = 2e^{-t} - e^{-2t}y_zs(t) = 3/2 - 2e^{-t} + 1/2 e^{-2t}y(t) = y_zi(t) + y_zs(t) = 3/2 - e^{-2t}% MATLAB 腳本
t = 0:0.01:10;
y_zi = 2*exp(-t) - exp(-2*t);
y_zs = 1.5 - 2*exp(-t) + 0.5*exp(-2*t);
y = 1.5 - exp(-2*t);
plot(t, y_zi, 'r--', t, y_zs, 'b:', t, y, 'k', 'LineWidth', 1.5);
legend('零輸入響應','零狀態響應','全響應');
xlabel('t (s)'); ylabel('y(t)'); grid on;
title('二階系統響應分解');
Python 版同理用 scipy.signal.lsim 或手寫公式繪圖。
e(t)=e^{-at}u(t) → E(s)=1/(s+a)e(t)=sin(ωt)u(t) → E(s)=ω/(s²+ω²)只需換 E(s) 重做部分分式即可,流程完全一致。
掌握「拉普拉斯變換 → 部分分式 → 反變換 → 程式繪圖」這套標準流程,任何二階線性常係數微分方程的響應分解都能輕鬆搞定。