状态空间离散化matlab,状态空间方程离散化的matlab处理
之前已經(jīng)簡單了解過狀態(tài)空間方程的離散化方法,對于二階等效電路模型來講,由于其本身各個(gè)方程之間不是耦合的,所以離散化計(jì)算過程并不是十分復(fù)雜,很容易就可以得到其狀態(tài)空間方程的離散形式。
但是對于某些狀態(tài)空間方程,比如圓柱電池的二狀態(tài)熱模型,由于方程本身是耦合的,所以無法直接通過公式推導(dǎo)就得到其離散化形式,這時(shí)就需要求助于matlab。
對于這樣一個(gè)連續(xù)方程:
$$ dfrac{dx}{dt}=Ax+Bu $$
通過[G,H]=c2d(F,G,ts);,便可以將其轉(zhuǎn)化為離散形式,其中時(shí)間步長為ts:
$$ x_{k+1}=Gx_{k}+Hu_{k} $$
G和H為A、B指定時(shí)間步長的離散化結(jié)果。
c2d函數(shù)過程實(shí)際上為之前“電池模型的狀態(tài)空間方程”一文中介紹的狀態(tài)空間方程的直接離散化方法,其具體的使用介紹參考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尚存在一些疑問,因?yàn)檫@種近似方法涉及$x_{k+1}$的值。是不是如果我們并不關(guān)注狀態(tài)值本身的話,只關(guān)心輸出值,可以將狀態(tài)方程和輸出方程一起使用Tustin這種method離散化。而如果我們關(guān)注的是狀態(tài)值$x_{k+1}$本身,而不是輸出值$y_{k}$的話,那就只能使用零階保持器。(疑問)
舉個(gè)例子
$$ 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 $$
將該連續(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
>>
當(dāng)然離散系統(tǒng)與其對應(yīng)的連續(xù)系統(tǒng)是存在誤差的,時(shí)間步長ts越大,誤差越大。如果時(shí)間步長取得過長,則需要檢驗(yàn)一下離散化誤差是否再接受范圍內(nèi)。
總結(jié)
以上是生活随笔為你收集整理的状态空间离散化matlab,状态空间方程离散化的matlab处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 华为存储学习笔记-3
- 下一篇: DeskPins v1.32 绿色汉化版