实验报告
- 格式:doc
- 大小:839.00 KB
- 文档页数:10
实验一基于Matlab的单容液位模糊控制系统仿真
一、实验目的
1、熟悉Matlab基础知识和模糊推理系统编辑器。
2、加深对模糊控制的理解。
3、加强模糊控制在实践中的应用。
二、基础知识
1.单容器在工业中用途广泛,对其液位的控制十分普遍,大家在以往的实验中也常常会碰到,这里主要关注模糊控制的控制系统方面,对水箱不进行建模和仿真,只需要用到容器的液位和变化率。
控制原理图
2.模糊推理系统编辑器(FIS Editor)是Matlab中关乎模糊系统框架、主体结构等总体大局设计的编辑器,他可以编辑、设计、修改整个系统框架,增减系统输入输出量等,所以设计任何模糊控制,都应该先用FIS设计整体架构,再对细目进行编辑、完善。
FIS编辑器的图形界面使用起来很方便,请同学们认真体会。
在Matlab命令窗口键入fuzzy就可以进入FIS Editor界面,如下图示。
图1
三、实验内容
1.打开模糊逻辑工具箱的图形界面,新建一个Mamdani模糊推理模型。
键入fuzzy打开图形界面,默认即为Mamdani模型。
2.增加一个输入变量,将输入变量命名为level、rate,输出变量为valve,这样就定义了两输入单输出模糊推理系统,保存为tank0.fis。
3.设计模糊化模块:将输入变量rate的论域设为[-0.1,0.1],另外两个变量采用默认论域[-1,1]不变。
通过增加隶属度函数来划分模糊空间:
(1)输入变量level划分三个模糊集:low、okay和high,隶属度函数均为高斯函数,参数分别为[0.3 -1]、[0.3 0]、[0.3 1]。
(2)输入变量rate划分三个模糊子集:negative、zore和positive,隶属度函数均为高斯函数,参数分别[0.03 -0.1]、[0.03 0]、[0.03 1]。
(3)输出变量valve划分为五个模糊集:close_fast、close_slow、no_change、open_slow和open_fast,隶属度函数均为三角形函数,参数分别为[-1 -0.9
-0.8]、[-0.6 -0.5 -0.4]、[-0.1 0 0.1]、[0.2 0.3 0.4 ]、[0.8 0.9 1]。
1.设置模糊规则,打开Rule Editer窗口,添加下面五条模糊规则:
1.if (level is okay) then (valve is no_change)
2.if (level is low) then (valve is open_fast)
3.if (level is high) then (valve is close_fast)
4.if (level is okay) and (rate is positive) then (valve is close_slow)
5.if (level is okay) and (rate is negative) then (valve is open_slow)
5条规则权重均为1.
2.修改部分模糊规则推理参数:And采用乘(prod)、Or采用概率或(probor)、Implication采用乘(prod),其余均为默认值,通过曲面观察器(Surface Viewer)查看水箱液位模糊推理的输入输出关系曲面。
通过规则观察器(Rule Viewer)查看对具体输入的模糊推理及输出情况,输入各种不同数据,查看推理及输出图形、数据。
上面设计的tank0.fis。
在命令窗口输入tank=readfis(‘tank0’)即可。
为1,查看PID控制的输出曲线。
添加模糊控制规则,比较控制效果。
模糊控制的结果
PID控制结果
四、问题
1、本次试验控制规则中只写出5条,而实际能写出的规则共有几条?为什么只写出这5条?
答:实际能写出的规则有75条。
3*5+3*5+3*3*5=75条。
这几条是在level在某一条件下,rate不同决定valve。
2、模糊控制中模糊化和精确化是如何实现的?本实验中精确化采用了哪种方
法?
答:模糊化将输入值以适当的比例转换到论域的数值,利用模糊子集合来描述测量物理量的过程,依适合的语言值求该值相对的隶属度。
精确化是将推论所得到的模糊值转换为明确的控制讯号,作为系统的输入值。
本实验中精确化采用了最大隶属度函数法。
五、实验总结
通过本次实验,熟悉了Matlab基础知识和模糊推理系统编辑器,加深了对模糊控制的理解,认识到模糊控制在实践中的应用方法。
在实验书的指导下很容易就把实验完成。
实验二基于matlab的神经网络函数逼近
一、实验目的
1.加深对神经网络的理解、验证BP网络函数逼近的能力
2.了解BP网络的结构、学习BP网络的训练过程
3.学习使用神经网络的图形工具
二、实验过程
这里要求设计一个简单的BP网络,实现对非线性函数的逼近。
通过改变该函数的参数和BP网络的隐层神经元个数,来观察训练时间和训练误差的变化情况。
1.将逼近的非线性函数设为正弦函数,其频率为k可调节;
2.假设频率参数k=1,绘制函数曲线;
3.使用newff()函数建立BP网络结构,为二层BP神经网络。
隐层节点数n可改变暂设为n=10,输出为一个神经元隐层和输出层神经元传递函数为tansig()和purelin(),网络训练采用trainlm;
格式:newff(minmax(p),[n,1],{‘tansig’,’ purelin’},’ trainlm’)
4.使用sim函数查看输出;
格式:y=sim(net,p)
5.训练网络使用train()函数对网络进行训练,设定训练次数为50次,训练精度为0.01.
格式:net.trainParam.epochs=50;
Net.traunParam.goal=0.01;
Net=train(net,p,t);
6.网络测试
绘制网络输出曲线,与原始非线性函数曲线及为训练的网络输出结果曲线比较。
7.改变sin函数的频率参数k及BP网络隐层神经元个数n,重复上面操作,查看结果。
8.使用图型工具建立并训练网络。
命令:nntool;
9.查看matlab中的仿真模型。
命令:predcstr。
三. 实验要求
将实验内容中1-7步骤的程序依次写出来,如果有图像输出,将图像展示在相应程序下面,并标明图像的情况。
逼近正弦函数程序:
k=1;
>> p=[-1:0.05:1];
>> t=sin(k*pi*p);
>> n=10;
>> net=newff(minmax(p),[n,1],{'tansig','purelin'},'trainlm');
y1=sim(net,p);
>> figure;
>> plot(p,t,'-',p,y1,'--');
>> title('未训练网络输出结果');
>> xlabel('时间');
>> ylabel('仿真输出-- 原函数-');
>> net.trainParam.epochs=50;
>> net.trainParam.goal=0.01;
>> net=train(net,p,t);
>> y2=sim(net,p);
>> figure;
>> plot(p,t,'-',p,y1,'--',p,y2,'--');
>> title('训练网络输出结果');
>> xlabel('时间');
>> ylabel('仿真输出');
未训练输出结果:
训练输出结果:
四. 总结与问题
1.总结BP网络的优缺点;
答:优点:非线性映射能力、自学习和自适应能力、泛化能力、容错能力缺点:局部极小化问题、收敛速度慢、结构选择不一、应用实例与网络规模存在矛盾问题、预测能力和训练能力存在矛盾问题、样本依赖性太强
2.BP网络主要用于哪些方面;
答:(1)函数逼近:用输入向量和相应的输出变量训练一个网络以逼近一个函数;
(2)模式识别:用一个待定的输出向量将它与输入变量联系起来;
(3)分类:把输入向量所定义的合适方式进行分类;
(4)数据压缩:减少输出向量维数以便传输或存储。
3.画出单个神经元的模型,画出在上面实验中建立的BP网络模型结构图。
答:单个神经元如下所示:。