从状态方程导出微分方程
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))
一般有几个电容+电感,就有几个状态变量,即几阶电路。电容的电压、电感的电流常作为状态变量。但当两个电容并联,或者两个电感串联时,可以合并成一个状态变量。