Matlab与控制系统仿真部分习题答案.docx
《Matlab与控制系统仿真部分习题答案.docx》由会员分享,可在线阅读,更多相关《Matlab与控制系统仿真部分习题答案.docx(29页珍藏版)》请在冰豆网上搜索。
Matlab与控制系统仿真部分习题答案
【4.2】程序:
num=[5,0];den=conv([1,1],conv([1,2],[1,3]));
[numc,denc]=cloop(num,den);
[z,p,k]=tf2zp(numc,denc);
[A,B,C,D]=tf2ss(numc,denc);
g_zp=zpk(z,p,k)
g_tf=tf(numc,denc)
g_ss=ss(A,B,C,D)
运行结果:
Zero/pole/gain:
5s
----------------------------------
(s+0.4432)(s^2+5.557s+13.54)
Transferfunction:
5s
----------------------
s^3+6s^2+16s+6
a=
x1x2x3
x1-6-16-6
x2100
x3010
b=
u1
x11
x20
x30
c=
x1x2x3
y1050
d=
u1
y10
【4.3】程序:
A=[000-1;100-2;010-3;001-4];
B=[0;0;0;1];
C=[1000];
g_ss=ss(A,B,C,D)
[num,den]=ss2tf(A,B,C,D);
g_tf=tf(num,den)
[z,p,k]=ss2zp(A,B,C,D);
g_zpk=zpk(z,p,k)
运行结果:
a=
x1x2x3x4
x1000-1
x2100-2
x3010-3
x4001-4
b=
u1
x10
x20
x30
x41
c=
x1x2x3x4
y11000
d=
u1
y10
Continuous-timemodel.
Transferfunction:
-3.109e-015s^3-s^2-3.331e-015s-4.441e-016
-------------------------------------------------
s^4+4s^3+3s^2+2s+1
Zero/pole/gain:
-s^2
----------------------------------------------
(s+0.6724)(s+3.234)(s^2+0.0936s+0.4599)
【5.1】
(1)程序
num=[0,10];
den=conv([1,0],[1,7,17]);
[numc,denc]=cloop(num,den,-1);
G=tf(numc,denc)
[y,t]=step(G);
plot(t,y,'b-')
C=dcgain(G);
n=1;
whiley(n)<0.1*C
n=n+1;
end
m=1;
whiley(m)<0.9*C
m=m+1;
end
risetime=t(m)-t(n)
[Y,k]=max(y);
percentovershoot=100*(Y-C)/C
i=length(t);
while(y(i)>0.98*C)&(y(i)<1.02*C)
i=i-1;
end
settlingtime=t(i)
运行结果:
Transferfunction:
10
-----------------------
s^3+7s^2+17s+10
risetime=
2.7312
percentovershoot=
-0.4399
settlingtime=
5.1372
图:
(2)程序
k=[10,100,1000];
t=linspace(1,20,200);
num=1;
den=conv([1,0],[1,7,17]);
forj=1:
3;
s1=tf(num*k(j),den);
sys=feedback(s1,1)
y(:
j)=step(sys,t);
end
plot(t,y(:
1),'r',t,y(:
2),'b',t,y(:
3),'g')
gtext('k=10');gtext('k=100');gtext('k=1000')
运行结果:
Transferfunction:
10
-----------------------
s^3+7s^2+17s+10
Transferfunction:
100
------------------------
s^3+7s^2+17s+100
Transferfunction:
1000
-------------------------
s^3+7s^2+17s+1000
图:
图:
【6.1】程序:
(1)
num1=[1,1];
den1=conv([1,0,0],conv([1,2],[1,4]));
sys1=tf(num1,den1)
rlocus(sys1)
运行结果:
(2)
num2=[1,1];
den2=conv([1,0],conv([1,-1],[1,4,16]));
sys2=tf(num2,den2)
rlocus(sys2)
运行结果:
(3)
num3=[1,8];
den3=conv([1,0,0],conv([1,3],conv([1,5],conv([1,7],[1,15]))));
sys3=tf(num3,den3)
rlocus(sys3)
运行结果:
【6.3】
程序:
num=[1,2];
den=conv([1,0],conv([1,4],conv([1,8],[1,2,5])));
sys=tf(num,den)
rlocus(sys)
[k,poles]=rlocfind(sys)
运行结果:
Transferfunction:
s+2
---------------------------------------
s^5+14s^4+61s^3+124s^2+160s
Selectapointinthegraphicswindow
selected_point=
0.0296+2.2826i
k=
135.8815
poles=
-7.3248
-5.4104
0.0145+2.3021i
0.0145-2.3021i
-1.2939
图:
【7.3】
程序
(1)画波特图
num=[50];
den=conv([1,0],conv([1,10],[3,1]));
sys=tf(num,den)
sys1=feedback(sys,1)
bode(sys)
grid
图
(1)
程序
(2)
画奈奎斯特图
num=[50];
den=conv([1,0],conv([1,10],[3,1]));
sys=tf(num,den)
sys1=feedback(sys,1)
nyquist(sys)
grid
图
(2)
程序(3)画零极点图
num=[50];
den=conv([1,0],conv([1,10],[3,1]));
sys=tf(num,den)
sys1=feedback(sys,1)
pzmap(sys1)
gird
图(3)
程序(4)
计算相角裕量和幅值裕量
num=[50];
den=conv([1,0],conv([1,10],[3,1]));
sys=tf(num,den)
sys1=feedback(sys,1)
[gm,pm,wcg,wcp]=margin(sys)
运行结果
Transferfunction:
50
---------------------
3s^3+31s^2+10s
Transferfunction:
50
--------------------------
3s^3+31s^2+10s+50
gm=
2.0667
pm=
7.5615
wcg=
1.8257
wcp=
1.2645
程序(5)
绘制阶跃响应曲线
num=[50];
den=conv([1,0],conv([1,10],[3,1]));
sys=tf(num,den)
sys1=feedback(sys,1)
step(sys1)
图(5)
【7.4】
程序如下:
num=[300];
den=conv([1,0,0],conv([0.2,1],[0.02,1]));
sys=tf(num,den)
margin(sys)
grid
波特图如下:
【9.3】程序:
A=[-22-1;0-20;1-40];
B=[0;0;1];
C=[1,0,0];
D=0;
M=ctrb(A,B)
m=rank(M)
ifm==3;
disp('系统可控')
else
disp('系统不可控')
end
N=obsv(A,C)
n=rank(N)
ifn==3;
disp('系统可观')
else
disp('系统不可观')
end
sys=ss(A,B,C,D)
[num,den]=ss2tf(A,B,C,D)
sys1=tf(num,den)
[z,p,k]=ss2zp(A,B,C,D)
运行结果:
M=
0-12
000
10-1
m=
2
系统不可控
N=
100
-22-1
3-42
n=
2
系统不可观
a=
x1x2x3
x1-22-1
x20-20
x31-40
b=
u1
x10
x20
x31
c=
x1x2x3
y1100
d=
u1
y10
Continuous-timemodel.
num=
00-1-2
den=
1452
Transferfunction:
-s-2
---------------------
s^3+4s^2+5s+2
z=
-2
p=
-1
-1
-2
k=-1
图形:
【10.1】
(1)程序:
A=[0,1,0,0;0,5,0,0;0,0,-7,0;0,0,0,-8];
B=[0;1;0;1];
C=[1,2,3,4];
D=zeros(1,1);
G_ss=ss(A,B,C,D)
运行结果:
a=
x1x2x3x4
x10100
x20500
x300-70
x4000-8
b=
u1
x10
x21
x30
x41
c=
x1x2x3x4
y11234
d=
u1
y10
(2):
程序:
[num1,den1]=ss2tf(A,B,C,D);
p=roots(den1)
i=0;
fork=1:
1:
length(p)
ifreal(p(k))>0
i=i+1;
end
end
ifi>0
disp('系统不稳定');
else
disp('系统稳定');
end
运行结果:
p=
0
5.0000
-8.0000
-7.0000
系统不稳定
(3)(4)程序:
AA=[0,1,0;0,5,0;0,0,-8];
BB=[0;1;1];
P=[-1,-2,-8];
K=acker(AA,BB,P);
i=4;
K(4)=0;
K
pp=eig(A-B*K)
sys1=tf(num1,den1);
[y1,t]=step(sys1);
plot(t,y1)
holdon
A_feedback=A-B*K;
[num2,den2]=ss2tf(A_feedback,B,C,D);
sys2=tf(num2,den2);
[y2,t]=step(sys2);
plot(t,y2,'r')
grid
gtext('反馈前')
gtext('反馈后')
运行结果:
K=
2800
pp=
-8
-2
-1
-7
图形:
【13.1】程序:
A=[0,1;0,0];
B=[0;1];
C=[1,0];
D=zeros(1,1);
G_ss=ss(A,B,C,D)
M=ctrb(A,B);
ifrank(M)==2
disp('系统完全能控');
else
disp('系统不完全能控');
end
S=[1,0];
N=obsv(A,S);
ifrank(N)==2
disp('(A,S)可观测');
else
disp('(A,S)不可观测');
end
R=1;
Q=[1,0;0,0];
[K,P,E]=Lqr(A,B,Q,R)
A_new=A-B*K;
G_new=ss(A_new,B,C,D);
t=linspace(0,5,100)';
y1=step(G_ss,t);
y2=step(G_new,t);
plot(t,y1,'r:
',t,y2,'b-')
grid
gtext('反馈前')
gtext('反馈后')
运行结果:
a=
x1x2
x101
x200
b=
u1
x10
x21
c=
x1x2
y110
d=
u1
y10
Continuous-timemodel.
系统完全能控
(A,S)可观测
K=
1.00001.4142
P=
1.41421.0000
1.00001.4142
E=
-0.7071+0.7071i
-0.7071-0.7071i
图形: