智能控制课后仿真.docx
- 文档编号:9214084
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:19
- 大小:194.56KB
智能控制课后仿真.docx
《智能控制课后仿真.docx》由会员分享,可在线阅读,更多相关《智能控制课后仿真.docx(19页珍藏版)》请在冰豆网上搜索。
智能控制课后仿真
XlhANUNIVERSITYOFSCIENCEANDTECHNOLOGY
《智能控制》
课后仿真报告
院(系):
电气与控制工程学院
专业班级:
自动化1301班
姓名:
杨光辉
学号:
1306050115
题目2-3:
求二阶传递函数的阶跃相应G』s):
2^4取采样时间为
S+25S
1ms进行离散化。
参照专家控制仿真程序,设计专家PID控制器,并进行MATLAB仿真。
专家PID控制MATLAB仿真程序清单:
%ExoertPIDController
clearall;%清理数据库中所有数据
closeall;%关闭所有界面图形
ts=0.001;%对象采样时间,1ms
sys=tf(133,[1,25,0]);%受控对象的传递函数
dsys=c2d(sys,ts,'z');%连续系统转化为离散系统
[num,den]=tfdata(dsys,'v');%离散化后参数,得num和den值
u_仁0;u_2=0;%设定初值,u_1是第(k-1)步控制器输岀量
y_仁0;y_2=0;%设定初值,y_1是第(k-1)步系统对象输岀量
x=[0,0,0]';%设定误差x1误差导数x2误差积分x3变量初值
x2_仁0;%设定误差导数x2_1的初值
kp=0.6;%设定比例环节系数
ki=0.03;%设定积分环节系数
kd=0.01;%设定微分环节系数
error_1=0;%设定误差error_1的初值
系统输入信号
fork=1:
1:
5000%for循环开始,k从1变化到500,每步的增量为1time(k)=k*ts;%仿真时长[0.0010.5]s
u(k)=kp*x
(1)+kd*x
(2)+ki*x(3);
%Expertcontrolrule
%Rule1:
Unclosedcontrolrule
%PIDControllerPID
规则1:
开环控制
控制器
r(k)=1.0;%TracingStepSignal
;误差的绝对值大于
ifabs(x
(1))>0.8%if循环开始,产生式规则,if...then...
u(k)=0.45;%控制器输出量等于elseifabs(x
(1))>0.40u(k)=0.40;
elseifabs(x
(1))>0.20
u(k)=0.12;
elseifabs(x
(1))>0.01u(k)=0.10;
end%if循环结束
%Rule2规则2
ifx
(1)*x
(2)>0|(x
(2)==0)
%if循环开始,如果误差增大或不变
ifabs(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
ifx
(1)*x
(2)<0&x
(2)*x2_1<0%if循环开始,如果误差处于极值状态
ifabs(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控制来消除误差
ifabs(x
(1))<=0.001%if循环开始如果误差绝对值小于(很小)
u(k)=0.5*x
(1)+0.010*x(3);%控制器输出量用比例和积分输出
end%if循环结束
%Restrictingtheoutputofcontroller对控制输出设限
ifu(k)>=10
u(k)=10;%设控制器输出量上限值
end
ifu(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;
%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仿真程序过程及结果:
1.在MATLAB编辑环境下编写专家PID控制仿真程序
2.编译运行程序后
Figurel:
UiJddti\DSt
ji-sas■□
11
12
-
-
'1
DB
/
/
In.
/
-1
{
-
D4
J
7
-
D2
i
11
l
l
|
|
|
|
-
a.6i
i.&
2
3
J.fr
4
4$
fi
Qfv^irv1
dX
丈曲EAliraSiYi・A山工m点.此■□进I.虽旦i
PID控制阶跃响应曲线
Figure2:
Eft-EMH■*茁埶Z*T|起ijp■阳凹
》□』;k'■狞自3W・C□El■口
误差响应随时间变化曲线
题目3-4:
如果A」05且空丄,贝y」。
现已知
xiX2yiyy乙z
A=竺.空且Bi二05^02』,利用模糊推理公式(3.27)和XiX2yiyy
(3.28)求Ci,并采用MATLAB进行仿真。
模糊推理MATLAB仿真程序清单:
clearall;
%清理数据库中所有数据
closeall;%关闭所有界面图形
A=[i;0.5];
%输入各元素在A中的隶属度
B=[0.i,0.5,i];
%输入各元素在B中的隶属度
C=[0.2,i];
%输入各元素在C中的隶属度
%CompoundofAandB%合成A和B
fori=i:
2%A矩阵的行数取值i
forj=1:
3
%B矩阵的列数取值j
AB(i,j)=min(A(i),B(j));%实现A,B的“与”关系
endend
%TransfertoColumn%转换列向量
T1=[];%定义转置矩阵T1
fori=1:
2
%AB矩阵的行数取值i
T1=[T1;AB(i,:
)'];%转置AB矩阵
end
%GetfuzzyR%确立模糊关系矩阵R
fori=1:
6
%R矩阵列数取值i
forj=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中的隶属度
fori=1:
2
%A1矩阵的行数取值i
forj=1:
3
%B1矩阵的行数取值j
AB1(i,j)=min(A1(i),B1(j));%实现A1和B1的“与”关系
endend
%TransfertoRow%转换行向量
T2=[];%定义转置矩阵T2
fori=1:
2%AB1矩阵的行数取值i
T2=[T2,AB1(i,:
)];%扩展A1B1矩阵
end
%GetoutputC1%确定输岀
fori=1:
6%转置矩阵T2列数取值
forj=1:
2%模糊矩阵R行数取值
D(i,j)=min(T2(i),R(i,j));
C1(j)=max(D(:
j));%输岀C1矩阵
end
end
模糊推理MATLAB仿真程序过程及结果:
1.在MATLAB编辑环境下编写模糊推理仿真程序
CAJef加血皿血“蚀狀QkWk制
2.编译运行程序后
AB与关系:
T1址1梵]A•A1xlABx]B
出2x3double
1
2
1
2
3
4
0.10^0.5000
1
0,1000
0,5000
0,5000
3
4
5
6
转置矩阵T1:
H述-T1
T1
AB1xlA
Al
田6x1double
1
2
3
1
「0.1000
2
0.5Q00
3
1
4
OJQOO
5
05000
6
0.5000
7
模糊矩阵R:
述-R
11
T1AB1A:
<]Al
田6x2double
1
2
3
1
o.iooo|
0.1000
2
0.2000
0.5CKX)
3
0.2000
1
斗
OJOOO
OJOOO
5
0.2000
0.5000
6
02000
0.5000
7
A1B1与关系:
M变量-AB1
0
T1xjAB1
|jJ?
x3double
1
2
3
1
2
0.50000,2000
0
OJOOO
OJOOO
0
3
4
转置矩阵T2:
输出矩阵C1:
题目4-3:
已知某一炉温控制系统,要求温度保持在600C恒定
针对该控制系统有以下控制经验:
(1)若炉温低于600C,则升压;低得越多升压越高。
(2)若炉温高于600C,贝y降压;高得越多降压越低。
(3)若炉温等于600C,则保持电压不变。
设模糊控制器为一维控制器,输入语言变量为误差,输出为
控制电压。
输入、输出变量的量化等级为7级,取5个模糊
集。
试设计隶属度函数误差变化划分表、控制电压变化划分表和模糊控制规则表。
解:
输入(e)以及输出(u)分为5个模糊集:
NB、NS、Z0、
PSPB。
输入变量(e)以及输出变量(u)分为7个等级:
-3、-2、-1、0、+1、+2、+3。
炉温变化e划分表
隶属度
变化等级
-3
-2
-1
0
1
2
3
模
PB
0
0
0
0
0
0.5
1
糊
PS
0
0
0
0
1
0.5
0
集
ZO
0
0
0.5
1
0.5
0
0
NS
0
0.5
1
0
0
0
0
NB
1
0.5
0
0
0
0
0
控制电压变化划分表
隶属度
变化等级
-3
-2
-1
0
1
2
3
模
PB
0
0
0
0
0
0.5
1
糊
PS
0
0
0
0
1
0.5
0
集
ZO
0
0
0.5
1
0.5
0
0
NS
0
0.5
1
0
0
0
0
NB
1
0.5
0
0
0
0
0
模糊控制规则表
若(IF)
NBe
NSe
ZOe
PSe
PBe
贝U(THEN)
NBu
NSu
ZOu
PSu
PBu
炉温模糊控制MATLAB仿真程序清单:
%FuzzyControlforfurnacetemperature
clearall;%清理数据库中所有数据
closeall;%关闭所有界面图形
a=newfis('fuzz_temperature');%模糊炉温
a=addvar(a,'input','e',[-3,3]);%Parametere输入参数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,
卩S'
'trimf'
,[-1,1,3]);
a=addmf(a,'input',1,'PB','smf',[1,3]);
a=addvar(a,
'output'
'u',[-3,3]);
%Parameteru
输出参数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=[111
1;
%Edit?
rule?
base
编辑规则库
2211;
3311;
4411;
5511];
a1=setfis(a,
'DefuzzMethod'
'mom');%Defuzzy
a=addrule(a,rulelist);
保存模
writefis(a1,'temperature');%Savetofuzzyfile"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
ifflag==1%如果标志位为1
showrule(a)%Showfuzzyrulebase显示模糊规则库
ruleview('temperature');%DynamicSimulation动态模拟
end%结束
disp('');
disp('fuzzy?
controller?
table:
e=[-3,+3],u=[-3,+3]');
disp('');
fori=1:
1:
7
e(i)=i-4;
Ulist(i)=evalfis([e(i)],a2);
end%结束
Ulist=round(Ulist)e=-3;%Error岀错
u=evalfis([e],a2)%Usingfuzzyinference利用模糊推理
炉温模糊控制MATLAB仿真程序过程及结果:
1.在MATLAB编辑环境下编写炉温模糊控制仿真程序
2.编译运行程序后
也■
±e£□«*
■洛-JL丄-旧応叮①1'•
kJ⑰口
护si«n?
t
-43©时露-■7T回Iha[51曲ttE.
〜穿-~y拦卄二«-««»
Bt■-
®WIM-」■**▼■*—m■-u.MnM-
亡W
H气石H业JW■■*S»
九ng
tC:
■UwnihshviMdmnflD*Owimarlti!
*MATLAB
"f?
■口
岂LWikd'mIvrnpirMlu'ii.faiIwiL-Fa
二|1皿沪
"1hmyriQ
»:
hixsy
■nJ■*
3LIE“ax
LIt磊hl
朗》i;h«n>uiiHfi
chanlu11M&lIL'
PD£b FBJthen>uisREJID EuEs^^nrrLEan-iE^tn^l-i<■: ・3i.+3"_^[-3.+J]7T? T UI.3CE Figurel: Figure2: F>^ur«? MU**..©JACDJVE回■□他■画UH I: ■涉k亠入&⑥暧Y、口口目■口 4第M^U4UJ-&■冷誉 Figure3: EQ*gurvJ—tJ tw®«dj£i*9iyi・a山工Hr■■应■□曲ffKi Uuhlkxx吧国址品■口□H3口口 “=4qL4・t7E£・u 炉温规则查看器: ■・B OpwlImwrivi£ratal 调整输入变量可得到不同的输出 fibEdit^iwOptiDH. 仿真心得: 通过这次课后仿真,让我对专家控制、模糊控制有了更进一步的理解,同时也对MATLAB这个重要的专业工具的使用更加熟练。 【本文档内容可以自由复制内容或自由编辑修改内容期待 你的好评和关注,我们将会做得更好】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 控制 课后 仿真