状态空间离散化matlab,状态空间方程离散化的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

5sysd = 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&4end{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越大,误差越大。如果时间步长取得过长,则需要检验一下离散化误差是否再接受范围内。

你可能感兴趣的:(状态空间离散化matlab)