MATLAB控制系统仿真计算(共25页).doc
精选优质文档-倾情为你奉上一、 控制系统的模型与转换1 请将下面的传递函数模型输入到matlab环境。 ,T=0.1s>> s=tf('s'); G=(s3+4*s+2)/(s3*(s2+2)*(s2+1)3+2*s+5); G Transfer function: s3 + 4 s + 2-s11 + 5 s9 + 9 s7 + 2 s6 + 12 s5 + 4 s4 + 12 s3>> num=1 0 0.56; den=conv(1 -1,1 -0.2 0.99); H=tf(num,den,'Ts',0.1) Transfer function: z2 + 0.56-z3 - 1.2 z2 + 1.19 z - 0.992 请将下面的零极点模型输入到matlab环境。请求出上述模型的零极点,并绘制其位置。 ,T=0.05s>>z=-1-j -1+j; p=0 0 -5 -6 -j j; G=zpk(z,p,8) Zero/pole/gain: 8 (s2 + 2s + 2)-s2 (s+5) (s+6) (s2 + 1)>>pzmap(G)>> z=0 0 0 0 0 -1/3.2 -1/2.6; p=1/8.2; H=zpk(z,p,1,'Ts',0.05) Zero/pole/gain:z5 (z+0.3125) (z+0.3846)- (z-0.122) Sampling time: 0.05>>pzmap(H)二、 线性系统分析1. 请分析下面传递函数模型的稳定性。 >> num=1;den=1 2 1 2;G=tf(num,den);eig(G)'ans =-2.0000 0.0000 - 1.0000i 0.0000 + 1.0000i可见,系统有两个特征根在虚轴上,一个特征根在虚轴左侧,所以系统是临界稳定的。>> num=3 1;den=300 600 50 3 1;G=tf(num,den);eig(G)'ans = -1.9152 -0.14140.0283 - 0.1073i 0.0283 + 0.1073i可见,有两个特征根在虚轴右侧,所以系统是不稳定的。2. 请判定下面离散系统的稳定性。 >> num=-3 2; den=1 -0.2 -0.25 0.05; H=tf(num,den,'Ts',0.1); eig(H) abs(eig(H) ans = -0.5000 0.5000 0.5000 0.50000.2000 0.2000可以看出,由于各个特征根的模均小于1,所以可以判定闭环系统是稳定的。>> z=tf('z',0.1); H=(2.12*z-2+11.76*z-1+15.91)/;(z-5-7.368*z-4-20.15*z-3+102.4*z-2+80.39*z-1-340); eig(H) abs(eig(H) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4.1724 4.1724 0.3755 + 0.1814i 0.4170 0.3755 - 0.1814i 0.4170 -0.5292 0.5292 -0.2716 0.2716 0.1193 0.1193 可以看出,由于4.1724这个特征根的模大于1,所以可以判定闭环系统是不稳定的。3. 设描述系统的传递函数为,假定系统具有零初始状态,请求出单位阶跃响应曲线和单位脉冲响应曲线。>> num=18 514 5982 36380 22088 40320; den=1 36 546 4536 22449 67284 40320; G=tf(num,den) Transfer function: 18 s7 + 514 s6 + 5982 s5 + 36380 s4 + s3 + 22088 s2 + s + 40320-s8 + 36 s7 + 546 s6 + 4536 s5 + 22449 s4 + 67284 s3 + s2 + s + 40320 >> step(G,10)>> impulse(G,10)单位阶跃响应:单位脉冲响应:三、 线性系统Simulink仿真应用1. 请分析下面传递函数模型阶跃响应。 利用Simulink建模,建立系统仿真模型如下:单击启动仿真按钮,双击示波器得到系统的阶跃响应如下:2. 请分析下面离散系统的脉冲响应。 利用Simulink建模,建立系统仿真模型如下:单击启动仿真按钮,双击示波器得到系统的脉冲响应如下:3. 对离散采样系统进行分析,并求出其阶跃响应。 其中:利用Simulink建模,建立系统仿真模型如下:单击启动仿真按钮,双击示波器得到系统的阶跃响应如下:4. 设计控制器,使得下列系统稳定。 利用Simulink建模,未连入控制器时,仿真模型和响应如下:利用Simulink建模,设计控制器:从响应输出图形可以看出,连入控制器后系统稳定,性能明显提高。四、 基于MATLAB的PID 控制器设计设计题目:1. 应用Ziegler Nichols算法设计PID控制器,实现系统的闭环稳定,并比较对各个系统的控制效果。 未连入PID控制器时的系统仿真及其性能指标如下: 可见,未调节时的系统性能有待提高,需设计PID控制器连入。输入:>> num=1; den=conv( 1,1,conv( 1,1,1,1 ); Step(num,den); K=dcgain (num,den)得出:K =1根据图形,得出:L=1.86 T=4.4利用自定义的Ziegler_std函数求出Kp、Ti、Td输入:>> K=1; L=1.86; T=4.4; num,den,Kp,Ti,Td=Ziegler_std (3,K,L,T)得出:num = 2.6400 2.8387 1.5262den =1 0Kp =2.8387Ti =3.7200Td =0.9300根据得出的Kp、Ti、Td值,设计PID控制器,并利用利用Simulink仿真建模。仿真模型及其响应如下:可见,加入PID控制器调节后,系统性能明显改善。未连入PID控制器时的系统仿真及其性能指标如下: 可见,未调节时的系统性能有待提高,需设计PID控制器连入。输入:>> num=1; den=conv(1,1,conv(1,1,;conv( 1,1,conv( 1,1,1,1 ); Step(num,den); K=dcgain (num,den)得出:K = 1根据图形,得出:L=3.4 T=6.8利用自定义的Ziegler_std函数求出Kp、Ti、Td输入:>> K=1; L=3.4; T=6.8; num,den,Kp,Ti,Td=Ziegler_std (3,K,L,T)得出:num = 4.0800 2.4000 0.7059den = 1 0Kp = 2.4000Ti = 6.8000Td =1.7000根据得出的Kp、Ti、Td值,设计PID控制器,并利用利用Simulink仿真建模。仿真模型及其响应如下:可见,加入PID控制器调节后,系统性能明显改善。利用Simulink建模,未连入控制器时,仿真模型和响应如下:可见,未调节时的系统性能有待提高,需设计PID控制器连入。输入:>>num=-1.5 1; den=conv( 1,1,conv( 1,1,1,1 ); Step(num,den); K=dcgain (num,den)得出:K =1根据图形,得出:L=1.8 T=5.7利用自定义的Ziegler_std函数求出Kp、Ti、Td输入:>> K=1; L=1.8 T=5.7; num,den,Kp,Ti,Td=Ziegler_std (3,K,L,T)得出:num = 3.4200 3.8000 2.1111den =1 0Kp =3.8000Ti =3.6000Td =0.9000根据得出的Kp、Ti、Td值,设计PID控制器,并利用利用Simulink仿真建模。仿真模型及其响应如下:可见,加入PID控制器调节后,系统性能明显改善。五、 模糊控制器设计设计任务:试设计一个模糊控制器,实现对室内温度的控制的模拟。参考输入:(1)温度18-40范围内分为七个论域,NB NM NS ZE PS PM PB;隶属度函数满足高斯分布;(2)温度变化率-2 2范围内分为七个论域,NB NM NS ZE PS PM PB;隶属度函数满足高斯分布;参考输出:变频空调输出的控制信号。在一定范围内分为七个论域,NB NM NS ZE PS PM PB,隶属度函数为常数1。模糊推理过程,output=输入隶属度函数值*输出论域的中心值。注:本模糊程序采用PAM控制方式的压缩机,则其输出的转速范围为:010500转/分。控制规则:% % if input is NB and errorinput is NB, then output is NB;% % if input is NB and errorinput is NM, then output is NB;% % if input is NB and errorinput is NS, then output is NB;% % if input is NB and errorinput is ZE, then output is NM;% % if input is NB and errorinput is PS, then output is NM;% % if input is NB and errorinput is PM, then output is NM;% % if input is NB and errorinput is PB, then output is NS;% % if input is NM and errorinput is NB, then output is NB;% % if input is NM and errorinput is NM, then output is NM;% % if input is NM and errorinput is NS, then output is NM;% % if input is NM and errorinput is ZE, then output is NM;% % if input is NM and errorinput is PS, then output is NM;% % if input is NM and errorinput is PM, then output is NS;% % if input is NM and errorinput is PB, then output is NS;% % if input is NS and errorinput is NB, then output is NM;% % if input is NS and errorinput is NM, then output is NS;% % if input is NS and errorinput is NS, then output is NS;% % if input is NS and errorinput is ZE, then output is NS;% % if input is NS and errorinput is PS, then output is NS;% % if input is NS and errorinput is PM, then output is ZE;% % if input is NS and errorinput is PB, then output is ZE;% % if input is ZE and errorinput is NB, then output is NS;% % if input is ZE and errorinput is NM, then output is ZE;% % if input is ZE and errorinput is NS, then output is ZE;% % if input is ZE and errorinput is ZE, then output is ZE;% % if input is ZE and errorinput is PS, then output is ZE;% % if input is ZE and errorinput is PM, then output is PS;% % if input is ZE and errorinput is PB, then output is PS;% % if input is PS and errorinput is NB, then output is ZE;% % if input is PS and errorinput is NM, then output is PS;% % if input is PS and errorinput is NS, then output is PS;% % if input is PS and errorinput is ZE, then output is PS;% % if input is PS and errorinput is PS, then output is PS;% % if input is PS and errorinput is PM, then output is PM;% % if input is PS and errorinput is PB, then output is PM;% % if input is PM and errorinput is NB, then output is PS;% % if input is PM and errorinput is NM, then output is PS;% % if input is PM and errorinput is NS, then output is PM;% % if input is PM and errorinput is ZE, then output is PM;% % if input is PM and errorinput is PS, then output is PM;% % if input is PM and errorinput is PM, then output is PM;% % if input is PM and errorinput is PB, then output is PB;% % if input is PB and errorinput is NB, then output is PS;% % if input is PB and errorinput is NM, then output is PM;% % if input is PB and errorinput is NS, then output is PM;% % if input is PB and errorinput is ZE, then output is PM;% % if input is PB and errorinput is PS, then output is PB;% % if input is PB and errorinput is PM, then output is PB;% % if input is PB and errorinput is PB, then output is PB;1.输入为:程序为:>> x1 = (18:0.1:40)'y0 = gaussmf(x1, 1 18);y1 = gaussmf(x1, 1 21);y2 = gaussmf(x1, 1 25);y3 = gaussmf(x1, 1 29);y4 = gaussmf(x1, 1 33);y5 = gaussmf(x1, 1 37);y6 = gaussmf(x1, 1 40);plot(x1,y0 y1 y2 y3 y4 y5 y6)2.误差图:程序为:>> x1 = (-2:0.1:2)'y0 = gaussmf(x1, 0.5 -2);y1 = gaussmf(x1, 0.5 -1.3);y2 = gaussmf(x1, 0.5 -0.7);y3 = gaussmf(x1, 0.5 0);y4 = gaussmf(x1, 0.5 0.7);y5 = gaussmf(x1, 0.5 1.3);y6 = gaussmf(x1, 0.5 2);plot(x1,y0 y1 y2 y3 y4 y5 y6)3.程序为;x=35;ex=-0.8;% define input type in fuzzy zoney0 = gaussmf(x, 1 18);y1 = gaussmf(x, 1 21);y2 = gaussmf(x, 1 25);y3 = gaussmf(x, 1 29);y4 = gaussmf(x, 1 33);y5 = gaussmf(x, 1 37);y6 = gaussmf(x, 1 40);a=y0 y1 y2 y3 y4 y5 y6;b=max(a);% caculate input in fuzzy zone,get input_type and input_authorityvalueif x<=40 & x>=18 if b=a(1) type='NB' authorityvalue=y0; elseif b=a(2) type='NM' authorityvalue=y1; elseif b=a(3) type='NS' authorityvalue=y2; elseif b=a(4) type='ZE' authorityvalue=y3;elseif b=a(5) type='PS' authorityvalue=y4;elseif b=a(6) type='PM' authorityvalue=y5;elseif b=a(7) type='PB' authorityvalue=y6;endelse if x>40 type='PB' authorityvalue=1; elseif x<18 type='NB' authorityvalue=1; endend type authorityvalue%error calculate.ey0 = gaussmf(x, 0.5 -2);ey1 = gaussmf(x, 0.5 -1.3);ey2 = gaussmf(x, 0.5 -0.7);ey3 = gaussmf(x, 0.5 0);ey4 = gaussmf(x, 0.5 0.7);ey5 = gaussmf(x, 0.5 1.3);ey6 = gaussmf(x, 0.5 2);a=ey0 ey1 ey2 ey3 ey4 ey5 ey6;b=max(a);% caculate input in fuzzy zone,get input_type and input_authorityvalueif x<=2 & x>=-2 if b=a(1) etype='NB' eauthorityvalue=y0; elseif b=a(2) etype='NM' eauthorityvalue=y1; elseif b=a(3) etype='NS' eauthorityvalue=y2; elseif b=a(4) etype='ZE' eauthorityvalue=y3; elseif b=a(5) etype='PS' eauthorityvalue=y4; elseif b=a(6) etype='PM' eauthorityvalue=y5; elseif b=a(7) etype='PB' eauthorityvalue=y6; endelse if x>2 etype='PB' eauthorityvalue=1; elseif x<-2 etype='NB' eauthorityvalue=1; endend etype eauthorityvalue% caculate output by if type='NB'& etype='NB' out=authorityvalue*0.001; % if input is NB and errorinput is NB, then output is NB; elseif type='NB'& etype='NM' out=authorityvalue*0.001; % if input is NB and errorinput is NM, then output is NB; elseif type='NB'& etype='NS' out=authorityvalue*0.001; % if input is NB and errorinput is NS, then output is NB; elseif type='NB'& etype='ZE' out=authorityvalue*1750; % if input is NB and errorinput is ZE, then output is NM; elseif type='NB'& etype='PS' out=authorityvalue*1750; % if input is NB and errorinput is PS, then output is NM; elseif type='NB'& etype='PM' out=authorityvalue*1750; % if input is NB and errorinput is PM, then output is NM; elseif type='NB'& etype='PB' out=authorityvalue*3500; % if input is NB and errorinput is PB, then output is NS; elseif type='NM'& etype='NB' out=authorityvalue*0.001; % if input is NM and errorinput is NB, then output is NB; elseif type='NM'& etype='NM' out=authorityvalue*1750; % if input is NM and errorinput is NM, then output is NM;elseif type='NM'& etype='NS' out=authorityvalue*1750; % if input is NM and errorinput is NS, then output is NM;elseif type='NM'& etype='ZE' out=authorityvalue*1750; % if input is NM and errorinput is ZE, then output is NM;elseif type='NM'& etype='PS' out=authorityvalue*1750; % if input is NM and errorinput is PS, then output is NM;elseif type='NM'& etype='PM' out=authorityvalue*3500; % if input is NM and errorinput is PM, then output is NS;elseif type='NM'& etype='PB' out=authorityvalue*3500; % if input is NM and errorinput is PB, then output is NS;elseif type='NS'& etype='NB' out=authorityvalue*1750; % if input is NS and errorinput is NB, then output is NM;elseif type='NS'& etype='NM' out=authorityvalue*3000; % if input is NS and errorinput is NM, then output is NS;elseif type='NS'& etype='NS' out=authorityvalue*3000; % if input is NS and errorinput is NS, then output is NS;elseif type='NS'& etype='ZE' out=authorityvalue*3000; % if input is NS and errorinput is ZE, then output is NS;elseif type='NS'& etype='PS' out=authorityvalue*3000; % if input is NS and errorinput is PS, then output is NS;elseif type='NS'& etype='PM' out=authorityvalue*5250; % if input is NS and errorinput is PM, then output is ZE;elseif type='NS'& etype='PB' out=authorityvalue*5250; % if input is NS and errorinput is PB, then output is ZE;elseif type='ZE'& etype='NB' out=authorityvalue*3500; % if input is ZE and errorinput is NB, then output is NS;elseif type='ZE'& etype='NM' out=authorityvalue*5250; % if input is ZE and errorinput is NM, then output is ZE;elseif type='ZE'& etype='NS' out=authorityvalue*5250; % if input is ZE and errorinput is NS, then output is ZE;elseif type='ZE'& etype='ZE' out=authorityvalue*5250; % if input is ZE and errorinput is ZE, then output is ZE;elseif type='ZE'& etype='PS' out=authorityvalue*5250; % if input is ZE and errorinput is PS, then output is ZE;elseif type='ZE'& etype='PM' out=authorityvalue*7000; % if input is ZE and errorinput is PM, then output is PS;elseif type='ZE'& etype='PB' out=authorityvalue*7000; % if input is ZE an