一、实验要求
4.228假定被控对象的传递函数为:G 2s0.5s21.s8.456
设计一模糊控制器,查看其阶跃响应。
二、实验原理
1、根据系统实际情况,选择e,de和u的论域
e range : [-1 1] de range: [-0.1 0.1] u range: [0 2]
2、e,de和u语言变量的选取
e 7个:NB,NM,NS,NZ,PZ,PS,PM,PB de 7个:NB,NM,NS,Z,PS,PM,PB U 7个:NB,NM,NS,Z,PS,PM,PB
3、模糊规则确定
4、隐含和推理方法的制定
隐含采用mamdani方法: max-min 推理方法:min
去模糊方法:重心法。
选择隶属函数的形式:三角型
三、实验步骤
1、在命令窗口中键入fuzzy,然后回车,出现如下图所示的画面
2、增加输入变量:edit---add variable----input,修改对应名称
2
3、修改各变量参数:双击e,修改属性:remove all MFs---add MFs
4、添加模糊规则
3
可以用view rules菜单命令查看模糊控制器的规则:
也可以用view surf 菜单命令查看模糊控制器的输出量
5、保存文件,命名为mhkz.fis,并导出到工作空间: file---export---to workspace
4
6、仿真
1)在MATLAB输入simulink,新建mdl文件,拖入要使用的仪器:
2)连接仿真电路,并修改相应参数:
3)仿真结果显示:
5
系统输出:
误差及其变化率:
模糊控制器输出:
6
实验二:BP算法实现函数拟合
一、 实验要求
设计BP网络对y=x^2进行拟合
二、 实验原理
BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。正向传播时,输入样本从输入层传人,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。误差反传是将输出误差以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。这种信号正向传播与误差反向传播的各层权值调整过程,是周而复始地进行的。权值不断调整的过程,也就是网络的学习训练过程。此过程一直进行到网络输出的误差减少到可接受的程度,或进行到预先设定的学习次数为止。
三层BP网络拓扑结构:
7
8
BP算法实现步骤:
1)初始化
2)输入训练样本对,计算各层输出 3)计算网络输出误差
4)计算各层误差信号 5)调整各层权值
6)检查是否对所有样本完成一次轮训
7)检查网络总误差是否达到精度要求满足,满足则训练结束;不满足,则返回步骤2)
9
三、 实验过程
(一) 基于matlab的BP算法编程如下:(采用二级网络)
%BP网络(自适应调节学习率) tic%记录运行时间 clear
h=10; %隐层数量 v=rand(1,h); %隐层权矩阵 w=rand(h,1); %输出层权矩阵 wo=rand(1,1); %初始化阈值 vo=rand(1,h);
a=0.9; %初始学习率 pre=0.005; %精度控制 loop=50000; %最大循环次数 n=50; %样本数量 delta=2/n;%步长
x=zeros(1,n); %输入初始化 y=zeros(1,n); %期望输出初始化 yout=zeros(1,n); %拟合输出初始化 yhid=zeros(1,h); %隐层输出初始化 count=1; %循环次数
er2=0;aa=1.05;bb=0.95;%改进:自适应调节学习率 %训练
while count yhid=zeros(1,h); %隐层输出 for j=1:h net_j=v(1,j)*x(p)-vo(1,j); yhid(1,j)=1/(1+exp(-net_j)); end net=yhid*w-wo; o=1/(1+exp(-net));yout(p)=o; %系统输出 e=0.5*(y(p)-o).^2 ; %输出误差 sum=sum+e; errout=(y(p)-o)*(1-o)*o; %输出层误差信号 errhid=zeros(1,h); for j=1:h errhid(1,j)=w(j,1)*errout*(1-yhid(1,j))*yhid(1,j); %隐层误差信号 end 10 for j=1:h w(j,1)=w(j,1)+a*errout*yhid(1,j); %输出层权值调整 end wo=wo-a*errout; for j=1:h v(1,j)=v(1,j)+a*errhid(1,j)*x(p); %隐层权值调整 vo(1,j)=vo(1,j)-a*errhid(1,j); end end Erme=sqrt(sum/n);%网络输出误差 if Erme>er2 a=a*bb; else a=a*aa; end er2=Erme; if Erme m=-1:0.01:1; n=m.^2; plot(m,n,x,yout,'o');title('y=x^2(实线为真实值,o为预测值)'); disp('训练总次数:');disp(count); disp('调整后v矩阵为');disp(v); disp('调整后vo矩阵为');disp(vo); disp('调整后w矩阵为');disp(w) ; disp('调整后wo矩阵为');disp(wo); disp('误差为:');disp( Erme); toc 结果如下: 训练总次数:9119 调整后v矩阵为 [0.9669 4.1590 4.3175 0.3756 9.84 -11.6092 0.2308 0. 4.9600 -11.7960] 调整后vo矩阵为 [0.3161 -2.1235 0.6143 1.4462 10.8663 1.83 1.6958 1.8756 -2.5236 12.9151] 调整后w矩阵为 [-0.0657 -2.4265 9.29 -0.1743 10.6686 4.5318 -0.2691 0.3957 -3.0933 10.5088] 调整后wo矩阵为 3.2323 误差为:0.0050 Elapsed time is 20.810410 seconds. 11 y=x2(实线为真实值,o为拟合值)10.90.80.70.60.50.40.30.20.10-1-0.8-0.6-0.4-0.200.20.40.60.81 实验分析:修改隐层节点数,运行结果相关数据如下: 隐层节点数 训练总次数 运行时间/秒 误差 5 6 7 8 9 10 15 50000 15373 10207 19792 10440 9936 13747 86.519260 26.507811 18.048257 35.341025 19.008462 20.287849 25.993279 0.0057 0.0050 0.0050 0.0050 0.0050 0.0050 0.0050 可以看出,从运行时间和误差两方面考率,隐层节点数选择7为最佳。 12 (二) 基于matlab神经网络工具箱编程如下: 结果如下:训练8次达到要求精度9.e-06 y=x2(其中实现为真实值,o为拟合值)10.90.80.70.60.50.40.30.20.10-1-0.8-0.6-0.4-0.200.20.40.60.8113 14 因篇幅问题不能全部显示,请点此查看更多更全内容count=count+1; end
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务