模糊控制设计及仿真实例智能控制作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.一个三阶系统
2
0123
2
123
b b b a a a s s s s s +++++ ,其中a,b 的值由自己设定,该系统具有非
线性环节,如下图所示:
依据上述条件设计一个模糊控制器: ①用MATLAB 仿真,得出仿真结果, ②并通过改变a 、b 值对仿真结果的影响;
③改变隶属度函数,从仿真结果图分析隶属度函数,模糊化对系统的影响; 解:①
(1)取b0=0,b1=0,b2=1.5,a1=4,a2=2,a3=0,在SIMULINK 里建模如下图所示
(2)用GUI 建立FIS
E 和EC 分别为系统输出误差和误差的变化量,U 为控制输出,编辑其隶属度函数如下
编辑模糊推理规则如下
(3)仿真结果如下
2自己选定一个对象,设计一个神经网络控制系统。
解:被控对象为y(k)=0.3y(k-1)+0.2y(k-2)+0.1u(k-1)+0.6u(k-2),采用单神经元PID 控制,控制结构如下图所示:
采用有监督的Hebb 学习规则,控制算法及学习算法如下:
3
13
1
111222333()(1)()()
()()/()
()(1)()()()()(1)()()()()(1)()()()
i i i i i i i I P D u k u k K w k x k w k w k w k w k w k z k u k x k w k w k z k u k x k w k w k z k u k x k ηηη=='=-+'==-+=-+=-+∑∑
式中,
2
123()();()()(1);()()()2(1)(2);
x k e k x k e k e k x k e k e k e k e k ==--=∆=--+-
K K >0I P D ηηη﹑﹑分别为积分﹑比例﹑微分的学习速率,为神经元比例系数,。
输入信号为方波:
()rin k 0.5sgn (sin (4t))
π=
仿真程序如下:
clear all ; close all ;
x=[0,0,0]';
xiteP=0.40; xiteI=0.35; xiteD=0.40;
wkp_1=0.10;
wki_1=0.10;
wkd_1=0.10;
error_1=0;
error_2=0;
y_1=0;y_2=0;y_3=0;
u_1=0;u_2=0;u_3=0;
ts=0.001;
for k=1:1:1000
time(k)=k*ts
rin(k)=0.5*sign(sin(4*pi*k*ts));
yout(k)=0.3*y_1+0.2*y_2+0.1*u_1+0.6*u_2;
error(k)=rin(k)-yout(k);
wkp(k)=wkp_1+xiteP*error(k)*u_1*x(1);%P
wki(k)=wki_1+xiteI*error(k)*u_1*x(2);%I
wkd(k)=wkd_1+xiteD*error(k)*u_1*x(3);%D
K=0.12;
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k)); w11(k)=wkp(k)/wadd(k);
w22(k)=wki(k)/wadd(k);
w33(k)=wkd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u_1+K*w*x;%Control law
if u(k)>10
u(k)=10;
end
if u(k)<-10
u(k)=-10;
end
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
wkp_1=wkp(k);
wkd_1=wkd(k);
wki_1=wki(k);
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout'); figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error');
figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
仿真结果如下:
3.前向神经网络拟合一个函数y=sin(x)*cos(10x),取n个样本,神经网络的层数和每层的点数可自定。
解:1.画出待拟合函数的样本点
在Matlab的“Command Window”输入以下命令:
x=-pi:0.05:pi;
y=sin(x).*cos(10*x);
plot(x,y,'r+')
得到待拟合函数的样本点如下所示
2.建立BP网络
建立2层BP神经网络,隐层神经元数目可改变,暂设n=50,输出层1个神经元。选择隐层和输出层神经元传递函数分别为tansig()和purelin(),网络训练采用默认的Levenberg-Marquardt算法trainlm。
继续在Matlab的“Command Window”输入以下命令:
n=50;
net=newff(minmax(x),[n,1],{'tansig','purelin'},'trainlm');
y1=sim(net,x);
figure;
plot(x,y,'r+',x,y1,'--')
得到初始网络的输出曲线如下图