自动控制理论常用MATLAB函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
自动控制理论中常用MATLAB 函数
第一部分 建立数学模型
在MA TLAB 中,线性定常(linear time invariant, 简称为 LTI )系统可以用4种数学模型描述,即传递函数(TF)模型、零极点增益(ZPK)模型和状态空间(SS)模型以及SIMULINK 结构图。
前三种数学模型是用数学表达式表示的,且均有连续和离散两种类型,通常把它们统称为LTI 模型。
1.传递函数模型(TF 模型)
令单输入单输出线性定常连续和离散系统的传递函数分别为
11
10
1)
()()(a s a s
a s
b s b s
b s b s U s Y s G n n n
m m m
m ++++++++=
=
---
- (1-1)
和
11
10
1)
()()(a z a z
a z
b z b z
b z b z U z Y z G n n n m m m
m ++++++++==
---
- (1-2)
在MA TLAB 中,连续系统和离散系统的传递函数都用分子/分母多项式系数构成的两个行向量num 和den 表示,即
[]01
b b b num m
=,[]01
1
a a den n
-=
系统的传递函数模型用MA TLAB 提供的函数tf( )建立。
函数tf ( )不仅能用于建立系统传递函数模型,也能用于将系统的零极点增益模型和状态空间模型转换为传递函数模型。
该函数的调用格式如下:
G=tf(num,den) 返回连续系统的传递函数模型G 。
G=tf(num,den,Ts) 返回连续系统的传递函数模型G 。
其中,Ts 为采样周期,当Ts =-1或者Ts =[ ]时,系统的采样周期未定义。
Gtf=tf(G) 可将任意的LTI 模型G 转换为传递函数模型Gtf 。
例1-1 已知一个系统的传递函数为
6
1166
)(2
3
+++=
s s
s
s G
建立传递函数模型。
在命令窗中运行下列命令
>>num=6;den=[1 6 11 6];G=tf (num, den)
返回
Transfer function: 6 ---------------------- s^3 + 6 s^2 + 11 s + 6
2.零极点增益模型(ZPK 模型)
系统的零极点增益模型是传递函数模型的一种特殊形式。
令线性定常连续和离散系统的零极点形式的传递函数分别为
)
())(()())(()
()()(2121n m p s p s p s z s z s z s K
s U s Y s G ++++++==
(1-3)
和
)
())(()())(()
()()(2121n m p z p z p z z z z z z z K
z U z Y z G ++++++==
(1-4)
在MA TLAB 中,连续和离散系统的零点和极点都用行向量z 和p 表示,即
[]m z z z z
2
1
=,[]n p p p p
2
1
=。
系统的零极点增益模型用MA TLAB 提供的函数zpk ( )建立。
函数zpk( )不仅能用来建立系统零极点增益模型,也能用于将系统的传递函数模型和状态空间模型转换为零极点增益模型。
该函数的调用格式如下:
G=zpk(z,p,k) 返回连续系统的传递函数模型G 。
G=zpk(z,p,k,Ts) 返回离散系统的零极点增益模型G 。
Ts 为采样周期,当Ts =-1或者Ts =[]时,系统的采样周期未定义。
Gzpk=zpk(G) 可将任意的LTI 模型G 转换为零极点增益模型Gzpk 。
例1-2 已知系统的传递函数为
)
3)(2)(1(6
)(+++=
s s s s G
建立系统的零极点增益模型。
在命令窗中运行下列命令 >> z=[ ];p=[-1 -2 -3];k=6;G=zpk(z,p,k) 返回
Zero/pole/gain:
6
----------------- (s+1) (s+2) (s+3)
注意:无零点时,设z 为空。
3.状态空间模型(SS 模型)
令多输入多输出线性定常连续和离散系统的状态空间表达式分别为
)()()(t Bu t Ax t x
+= )()()(t Du t Cx t y += (1-5)
和
)()()1(k Bu k Ax k x +=+
)()()(k Du k Cx k y += (1-6)
在MA TLAB 中,连续系统和离散系统的状态空间模型都用MA TLAB 提供的函数ss ( )建立。
函数ss ( )不仅能用于建立系统的状态空间模型,也能用于将系统的传递函数模型和
零极点增益模型转换为状态空间模型。
该函数的调用格式如下:
G=ss(A,B,C,D) 返回连续系统的状态空间模型G 。
G=ss(A,B,C,D,Ts) 返回离散系统的状态空间模型G 。
Ts 为采样周期,当Ts =-1或者Ts =[]时,系统的采样周期未定义。
Gss=ss(G) 可将任意的LTI 模型G 转换为状态空间模型Gss 。
例1-3 已知系统的状态空间表达式为
u x x
⎥⎥
⎥
⎦
⎤
⎢⎢⎢⎣⎡+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---=100611
6
100010 []x y 00
6=
建立系统的状态空间模型。
在命令窗中运行下列命令
>> A=[0 1 0;0 0 1;-6 -11 -6];B=[0;0;1];C=[6 0 0];D=0;G=ss(A,B,C,D)
返回
a =
x1 x2 x3 x1 0 1 0 x2 0 0 1 x3 -6 -11 -6 b =
u1 x1 0 x2 0 x3 1
c =
x1 x2 x3 y1 6 0 0 d = u1
y1 0
Continuous-time model. 注意:D=0不能缺省。
4.模型转换
上述三种LTI 模型之间可以通过函数tf( ),zpk( )和ss( )相互转换。
线性定常系统的传递
函数模型和零极点增益模型是唯一的,但系统的状态空间模型是不唯一的。
函数ss( )只能将传递函数模型和零极点增益模型转换为一种指定形式的状态空间模型。
例1-4 已知系统的传递函数,建立TF 模型,将其转换为ZPK 模型和SS 模型。
再将转换得到的SS 模型转换为TF 模型。
2
545
)(2
3
+++=
s s
s
s G
在命令窗中运行下列命令 num=5;den=[1 4 5 2];Gtf=tf(num,den); Gzpk=zpk(Gtf) Gss=ss(Gtf) Gtf1=tf(Gss) 返回
Zero/pole/gain: 5 ------------- (s+2) (s+1)^2
a =
x1 x2 x3 x1 -4 -2.5 -0.5 x2 2 0 0 x3 0 2 0 b =
u1 x1 1 x2 0 x3 0 c =
x1 x2 x3 y1 0 0 1.25 d = u1 y1 0
Continuous-time model. Transfer function: 5 --------------------- s^3 + 4 s^2 + 5 s + 2
5. 函数tfdata( ), zpkdata( ), ssdata( )
函数tfdata( ) 可得到传递函数模型的分子分母多项式系数。
其调用格式为 [num,den]=tfdata(G ,’v ’)
其中G 为系统L TI 模型。
num 和den 分别为分子和分母多项式的系数向量。
函数zpkdata( ) 可得到零极点增益模型的零点、极点和增益。
其调用格式为
[z,p,k]=zpkdata(G ,’v ’)
其中G 为系统L TI 模型。
z 和p 分别为零点和极点向量,k 为增益。
函数ssdata( ) 可得到状态空间模型的系数矩阵。
其调用格式为 [A,B,C,D]=ssdata(G ,’v ’)
其中G 为系统L TI 模型。
A,B,C,D 为系数矩阵。
6. 模型的连接
1) 串联连接
设线性定常系统∑1和∑2的LTI 模型分别为1G 和2G 。
在MA TLAB 中, 两者的串联连接(参教材)可由下面命令实现。
G=G1*G2
其中G 为整个系统的LTI 模型。
多个系统的串联连接可由下面命令实现。
G=G1*G2*…*Gn 2) 并联连接
设线性定常系统∑1和∑2的LTI 模型分别为1G 和2G 。
在MA TLAB 中, 两者的并联连接(参教材)可由下面命令实现。
G=G1+G2
其中G 为整个系统的LTI 模型。
多个系统的并联连接可由下面命令实现。
G=G1+G2+…+Gn 3) 反馈连接
设线性定常系统∑1和∑2的LTI 模型分别为1G 和2G 。
在MA TLAB 中, 两者的反馈连接(参教材)可由MA TLAB 提供的函数feedback( )实现。
该函数的调用格式为: G=feedback(G1,G2,Sign)
其中G 为整个系统L TI 模型。
如果Sign=-1或省略Sign 变量,则表示负反馈。
如果Sign=1, 则表示正反馈。
例1-5 已知单位负反馈系统的开环传递函数为 1
1)(+=s s G
求闭环系统的传递函数。
在命令窗中运行下列命令 >> num=[1];den=[1 1];G=tf(num,den); >> GB=feedback(G ,1) 返回
Transfer function: 1
-----
s + 2
7. 状态空间表达式的线性变换
线性定常系统状态空间表达式为),,,(D C B A ∑,假设存在一个非奇异矩阵T 将原状态x 变换为z=Tx , 则状态z 对应的状态空间表达式为),,,(D C B A ∑,其中1
-=TAT
A ,
TB B =,1
-=CT
C 。
MA TLAB 提供函数ss2ss( )可完成状态空间模型的相似变换。
该函数调用格式为 Gt=ss2ss(G ,T)
其中G 为原状态空间模型。
T 为变换矩阵。
Gt 为经变换得到的状态空间模型。
例1-6 考虑一个系统,它的状态空间表达式为
u x x
⎥⎦
⎤
⎢⎣⎡+⎥⎦⎤⎢⎣⎡--=1132
10 []x y 01=
由于该系统的系统矩阵A 为友矩阵,所以可由其特征值构造变换矩阵。
令变换矩阵T
为1
21
11
-⎥⎦
⎤⎢
⎣⎡--=T 。
在命令窗中运行下列命令
>> A=[0 1;-2 -3];B=[1 1]';C=[1 0];G=ss(A,B,C,0); T=inv([1 1;-1 -2]); G1=ss2ss(G ,T) 返回 a =
x1 x2 x1 -1 0 x2 0 -2 b =
u1 x1 3 x2 -2 c =
x1 x2 y1 1 1 d = u1
y1 0
Continuous-time model.
8. 时间延迟系统的传递函数模型
带有延迟环节Ts
-e
的系统不具有有理函数的标准形式,在MA TLAB 中建立这类系统
的模型,要由一个属性设置函数set ()来实现。
该函数的调用格式为: set(G ,'InputDelay',T);
其中,T 为延迟时间。
由此修改后,模型G 就已具有时间延迟特性。
例1-12 已知系统的传递函数为
s
s s G 2e
1
1)(-+=
建立TF 模型。
在命令窗中运行下列命令
>> num=[1];den=[1 1];G=tf(num,den); >> T=[1];
>> set(G ,'InputDelay',T); >> G 返回
Transfer function: 1 exp(-1*s) * ----- s + 1
9. Simulink 建模
相关内容参阅有关书籍。
第二部分 系统分析
1. 系统响应的数值求解
函数step( ) 可直接求取线性连续系统的单位阶跃响应。
该函数的调用格式为: y=step(G ,t);
其中G 为给定系统LTI 模型,t 为时间向量。
通常取t=0:dt:t-end ,其中t-end 为终值时间,而dt 为时间步长。
y 为系统输出。
y=step(G);
这时时间向量t 自动生成。
[y,t,x]=step(G ,t);
[y,t,x]=step(G);
如果G 为状态空间模型,则x 为系统状态向量,否则x 将返回空矩阵。
step(G);
step(G ,t);
后两种格式不返回任何变量,而自动地绘制单位阶跃响应输出曲线。
例2-1 已知系统为
u x x ⎥⎦
⎤⎢⎣⎡+⎥⎦⎤⎢
⎣⎡--=1032
10 或 221
)(2
+++=s s s s G []x y 11=
初始状态为零,试绘制输出响应曲线,并确定性能指标。
在命令窗中运行运行命令,可建立状态空间模型 >> A=[0 1;-2 -2];B=[0;1];C=[1 1];D=0;Gss=ss(A,B,C,D); 或运行命令,建立传递函数模型
>> num=[1 1];den=[1 2 2];Gtf=tf(Gss);
也可将转换为传递函数,即在命令窗中输入 再运行
>> step(Gtf) 或 >> step(Gss)
返回响应曲线图 2.1,通过点击鼠标右键选择从菜单中选择Characteristics ,点击Peak Response (超调量),Settilng Time (调节时间),Rise Time (上升时间),Steady State (稳态),可得系统各性能指标。
Step Response
Time (sec)
A m p l i t u d e
0123456
0.1
0.2
0.3
0.4
0.5
0.6
0.7
System: Gss
Rise Time (sec): 0.599
System: Gss P eak amplitude: 0.604Overshoot (%): 20.8At time (sec): 1.55
System: Gss
Settling Time (sec): 3.46
System: Gss Final Value: 0.5
图2.1
函数impulse( ) 可直接求取线性系统的单位脉冲响应。
该函数的调用格式与函数step( )的调用格式相似。
函数lsim( ) 可直接求取线性系统在任意输入信号作用下的响应。
该函数的调用格式为:
y=lsim( G ,u,t)
其中u 为与时间向量t 对应的输入向量。
当然还可以和step( )函数一样有其它的调用格式。
函数initial( ) 可求解系统的零输入响应。
该函数的调用格式为: y=initial( G ,x0)
[y,t,x]=initial( G ,x0)
其中G 为状态空间模型,x0为初始状态。
例2-2 已知系统为
u x x
⎥⎦
⎤
⎢⎣⎡+⎥⎦⎤⎢⎣⎡--=1032
10 []x y 11=
初始状态为⎥⎦
⎤
⎢
⎣⎡-=11)0(x ,试求u(t)为单位阶跃函数时系统状态响应和输出响应,并绘制状
态响应曲线和输出响应曲线。
在命令窗中运行下列命令,建立状态空间模型,计算系统在初始状态作用下的状态响应和输出响应,并绘制相应的响应曲线。
>> A=[0 1;-2 -3]; B=[0;1]; C=[1 1]; D=0; G=ss(A,B,C,D); >>t=0:0.5:10; x0=[1;-1];
>>[yo,t,xo]=initial(G ,x0,t); plot(t,xo,':',t,yo,'-') 返回图2-2。
图2-2 图2-3
在命令窗中继续运行下列命令,计算系统在输入作用下的状态响应和输出响应,并绘制相应的响应曲线。
>>u=ones(size(t)); >>[yu,t,xu]=lsim(G ,u,t);
>>plot(t,xu,':',t,yu,'-') 返回图2-3。
再继续运行下列命令求系统总的状态响应和输出响应,并绘制相应的响应曲线。
>>y=yo+yu; x=xo+xu; plot(t,x,':',t,y,'-') 返回图2-4。
图2-4 图2-5 例2-3 已知系统
u x x
⎥⎦
⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡--=0265
10 或
568
2)(2
++-=s s s s G []x y 21=
求出系统在初始状态为零,且)0()(≥=-t e t u t
时系统的状态响应和输出响应。
在命令窗中运行下列命令
>>A=[0 1;-5 -6];B=[2;0];C=[1 2];D=0;G=ss(A,B,C,D);t=0:0.5:20;u=exp(-t); >>[y,t,x]=lsim(G ,u,t);plot(t,x,':k',t,y ,'-k')
可得状态响应和输出响应的数值解以及相应的曲线,如图2-6。
图2-6 图2-7
例2-4 已知系统
)(10)(116
.010
)1(k u k x k x ⎥⎦
⎤
⎢⎣⎡+⎥⎦⎤⎢⎣⎡
--=+ [])(11
)(k x k y -=
求初始状态为零时系统的单位阶跃响应。
编制程序%ex24求出系统的单位阶跃响应并绘制阶跃响应曲线。
该程序如下 %ex24
G=[0 1;-0.16 -1];H=[0;1];C=[1 -1];D=0; u=1;n=20;
y= dstep(G ,H,C,D,u,n); dstep(G ,H,C,D,u,n);
在命令窗中运行该程序后得到系统的阶跃响应曲线如图2-7。
2. 系统的能控性和能观测性分析
(1)线性定常系统状态能控性的判断
n 阶线性定常连续或离散系统),(B A ∑状态完全能控的充分必要条件是:能控性矩阵
[
]
B A
B
A A
B B
U
n c
1
2
-= 的秩为n 。
能控性矩阵可用MA TLAB 提供的函数ctrb( )自动产生,其调用格式为: Uc=ctrb(A,B)
其中A,B 分别为系统矩阵和输入矩阵,c U 为能控性矩阵。
能控性矩阵的秩即)(c U rank 称为能控性指数,表示系统能控状态变量的数目,可由MA TLAB 提供的函数rank( )求出。
例2-5 判断系统的能控性。
u x x
⎥⎥⎥
⎦
⎤
⎢⎢
⎢⎣⎡--+⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=111112
31
020231 x y ⎥⎦
⎤
⎢
⎣⎡=01
112 在命令窗中运行下列命令
>> A=[1 3 2;0 2 0;0 1 3]; B=[2 1; 1 1;-1 -1]; Uc=ctrb(A,B); rank(Uc) 返回
ans = 2
因为rank(Uc)=2≠n ,所以系统的状态不完全能控。
(2)线性定常系统状态能观测性的判断
n 阶线性定常连续或离散系统),(C A ∑状态完全能观测的充分必要条件是:能观测性矩
阵⎥⎥⎥
⎥⎥
⎥⎦
⎤
⎢⎢⎢⎢⎢⎢⎣⎡=-1
n 2
CA CA
CA C o
V 的秩为n 。
能观测性矩阵可以用MA TLAB 提供的函数obsv( )自动产生,其调用格式为: V o=obsv(A,C)
其中A, C 分别为系统矩阵和输出矩阵,o V 为能观测性矩阵。
能观测性矩阵的秩即)(o V rank 称为能观测性指数,表示系统能观测状态变量的数目。
可由MA TLAB 提供的函数rank( )求出。
例2-6 判断例2-5中系统的能观测性。
在命令窗中运行下列命令
>> A=[1 3 2;0 2 0;0 1 3]; C=[2 1 1;0 1 0]; V o=obsv(A,C); rank(V o) 返回 ans=
3
因为rank(V o)=3=n ,故系统状态完全能观测。
3. 系统的稳定性分析
(1)根据系统的极点和特征值判定稳定性
线性定常连续系统渐近稳定的充分必要条件是:系统传递函数的全部极点均位于S 左半平面;或系统矩阵A 的特征值均具有负实部。
利用MA TLAB 提供的下列几种函数可以确定系统的极点和特征值。
函数eig( )的调用格式为:
V=eig(A) 返回方阵A 的特征值。
函数roots( )的调用格式为:
roots(den)
其中den 为多项式的系数行向量。
可计算多项式方程的解。
函数pole ( )的调用格式为: pole(G)
其中G 为系统的L TI 对象。
可计算系统传递函数的极点。
函数pzmap( )的调用格式为: pzmapG)
其中G 为LTI 对象。
绘制系统的零点和极点。
例2-7 已知系统
u x x
⎥⎦
⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡--=0265
10 或
568
2)(2
++-=s s s s G []x y 21=
判断系统的稳定性。
在命令窗中运行下列命令
>> A=[0 1;-5 -6];B=[2;0];C=[1 2];D=0;G=ss(A,B,C,D); >> eig(A) 返回
ans =
-1
-5
即系统的特征值为-1,-5,故系统是稳定的。
或在命令窗中运行下列命令 >> num=[2 -8];den=[1 6 5];Gtf=tf(num,den); >> roots(den) 返回 ans =
-5
-1
即系统的极点为-1,-5,故系统是稳定的。
(2)用李氏第二法判定稳定性
线性定常系统为),,,(D C B A ∑。
若对于任意给定的对称正定矩阵Q ,存在唯一满足Lyapunov 方程Q PA P A T
-=+正定矩阵P ,则系统大范围渐近稳定。
可用MA TLAB 提供的函数lyap( )求解Lyapunov 方程,该函数调用格式为: P=lyap(A,Q) 返回矩阵P
矩阵P 的符号性质可用函数posdef( )判定。
该函数的调用格式为: S=posdef(P)
该函数的程序如下。
function s=posdef(P) %判定矩阵的正定性 r=length(P); for i=1:r
pp(i)=det(P(1:i,1:i)); end
k=find(pp<0);j=find(pp==0);
if isempty(j)&isempty(k)
s='matrix is positive definite matrix'; elseif isempty(k)
s='matrix is half positive definite matrix'; else
s='non-definite matrix';
end
例2-8 判定例2-7中系统的稳定性。
在命令窗中运行下列命令
>> A=[0 1;-5 -6];Q=eye(2);P=lyap(A,Q) s=posdef(P) 返回
P =
1.0000 -0.5000 -0.5000 0.5000 s =
matrix is positive definite matrix
4. 绘制系统的根轨迹
利用MA TLAB 提供的函数rlocus()可以绘制系统的根轨迹。
该函数的调用格式有以下几种:
rlocus(num,den) rlocus(num,den,K) rlocus(G)
rlocus(G ,K)
其中,G 为开环系统的对象模型,K 为用户自己选择的增益向量。
如果用户不给出K 向量,则该命令函数会自动选择K 向量。
MA TLAB 中还有一个函数rlocfind(),该函数允许用户求取根轨迹上指定点处的开环增益值,并将该增益下所有的闭环极点显示出来。
这个函数的调用函数为: [K,P]=rlocus(G ,K)
例2-9 已知系统的开环传递函数模型为
)
2)(1()(++=
s s s K
s G
绘制系统的根轨迹。
在命令窗中运行下列命令
>> num=[1];den=[conv([1,1],[1,2]),0];G=tf(num,den); >> rlocus(G); >> grid
返回根轨迹图2-8,继续运行下面语句, >> [K,P]=rlocfind(G)
并在根轨迹图上点击一点,返回 Select a point in the graphics window
selected_point =
0.2275 + 1.8758i K =
12.3349 P =
-3.4546 0.2273 + 1.8759i 0.2273 - 1.8759i
Root Locus
Real Axis
I m a g i n a r y A x i s
-6
-5
-4
-3
-2-10
1
2
-4-3
-2-10
12340.16
0.340.50.640.760.860.940.9850.16
0.34
0.50.640.76
0.860.940.9851
23456
图2-8
5. 绘制系统的奈奎斯特图
利用MA TLAB 提供的函数nyquist()可以绘制系统的根轨迹。
当命令不包含左端返回变量时,函数nyquist()仅产生奈奎斯特图,调用格式有以下几种: nyquist(num,den) nyquist(num,den,w) nyquist(G)
nyquist(G ,w)
其中,w 为用户给出的频率向量,在这些频率点上,将对系统的频率响应进行计算。
若没有指定的w 向量,则该函数自动选择频率向量进行计算。
当命令包含左端返回变量时,函数nyquist()不产生奈奎斯特图,而是将计算结果返回到矩阵re 、im 和w 中。
矩阵re 和im 分别表示频率响应的实部和虚部,它们都是由向量w 中指定的频率点计算得到的。
调用格式有以下几种: [re,im,w]=nyquist(G) [re,im,w]=nyquist(G ,w) 例2-10 给定二阶典型环节
1
8.01)(2
++=
s s s G
试绘制奈奎斯特图。
在命令窗中运行下列命令
>> num=[1];den=[1 0.8 1];nyquist(num,den) 返回奈奎斯特图2-9。
-1
-0.50
0.51 1.5
-1.5-1
-0.5
0.51
1.5
Nyquist Diagram
Real Axis
I m a g i n a r y A x i s
图2-9
6. 绘制系统的伯德图
利用MA TLAB 提供的函数bode( )可以绘制系统的伯德图。
当命令不包含左端返回变量时,函数bode( )直接产生伯德图。
当命令包含左端返回变量时,函数bode( )计算出的幅值和相角将返回到相应的矩阵中,这时不产生伯德图。
调用格式有以下几种:
[mag,phase,w]=bode(num,den)
[mag,phase,w]=bode(num,den,w) [mag,phase,w]=bode(G) [mag,phase,w]=bode(G ,w)
其中,mag\phase 包含系统频率响应的幅值和相角,这些幅值和相角是在用户指定的频率点上计算得到的。
如果用户不指定频率w ,MA TLAB 会自动产生w 向量。
相角的单位是度,幅值的单位不是分贝。
例2-11 已知系统的开环传递函数模型为
)
7()1(10)(++=
s s s s G
绘制系统的伯德图。
在命令窗中运行下列命令
>> num=10*[1 1];den=[1 7 0];bode(num,den) >> grid
返回伯德图2-10。
-40-200204060M a g n i t u d e (d B )10
-2
10
-1
10
10
1
10
2
10
3
-90
-60
-30
P h a s e (d e g )
Bode Diagram
Frequency (rad/sec)
图2-10
利用MA TLAB 提供的函数margin( )可以不仅绘制系统的伯德图,而且可以求取系统的幅值裕度和相角裕度。
调用格式如下:
[Gm,Pm,Wcg,Wcp]=margin(G)
其中,Gm 为幅值裕度的值;Wcg 为相角穿越频率;Pm 为相角裕度的值;Wcp 为幅值穿越频率。
例2-12 对例2-11中系统求相应的幅值裕度和相角裕度。
在命令窗中运行下列命令 >> num=10*[1 1];den=[1 7 0];G=tf(num,den); >> margin(G)
>> grid
返回伯德图2-11。
-40-200204060M a g n i t u d e (d B )10
-2
10
-1
10
10
1
10
2
10
3
-90
-60
-30
P h a s e (d e g )
Bode Diagram
Gm = Inf , P m = 126 deg (at 7.27 rad/sec)
Frequency (rad/sec)
图2-11
在命令窗中运行下列命令 >> [Gm,Pm,Wcg,Wcp]=margin(G); >> [Gm,Pm,Wcg,Wcp] 返回 ans =
Inf 126.0768 NaN 7.2725
第三部分 系统的综合
1. 状态反馈和输出反馈
设线性定常系统的状态空间表达式为
Bu Ax x
+= x y C =
如果采用状态反馈控制规律Kx r u -=,其中r 是参考输入,则状态反馈闭环系统的状
态空间表达式为
Br x BK A x
+-=)( x y C =
其传递函数为B BK A sI C G k 1)]((---=
如果采用输出反馈控制律Hy r u -=,其中r 是参考输入,则输出反馈闭环系统的状态空间表达式为
Br x BHC A x +-=)( x y C = 其传递函数为B BHC A sI C G k 1)](([---=。
2. 极点配置
如果SISO 线性定常系统完全能控,则可通过适当的状态反馈, 将闭环系统极点配置到任意期望的位置。
假定期望的闭环极点为1λ,2λ,…,n λ,则闭环系统的特征方程为
)())(()()(21*
n s s s BK A sI s f λλλ---=--=
*
*11
*
1n n n n
a s a s
a s ++++=--
原系统的特征方程为
n n n n a s a s
a s
A sI s f ++++=-=--11
1)(
状态反馈矩阵K 可由下面两种方法得出。
1) 1
1
*
][---=c
T
U L a a K
其中 [
]
1
*
11*
1*
*
][a a a a a a a a n n n
n T
---=---
[
]
B A
B A AB B
U
n c
1
2
-=
⎥⎥⎥⎥⎥
⎥⎦
⎤⎢⎢⎢⎢⎢⎢⎣⎡=----11
1
1132
121a a a a a a L n n n n
2) [])(10
*
1A f U
K c
-= (Ackermann 公式)
其中 I a A a A a A A f n n n n
*
*11
*
1*
)(++++=--
MA TLAB 提供的函数acker( )是用Ackermann 公式求解状态反馈阵K 。
该函数的调用格式为:
K=acker(A,B,P)
其中A 和B 分别为系统矩阵和输入矩阵。
P 是期望极点构成的向量。
MA TLAB 提供的函数place( )也可求出状态反馈阵K 。
该函数的调用格式为: K=place(A,B,P)
函数place( )还适用于多变量系统极点配置,但不适用含有多重期望极点的问题。
函数acker( )不适用于多变量系统极点配置问题,但适用于含有多重期望极点问题。
例3-1 已知系统的状态方程为
u x x
⎥⎦
⎤⎢⎣⎡+⎥⎦⎤⎢⎣⎡-=2111
12 试求出使闭环系统极点为-1, 和-2的状态反馈阵K 。
在命令窗中运行下列命令
>> A=[2 1;-1 1];B=[1;2];p=[-1 -2];k=acker(A,B,p) 返回 k =
4 1
或运行下列命令
>> A=[2 1;-1 1];B=[1;2];p=[-2 -1];k=place(A,B,p) 返回 k =
4.0000 1.0000
3.状态观测器
1) 全维状态观测器
如果线性定常系统),,(C B A ∑完全能观测,则可构造全维(基本)观测器。
全维(基本)状态观测器的状态方程为
Ly Bu x LC A x
++-=ˆ)(ˆ 观测器的反馈矩阵L 为[])()
(10
*1
T
o T o T
A f V L -= ,其中o V 为系统的能观测矩阵。
)())(()(21*
n o s s s s f λλλ---= ,其中1λ,2λ,…,n λ 为期望的状态观测器的极点。
观测器设计是极点配置的对偶问题,故可利用函数acker( )和place( )进行求解。
例3-2 已知系统的状态空间表达式为
u x x
⎥⎦
⎤
⎢⎣⎡+⎥⎦⎤⎢⎣⎡--=1020
11
[]x y 02=
设计一个状态观测器使其极点为-10,-10。
在命令窗中运行下列命令
>> A=[-1 1;0 -2];B=[0 1]';C=[2 0];p=[-10 -10];L=(acker(A',C',p))’ 返回 L =
8.5000
32.0000
利用函数simobsv( )可以仿真状态观测器所观测到的状态。
该函数的调用格式为: [Xo,X,t]=simobsv(G ,L)
其中G 为系统的状态空间模型,L 为观测器的反馈矩阵。
Xo 为重构状态的阶跃响应,x 为原系统状态的阶跃响应,t 为函数自动选择的时间向量。
该函数的程序如下:
function [xo,x,t]=simobsv(G ,L) %仿真观测器的状态 [y,t,x]=step(G);
G=ss(G);A=G .a;B=G .b;C=G .c;D=G .d; [y1,xo1]=step((A-L*C),B,C,D,1,t); [y2,xo2]=lsim((A-L*C),L,C,D,y,t);
xo=xo1+xo2;
现在仿真上面的求得的状态观测器的状态。
运行下列命令 >> [xo,x,t]=simobsv(ss(A,B,C,0),L);plot(t,x,'-k',t,xo,':r')
返回原系统和状态观测器的单位阶跃响应曲线,如图3-1。
图3-1 单位阶跃响应曲线 图3-2 反馈矩阵响应曲线 再选观测器的反馈矩阵为⎥⎦
⎤
⎢⎣⎡-=202L ,运行上述命令得到图3-2。
可见此时的估计不如上面的效果好。