首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

二階微分方程全響應/零輸入/零狀態響應求解:從建模到 MATLAB 仿真完整流程

     編輯:程式設計疑難解答

課堂作業常要求:自行設計二階微分方程 y''(t) + a1 y'(t) + a0 y(t) = e(t),給定邊界條件 y(0-), y'(0-) 與激勵訊號(指數、階躍、正弦),求零輸入響應、零狀態響應與全響應並畫連續波形。這其實是經典線性系統理論練習,按部就班即可完成。

步驟 1:確定參數與激勵

例如選擇:
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)。

步驟 2:拉普拉斯域求解

方程變換:
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)]

步驟 3:部分分式展開

Y(s) = 3/2·1/s - 2·1/(s+1) + 1/2·1/(s+2)

步驟 4:反拉普拉斯得時域響應

  • 零輸入響應(僅初始條件,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}

步驟 5:MATLAB / Python 畫圖驗證

% 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) 重做部分分式即可,流程完全一致。

掌握「拉普拉斯變換 → 部分分式 → 反變換 → 程式繪圖」這套標準流程,任何二階線性常係數微分方程的響應分解都能輕鬆搞定。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved