课后仿真陈述
院(系):电气与节制工程学院 专业班级: 自动化1301班 姓名: 杨 光 辉 学号:1306050115 题目2-3:
求二阶传递函数的阶跃相应G(pS)133S225S
取采样时间为1ms停止团圆化.参照专家节制仿真程序,设计专家PID节制器,并停止MATLAB仿真.
专家PID 节制MATLAB仿真程序清单: %Exoert PID Controller
clear all;%清理数据库中所有数据 close all;%关闭所有界面图形 ts=0.001;%对象采样时间,1ms
sys=tf(133,[1,25,0]);%受控对象的传递函数 dsys=c2d(sys,ts,'z');%持续系统转化为团圆系统
[num,den]=tfdata(dsys,'v');%团圆化后参数,得num和den值
u_1=0;u_2=0;%设定初值,u_1是第(k-1)步节制器输出量 y_1=0;y_2=0;%设定初值,y_1是第(k-1)步系统对象输出量 x=[0,0,0]';%设定误差x1误差导数x2误差积分x3变量初值
x2_1=0;%设定误差导数x2_1的初值 kp=0.6;%设定比例环节系数 ki=0.03;%设定积分环节系数 kd=0.01;%设定微分环节系数
error_1=0;%设定误差error_1的初值
for k=1:1:5000%for循环开端,k从1变更到500,每步的增量为1
time(k)=k*ts;%仿真时长[0.0010.5]s
r(k)=1.0;%TracingStepSignal系统输入信号
u(k)=kp*x(1)+kd*x(2)+ki*x(3);%PIDControllerPID节制器
%Expertcontrolrule
%Rule1:Unclosedcontrolrule规则1:开环节制
if abs(x(1))>0.8%if循环开端,发生式规则,if...then...;误差的相对值大于
u(k)=0.45;%节制器输出量等于 u(k)=0.40; u(k)=0.12; u(k)=0.10; end%if循环竣事 %Rule2规则2
if x(1)*x(2)>0|(x(2)==0)%if循环开端,如果误差增大或不变
if abs(x(1))>=0.05%内嵌if循环开端,如果误差相对值大于
u(k)=u_1+2*kp*x(1);%节制器输出量施加较强节制 else%否则
u(k)=u_1+0.4*kp*x(1);%节制器输出量施加一般节制 end%内嵌if循环竣事 end%if循环竣事
%Rule3规则3
if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0)%if循环开端,如果误差减小或消除
u(k)=u(k);%节制器输出量不变 end%if循环竣事 %Rule4规则4
if x(1)*x(2)<0&x(2)*x2_1<0%if循环开端,如果误差处于极值状态
if abs(x(1))>=0.05%内嵌if循环开端,如果误差相对值大于
u(k)=u_1+2*kp*error_1;%节制器输出量施加较强节制 else%否则
u(k)=u_1+0.6*kp*error_1;%节制器输出量施加一般节制 end%内嵌if循环竣事 end%if循环竣事
%Rule5:IntegrationseparationPIcontrol规则5;运用PI节制来消除误差
if abs(x(1))<=0.001 %if循环开端如果误差相对值小于(很
小)
u(k)=0.5*x(1)+0.010*x(3);%节制器输出量用比例和积分输出
end%if循环竣事
%Restrictingtheoutputofcontroller对节制输出设限 if u(k)>=10
u(k)=10;%设节制器输出量上限值 end
if u(k)<=-10
u(k)=-10;%设节制器输出量下限值 end
%LinearmodelZ变更后系统的线性模子
y(k)=-den(2)*y_1-den(3)*y_2+num(1)*u(k)+num(2)*u_1+num(3)*u_2;
error(k)=r(k)-y(k);%系统误差error的表达式,等于系统输入减去输出
%--------Returnofparameters--------%每步计算时的参数更新
u_2=u_1;u_1=u(k);%u(k)代替u_1 y_2=y_1;y_1=y(k);%y(k)代替y_1
x(1)=error(k);%CalculatingP赋误差error值于x1 x2_1=x(2);%赋值前步计算时的误差导数X2的值等于X2_1 x(2)=(error(k)-error_1)/ts;%CalculatingD求误差导数x2,用于下一步的计算
x(3)=x(3)+error(k)*ts;%CalculatingI求误差积分x3 error_1=error(k);%赋误差error值于error_1 end%for循环竣事,整个仿真时长计算全部竣事 figure(1);%图形1
plot(time,r,'b',time,y,'r');%画图,以时间为横坐标,分别画出系统输入、输出随时间的变更曲线 xlabel('time(s)');ylabel('r,y');%标注坐标 figure(2);%图形2
plot(time,r-y,'r');%画r-y,即误差随时间的变更曲线 xlabel('time(s)');ylabel('error');%标注坐标 专家PID 节制MATLAB仿真程序过程及成果:
Figure1:
PID节制阶跃响应曲线
Figure2:
误差响应随时间变更曲线
题目3-4: 如果
A1A10.5x1x2且
B0.10.51y1y2y3,则
C0.21z1z2.现已知
0.80.10.50.20且B1x1x2y1y2y3,操纵恍惚推理公式(3.27)和
(3.28)求C1,并采取MATLAB停止仿真. 恍惚推理MATLAB仿真程序清单: clear all;%清理数据库中所有数据 close all;%关闭所有界面图形?
A=[1;0.5];%输入各元素在A中的从属度 B=[0.1,0.5,1];%输入各元素在B中的从属度 C=[0.2,1];%输入各元素在C中的从属度 %Compound of A and B %合成A和B for i=1:2%A矩阵的行数取值i
for j=1:3%B矩阵的列数取值j
AB(i,j)=min(A(i),B(j));%实现A,B的“与”关系 end end
%Transfer to Column %转换列向量 T1=[];%定义转置矩阵T1
for i=1:2%AB矩阵的行数取值i T1=[T1;AB(i,:)'];%转置AB矩阵 end
%Get fuzzy R %确立恍惚关系矩阵R for i=1:6%R矩阵列数取值i for j=1:2%R矩阵行数取值j
R(i,j)=min(T1(i),C(j));%确定恍惚关系矩阵R end end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% A1=[0.8,0.1];%输入各元素在A1中的从属度 B1=[0.5,0.2,0];%输入各元素在B1中的从属度
for i=1:2%A1矩阵的行数取值i for j=1:3%B1矩阵的行数取值j
AB1(i,j)=min(A1(i),B1(j));%实现A1和B1的“与”关系 end end
%Transfer to Row%转换行向量 T2=[];%定义转置矩阵T2
for i=1:2%AB1矩阵的行数取值i T2=[T2,AB1(i,:)];%扩大A1B1矩阵 end
%Get output C1%确定输出
for i=1:6%转置矩阵T2列数取值 for j=1:2%恍惚矩阵R行数取值 D(i,j)=min(T2(i),R(i,j)); C1(j)=max(D(:,j));%输出C1矩阵 end end
恍惚推理MATLAB仿真程序过程及成果: AB与关系: 转置矩阵T1: 恍惚矩阵R: A1B1与关系: 转置矩阵T2: 输出矩阵C1: 题目4-3:
已知某一炉温节制系统,要求温度坚持在600℃恒定.针对该节制系统有以下节制经历:
(1)若炉温低于600℃,则升压;低得越多升压越高. (2)若炉温高于600℃,则降压;高得越多降压越低. (3)若炉温等于600℃,则坚持电压不变.
设恍惚节制器为一维节制器,输入语言变量为误差,输出为节制电压.输入、输出变量的量化等级为7级,取5个恍惚集.试设计从属度函数误差变更划分表、节制电压变更划分表和恍惚节制规则表.
解:输入(e)以及输出(u)分为5个恍惚集:NB、NS、ZO、
PS、PB.输入变量(e)以及输出变量(u)分为7个等级:-3、-2、-1、0、+1、+2、+3.
炉温变更e划分表
从属度 -3 模 糊 集 PB PS ZO NS NB 0 0 0 0 1 -2 0 0 0 -1 0 0 变更等级 0 0 0 1 0 0 1 0 1 2 3 1 0 0 0 0 0 0 0 1 0 0 0 节制电压变更划分表
从属度 -3 模 糊 集 PB PS ZO NS NB 0 0 0 0 1 -2 0 0 0 -1 0 0 变更等级 0 0 0 1 0 0 1 0 1 2 3 1 0 0 0 0 0 0 0 1 0 0 0 恍惚节制规则表
若(IF) 则(THEN) NBe NBu NSe NSu ZOe ZOu PSe PSu PBe PBu 炉温恍惚节制MATLAB仿真程序清单: %Fuzzy Control for furnace temperature clear all;%清理数据库中所有数据 close all;%关闭所有界面图形
a=newfis('fuzz_temperature');%恍惚炉温
a=addvar(a,'input','e',[-3,3]);%Parameter e输入参数e的取值范围
a=addmf(a,'input',1,'NB','zmf',[-3,-1]); a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]); a=addmf(a,'input',1,'Z','trimf',[-2,0,2]); a=addmf(a,'input',1,'PS','trimf',[-1,1,3]); a=addmf(a,'input',1,'PB','smf',[1,3]);
a=addvar(a,'output','u',[-3,3]);%Parameter u输出参数u的取值范围
a=addmf(a,'output',1,'NB','zmf',[-3,-1]);
a=addmf(a,'output',1,'NS','trimf',[-3,-2,1]); a=addmf(a,'output',1,'Z','trimf',[-2,0,2]); a=addmf(a,'output',1,'PS','trimf',[-1,2,3]); a=addmf(a,'output',1,'PB','smf',[1,3]); rulelist=[1 1 1 1;%Edit?rule?base编辑规则库 2 2 1 1; 3 3 1 1; 4 4 1 1; 5 5 1 1]; a=addrule(a,rulelist);
a1=setfis(a,'DefuzzMethod','mom');%Defuzzy writefis(a1,'temperature');%Save to fuzzyfile \"temperature.fis\"保管恍惚文件\"temperature.fis\" a2=readfis('temperature'); figure(1);%图形1 plotfis(a2);%画图 figure(2);%图形2
plotmf(a,'input',1);%画图 figure(3);%图形3
plotmf(a,'output',1);%画图 flag=1;%设标记位1
if flag==1%如果标记位为1
showrule(a)%Show fuzzy rule base显示恍惚规则库 ruleview('temperature');%Dynamic Simulation动态摹拟 end%竣事
disp('-------------------------------------------------------'); disp('
fuzzy?controller?table:e=[-3,+3],u=[-3,+3]'); disp('-------------------------------------------------------'); for i=1:1:7 e(i)=i-4;
Ulist(i)=evalfis([e(i)],a2); end%竣事
Ulist=round(Ulist) e=-3;%Error出错
u=evalfis([e],a2)%Using fuzzy inference操纵恍惚推理 炉温恍惚节制MATLAB仿真程序过程及成果: 1.在MATLAB编辑环境下编写炉温恍惚节制仿真程序 Figure1: Figure2: Figure3: 炉温规则检查器:
调整输入变量可得到分歧的输出 仿真心得:
通过这次课后仿真,让我对专家节制、恍惚节制有了更进一步的懂得,同时也对MATLAB这个重要的专业工具的使用更加熟练.
因篇幅问题不能全部显示,请点此查看更多更全内容