状态空间方程离散化的MATLAB处理

之前已经简单了解过状态空间方程的离散化方法,对于二阶等效电路模型来讲,由于其本身各个方程之间不是耦合的,所以离散化计算过程并不是十分复杂,很容易就可以得到其状态空间方程的离散形式。

但是对于某些状态空间方程,比如圆柱电池的二状态热模型,由于方程本身是耦合的,所以无法直接通过公式推导就得到其离散化形式,这时就需要求助于matlab。

对于这样一个连续方程:
$$ \dfrac{dx}{dt}=Ax+Bu $$
通过[G,H]=c2d(F,G,ts);,便可以将其转化为离散形式,其中时间步长为ts:
$$ x_{k+1}=Gx_{k}+Hu_{k} $$
G和H为A、B指定时间步长的离散化结果。

c2d函数过程实际上为之前“电池模型的状态空间方程”一文中介绍的状态空间方程的直接离散化方法,其具体的使用介绍参考Mathworks文档。具体格式如下:

1
2
3
4
5
sysd = c2d(sys,Ts)
sysd = c2d(sys,Ts,method)
sysd = c2d(sys,Ts,opts)
[sysd,G] = c2d(sys,Ts,method)
[sysd,G] = c2d(sys,Ts,opts)

其中method缺省值是零阶保持器。除了零阶保持器,还有一阶保持器、Tustin等等方法可以选择。但是对于Tustin尚存在一些疑问,因为这种近似方法涉及$x_{k+1}$的值。是不是如果我们并不关注状态值本身的话,只关心输出值,可以将状态方程和输出方程一起使用Tustin这种method离散化。而如果我们关注的是状态值$x_{k+1}$本身,而不是输出值$y_{k}$的话,那就只能使用零阶保持器。(疑问)

举个例子

$$ x’=\begin{bmatrix}
2 & -1 & -1 \\
0 & -1 & 0 \\
0 & 2 & 1
\end{bmatrix}x+\begin{bmatrix}
7 \\
2 \\
3
\end{bmatrix}u$$
$$ y=\begin{bmatrix} 1&2&4\end{bmatrix}x $$
将该连续方程离散化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
>> A=[2 -1 -1; 0 -1 0;0 2 1];
>> B=[7 2 3]';
>> C=[1 2 4];
>> D=0;
>> [G1,H1,Cd1,Dd1]=c2dm(A,B,C,D,0.1,'zoh')

G1 =

1.2214 -0.1162 -0.1162
0 0.9048 0
0 0.2003 1.1052


H1 =

0.7473
0.1903
0.3355


Cd1 =

1 2 4


Dd1 =

0

>> [G2,H2,Cd2,Dd2]=c2dm(A,B,C,D,0.1,'tustin')

G2 =

1.2222 -0.1170 -0.1170
0 0.9048 0
0 0.2005 1.1053


H2 =

0.7485
0.1905
0.3358


Cd2 =

1.1111 2.2473 4.1520


Dd2 =

1.2364

>> [G,H]=c2d(A,B,0.1)

G =

1.2214 -0.1162 -0.1162
0 0.9048 0
0 0.2003 1.1052


H =

0.7473
0.1903
0.3355

>>

当然离散系统与其对应的连续系统是存在误差的,时间步长ts越大,误差越大。如果时间步长取得过长,则需要检验一下离散化误差是否再接受范围内。

更多关于离散设计的内容。以后慢慢看。