从状态方程导出微分方程
2023年6月20日
1. 基本方法
状态空间表达式:
x ˙ ( t ) = A x ( t ) + B u ( t ) y ( t ) = C x ( t ) + D u ( t ) \begin{aligned} &\dot{ x}(t)={ A }{ x }(t)+{ B }{ u } (t) \\ &{ y }(t)={ C } { x }(t)+{ D } { u }(t) \end{aligned} x˙(t)=Ax(t)+Bu(t)y(t)=Cx(t)+Du(t)
矩阵 D D D的列数和矩阵 B B B相等,矩阵 D D D的行数和矩阵 C C C相等。
拉氏变换下:
s X ( s ) − X ( 0 ) = A X ( s ) + B U ( s ) Y ( s ) = C X ( s ) + D U ( s ) \begin{align*} s{ X}(s)-{ X}(0)=&{ A }{ X }(s)+{ B }{ U } (s)\\ { Y }(s)=&{ C } { X }(s)+{ D } { U }(s) \end{align*} sX(s)−X(0)=Y(s)=AX(s)+BU(s)CX(s)+DU(s)
零状态下可以推出:
Y ( s ) = [ C ( s I − A ) − 1 B + D ] U ( s ) = G ( s ) U ( s ) \begin{align*} { Y}(s)=&[{ C}(s{ I}-{ A})^{-1}{ B}+{ D}]{ U}(s) \\ \\ =&{ G}(s){ U}(s) \end{align*} Y(s)==[C(sI−A)−1B+D]U(s)G(s)U(s)
所以传递函数矩阵:
G ( s ) = C ( s I − A ) − 1 B + D { G}(s)={ C}(s{ I}-{ A})^{-1}{ B}+{ D} G(s)=C(sI−A)−1B+D
clc;clear
A = [0 1 0; 0 -4 3; -1 -1 -2]; % 一个MIMO的系统示例
B = [0 0; 1 0; 0 1];
C = [1 0 0; 0 0 1];
D = [0 0 ;0 0];syms s
sI = s * eye(size(A));
Gs = C*((sI-A)^-1)*B+D % 求传递函数矩阵的公式
pretty(Gs)
代码对于SISO的系统也能使用。
matlab提供了一个现成的函数,ss2tf,可以直接得到系数,
[N1, D1] = ss2tf(A, B, C, D, 1) % 第一个输入对应的 y1 和 y2 的传递函数
注意这里得到的是相当于 u 2 ( s ) = 0 u_2(s)=0 u2(s)=0 时候 y 1 ( s ) y_1(s) y1(s)和 y 2 ( s ) y_2(s) y2(s)的传递函数,N1第一行是 y 1 ( s ) y_1(s) y1(s)传递函数分母的系数,第二行是 y 2 ( s ) y_2(s) y2(s)传递函数分母的系数。
特征方程:
poly2sym(D1, s)
题一嘴,这个函数如果第一个输入的列数大于一,会按先列后行的方式分配系数。
2. 电路与符号函数
上面的代码也可以推导符号函数,注意符号函数除法分母的括号不要漏写:
syms s R C1 C2 L
A = [-1/(C1*R), 0, -1/C1; 0, 0, 1/C2; 1/L, -1/L, 0]
B = [1/(C1*R); 0; 0];
C = [1, -1, 0];
D = 0;
sI = s * eye(size(A));
Gs = C*((sI-A)^-1)*B+D; % 求传递函数矩阵的公式
pretty(simplify(Gs))
一般有几个电容+电感,就有几个状态变量,即几阶电路。电容的电压、电感的电流常作为状态变量。但当两个电容并联,或者两个电感串联时,可以合并成一个状态变量。