水箱液位控制器matlab

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验一:水箱液位模糊控制系统1实验目的应用模糊控制理论控制水箱水位系统,提出了用模糊理论实现对水箱水位进行控制的方案,建立了简单的基于水箱水位的模糊控制器。2实验内容1.对模糊理论相关知识进行理论学习。2.结合一级水箱水位系统进行模糊控制器的设计。3.利用MATLAB软件对水箱水位系统进行仿真及进行调试。4.对本文的工作进行总结,得出结论并对本文涉及的内容作出进一步的展望。3实验步骤根据前人经验,有以下规则:1.如果当前水位高于目标水位则向外排水,差值越大,排水速度越快;2.如果当前水位低于目标水位则向内注水,差值越大,注水速度越快;3.如果当前水位和目标水位比较接近,则保持排水速度和注水速度相等。选择偏差e作为目标水位和当前水位的差值作为观察量,选取阀门开度u为控制量。为了对输入量进行模糊化,必须知道某个输入值对应于论域上的那几个模糊集合、他们的隶属函数是如何分布的。根据被控对象的不同选择不同的模糊集合。在这里将偏差e划分为5个模糊集合,负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB)。其中偏差e的正负代表水位过高或者过低。同样将控制量u划分为5个模糊集。负大(NB)、负小(NS)、零(ZO)、正小(PS)、正大(PB)。设定e的取值范围为[-4,4],u的取值范围[-55]隶属度函数分别如下。模糊规则的制定是模糊控制的核心内容,控制性能的好坏很大程度上由模糊规则决定,目前主要是根据经验来制定相应的规则。1.若e负大,则u负大;2.若e负小,则u负小;3.若e为零,则u为零;4.若e正小,则u正小;5.若e正大,则u正大;调用evalfis函数就可以得到相应的决策控制量。调节偏差量e对应不同u的输出。实验总结近年来模糊控制在许多控制应用中都取得了成功,模糊控制应用于控制系统设计不需要知道被控对象精确的数学模型对于许多无法建立精确数学模型的复杂系统能获得较好的控制效果,同时又能简化系统的设计,因此,在水箱水位自动控制系统中,模糊控制就成为较好的选择。Matlab程序代码%水箱模糊控制clearall;closeall;a=newfis('fuzzytank');a=addvar(a,'input','e',[-4,4]);a=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'ZO','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'output','u',[-5,5]);a=addmf(a,'output',1,'NB','zmf',[-4,-2]);a=addmf(a,'output',1,'NS','trimf',[-4,-2,0]);a=addmf(a,'output',1,'ZO','trimf',[-2,0,2]);a=addmf(a,'output',1,'PS','trimf',[0,2,4]);a=addmf(a,'output',1,'PB','smf',[2,4]);%模糊规则rulelist=[1111;2211;3311;4411;5511];a=addrule(a,rulelist);%反模糊化算法a1=setfis(a,'DefuzzMethod','mom');writefis(a1,'tank');a2=readfis('tank');figure(1);plotfis(a2);figure(2);plotmf(a,'input',1);figure(3);plotmf(a,'output',1);showrule(a);ruleview('tank');fori=1:1:7e(i)=i-4;Ulist(i)=evalfis([e(i)],a2);endUlist=round(Ulist);disp('------------------------------------------------------');disp('----------模糊控制表:e=[-3,3],u=[-4,4]-----------');disp('------------------------------------------------------');fprintf('|a|');fprintf('%d|',e);fprintf('\n');fprintf('|u|');fprintf('%d|',Ulist);fprintf('\n');实验二:神经网络MATLAB实现BP神经网络及其MATLAB实例问题:BP神经网络预测2020年某地区客运量和货运量公路运量主要包括公路客运量和公路货运量两方面。某个地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,已知该地区20年(1999-2018)的公路运量相关数据如下:人数/万人:20.5522.4425.3727.1329.4530.1030.9634.0636.4238.0939.1339.9941.9344.5947.3052.8955.7356.7659.1760.63机动车数量/万辆:0.60.750.850.91.051.351.451.61.71.852.152.22.252.352.52.62.72.852.953.1公路面积/单位:万平方公里:0.090.110.110.140.200.230.230.320.320.340.360.360.380.490.560.590.590.670.690.79公路客运量/万人:512662177730914510460113871235315750183041983621024194902043322598251073344236836405484292743462公路货运量/万吨:123713791385139916631714183443228132893611099112031052411115133201676218673207242080321804影响公路客运量和公路货运量主要的三个因素是:该地区的人数、机动车数量和公路面积。Matlab代码实现%人数(单位:万人)numberOfPeople=[20.5522.4425.3727.1329.4530.1030.9634.0636.4238.0939.1339.9941.9344.5947.3052.8955.7356.7659.1760.63];%机动车数(单位:万辆)numberOfAutomobile=[0.60.750.850.91.051.351.451.61.71.852.152.22.252.352.52.62.72.852.953.1];%公路面积(单位:万平方公里)roadArea=[0.090.110.110.140.200.230.230.320.320.340.360.360.380.490.560.590.590.670.690.79];%公路客运量(单位:万人)passengerVolume=[512662177730914510460113871235315750183041983621024194902043322598251073344236836405484292743462];%公路货运量(单位:万吨)freightVolume=[123713791385139916631714183443228132893611099112031052411115133201676218673207242080321804];%输入数据矩阵p=[numberOfPeople;numberOfAutomobile;roadArea];%目标(输出)数据矩阵t=[passengerVolume;freightVolume];%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理[pn,inputStr]=mapminmax(p);[tn,outputStr]=mapminmax(t);%建立BP神经网络net=newff(pn,tn,[372],{'purelin','logsig','purelin'});%每10轮回显示一次结果net.trainParam.show=10;%最大训练次数net.trainParam.epochs=5000;%网络的学习速率net.trainParam.lr=0.05;%训练网络所要达到的目标误差net.trainParam.goal=0.65*10^(-3);%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置net.divideFcn='';%开始训练网络net=train(net,pn,tn);%使用训练好的网络,基于训练集的数据对BP网络进行仿真得到网络输出结果%(因为输入样本(训练集)容量较少,否则一般必须用新鲜数据进行仿真测试)answer=sim(net,pn);%反归一化answer1=mapminmax('reverse',answer,outputStr);%绘制测试样本神经网络输出和实际样本输出的对比图(figure(1))t=1999:2018;%测试样本网络输出客运量a1=answer1(1,:);%测试样本网络输出货运量a2=answer1(2,:);figure(1);subplot(2,1,1);plot(t,a1,'ro',t,passengerVolume,'b+');legend('网络输出客运量','实际客运量');xlabel('年份');ylabel('客运量/万人');title('神经网络客运量学习与测试对比图');gridon;subplot(2,1,2);plot(t,a2,'ro',t,freightVolume,'b+');legend('网络输出货运量','实际货运量');xlabel('年份');ylabel('货运量/万吨');title('神经网络货运量学习与测试对比图');gridon;%使用训练好的神经网络对新输入数据进行预测%新输入数据(2019年和2020年的相关数据)newInput=[73.3975.55;3.96354.0975;0.98801.0268];%利用原始输入数据(训练集的输入数据)的归一化参数对新输入数据进行归一化newInput=mapminmax('apply',newInput,inputStr);%进行仿真newOutput=sim(net,newInput);%反归一化newOutput=mapminmax('reverse',newOutput,outputStr);disp('预测2019和2020年的公路客运量分别为(单位:万人):');newOutput(1,:)disp('预测2019和2020年的公路货运量分别为(单位:万吨):');newOutput(2,:)%在figure(1)的基础上绘制2019和2020年的预测情况figure(2);t1=1999:2020;subplot(2,1,1);plot(t1,[a1newOutput(1,:)],'ro',t,passengerVolume,'b+');legend('网络输出客运量','实际客运量');xlabel('年份');ylabel('客运量/万人');title('神经网络客运量学习与测试对比图(添加了预测数据)');gridon;subplot(2,1,2);plot(t1,[a2newOutput(2,:)],'ro',t,freightVolume,'b+');legend('网络输出货运量','实际货运量');xlabel('年份');ylabel('货运量/万吨');title

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功