资源描述:
《模糊控制设计及仿真实例智能控制作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、1.一个三阶系统,其中a,b的值由自己设定,该系统具有非线性环节,如下图所示:依据上述条件设计一个模糊控制器:①用MATLAB仿真,得出仿真结果,②并通过改变a、b值对仿真结果的影响;③改变隶属度函数,从仿真结果图分析隶属度函数,模糊化对系统的影响;解:①(1)取b0=0,b1=0,b2=1.5,a1=4,a2=2,a3=0,在SIMULINK里建模如下图所示(2)用GUI建立FISE和EC分别为系统输出误差和误差的变化量,U为控制输出,编辑其隶属度函数如下1111编辑模糊推理规则如下11(3)仿真结果如下112自己选定一个对象,设计一个神经网络控制系统。解:被控对象为y(k)=0.3y(k
2、-1)+0.2y(k-2)+0.1u(k-1)+0.6u(k-2),采用单神经元PID控制,控制结构如下图所示:采用有监督的Hebb学习规则,控制算法及学习算法如下:式中,输入信号为方波:仿真程序如下:clearall;closeall;x=[0,0,0]';xiteP=0.40;xiteI=0.35;xiteD=0.40;wkp_1=0.10;11wki_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;fork=1:1:1000time(k)=k*tsrin(k)=0.5*
3、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);%Pwki(k)=wki_1+xiteI*error(k)*u_1*x(2);%Iwkd(k)=wkd_1+xiteD*error(k)*u_1*x(3);%DK=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))+ab
4、s(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;%Controllawifu(k)>10u(k)=10;endifu(k)<-10u(k)=-10;endu_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);endfigure(1);11plot(time,r
5、in,'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');仿真结果如下:11113.前向神经网络拟合一个函数y=sin(x)*cos(10x),取n个样本,神经网络的层数和每层的点数可自定。解:1.画出待拟合函数的样本点在Matlab的“CommandWindow”输入以下命令:x=-pi:0
6、.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的“CommandWindow”输入以下命令:n=50;net=newff(minmax(x),[n,1],{'tansig','purelin'},'trainlm');y1=sim(net,x);figure;plot(x
7、,y,'r+',x,y1,'--')得到初始网络的输出曲线如下图11图中蓝色曲线即为未训练网络的输出,因为网络建立时权值和阈值初始化是随机的,所以网络输出结果很差,达不到拟合的目地,并且每次运行的结果也有所不同。3.网络训练继续在“CommandWindow”输入以下命令:net.trainParam.epochs=50;net.trainParam.goal=0.01;net=train(net,x,y);