模糊控制设计及仿真实例智能控制作业

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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,'--')

得到初始网络的输出曲线如下图

相关文档
最新文档