实验一 模糊控制器设计
一、 目的和要求
1. 目的
(1) 通过本次实验,进一步了解模糊控制的基本原理、模糊模型的建立和模糊控制器的设计过程。
(2) 掌握MATLAB模糊逻辑工具箱的图形用户界面设计模糊控制器的过程。
(3) 提高控制系统的仿真能力
(4) 熟悉MATLAB在模糊控制系统仿真中的应用。
2. 要求
(1)充分理解实验内容,并独立完成实验报告。
(2)实验题目、实验具体内容及实验功能、结果分析、收获或不足、程序清单。
二、 实验内容
完成对给定的对象的模糊控制器设计:
某一工业过程要根据测量的温度和压力来确定阀门开启的角度。假设输入温度∈[0,30]模糊化成两级:冷和热。压力∈[0,3]模糊化成两级:高和正常。输出阀门开启角度的增量∈[-10,10],模糊化成三级:正、负和零。模糊控制规则为:
IF 温度 is 冷 and 压力 is 高 THEN 阀门角度增量 is 正
IF 温度 is 热 and 压力 is 高 THEN 阀门角度增量 is 负
IF 压力 is 正常 THEN 阀门角度增量 is 零
适当选择隶属函数后,设计一基于Mamdani 模型的模糊推理系统,计算温度和压力分布为5 和 1.5 , 11和2, 以及论域范围内的另外一组输入(课任意选择)时的阀门开启的角度增量,并绘制输入和输出曲面图。
方法有三种:
1.在MATLAB COMMAND 界面直接编制程序实现(选作实验);
2.在MATLAB COMMAND 界面利用系统提供个模糊控制指令编制程序实现;
3.利用MATLAB利用matlab中的模糊逻辑工具箱提供的图形用户界面(GUI)工具设计模糊控制器。
三.实验步骤
1.在COMMAND界面利用以下MATLAB程序,进行实验验证。
2.利用MATLAB利用matlab中的模糊逻辑工具箱提供的图形用户界面(GUI)工具设计模糊控制器。
四. 实验结果及分析
五.体会与总结
模糊控制直接依据人类专家的控制经验进行设计,不依赖被控对象的模型,可以有效地实现对复杂、非线性、大滞后、不确定性严重的对象的控制。本次实验是利用MATLAB完成对给定的对象的模糊控制器设计。
通过这次实验,我对模糊控制有了深入的了解,熟悉了模糊控制的基本思想和原理,了解了模糊控制器的结构设计,以及模糊控制的应用领域。同时我也学会了使用MATLAB模糊逻辑工具箱的图形用户界面设计简单的模糊控制器,了解了模糊控制器各个参数的意义,以及模糊控制器的功能,对MATLAB
软件的功能有了进一步的了解。
实验二 神经网络控制器设计
一、实验目的
(1)熟悉MATLAB 工作环境,熟悉神经网络命令窗口;
(2)进一步了解神经网络控制的基本原理、神经网络模型的建立和神经网络控制器的设计过程;
(3)掌握BP神经网络算法的基本设计实现并拟合函数;
(4)熟练掌握误差反馈对网络权重修正的机理;
(5)熟悉BP网络隐含层节点个数,频率参数及训练算法对输出结果的影响。
二、 实验内容
BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。下面将通过实例来说明BP网络在函数逼近方面的应用。
要求设计一个BP网络,逼近函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。
(1)网络设计,包括输入层、隐含层、输出层节点个数的设计。
(2)算法步骤
(3)编程,注意原始数据的通用化,数据输入的随机性。
(4)网络训练,注意训练数据与验证数据分开。
(5)网络验证
(6)结果分析,修改隐含层节点个数,修改频率参数,修改训练算法,分别对结果的影响。
三、实验步骤
(1)基于BP神经网络逼近函数
步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。
k=1;
p=[-1:.05:8];
t=1+sin(k*pi/4*p);
plot(p,t,'-');
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
步骤2:网络的建立
应用newff()函数建立BP网络结构。隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg–Marquardt算法trainlm。
步骤3:网络训练
应用train()函数对网络进行训练之前,需要预先设置网络训练参数。将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。保存训练后得到的误差变化过程曲线。
步骤4: 网络测试
对于训练好的网络进行仿真,绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,保存比较出来的结果。
(2)不同频率下的逼近效果
(1)频率参数设为k=1,当隐层神经元数目取n=3时
(2)频率参数设为k=2,当隐层神经元数目分别取n=3、n=6时
(3)频率参数设为k=4,当隐层神经元数目分别取n=6、n=8时
分别观察并保存以上设置参数训练后的网络输出结果。分析网络输出结果。
(3)各种BP学习算法MATLAB仿真
根据上面对BP神经网络的MATLAB设计,可以得出下面的通用的MATLAB程序段,由于各种BP学习算法采用了不同的学习函数,所以只需要更改学习函数即可。设定好学习函数之后,运行并分别保存仿真误差曲线及仿真效果图。
MATLAB程序段如下:
x=-4:0.01:4;
y1=sin((1/2)*pi*x)+sin(pi*x);
%trainlm函数可以选择替换
net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm');
net.trainparam.epochs=2000;
net.trainparam.goal=0.00001;
net=train(net,x,y1);
y2=sim(net,x);
err=y2-y1;
res=norm(err);
Pause%暂停,按任意键继续
%绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线)
plot(x,y1);
hold on
plot(x,y2,'r+');
表1各种BP学习算法MATLAB仿真结果比较
记录并分析仿真结果,思考并分析下面问题:
四. 实验结果及分析
(1)基于BP神经网络逼近函数
要逼近的非线性函数
未训练网络的输出结果仿真输出--原函数-
时间非线性函数
时间 图1.1 要逼近的非线性函数 图1.2 未训练网络的输出结果
由图1.1和图1.2可以看出,未训练网络的输出结果与要逼近的非线性函数相差很大,因为使用newff()函数建立网络时,权值和阈值的初始化是随机的,所以网络输出结果很差,达不到函数逼近的目的。
训练后网络的输出结果
时间仿真输出图1.3 训练后网络的输出结果
由图1.3和图1.1可以看出,训练后网络的输出结果和要逼近的非线性函数很接近。BP神经网络有着
很强的学习能力和自适应能力,经过训练后,BP网络对非线性函数的逼近效果相当好。
(2)不同频率下的逼近效果
训练后网络的输出结果训练后网络的输出结果
仿真输出 仿真输出
时间
时间图2.1 k=1,n=3时训练后网络的输出结果
训练后网络的输出结果
图2.2 k=2,n=3时训练后网络的输出结果 训练后网络的输出结果 仿真输出仿真输出
时间时间图2.3 k=2,n=6时训练后网络的输出结果
训练后网络的输出结果图2.4 k=4,n=6 时训练后网络的输出结果 时间仿真输出
图2.5 k=4,n=8时训练后网络的输出结果
由图2.1至图2.5可以看出,k=1,n=3;k=2,n=3;k=2,n=6;k=4,n=8这四组参数对函数的逼近效果相对较好。对比五组参数的输出结果可以看出,非线性函数的频率值k越大,则BP神经网络对非线性函数的逼近效果越来越差。隐含层神经元个数n越大,则BP神经网络对非线性函数的逼近效果越好。
(3)各种BP学习算法MATLAB仿真
图 3.1 traingd
函数网络训练结果曲线
图 3.3 traingdm函数网络训练结果曲线
图3.5 trainrp函数网络训练结果曲线
图3.2 traingd函数网络训练仿真结果 图3.4 traingdm函数网络训练仿真结果 图3.6 trainrp函数网络训练仿真结果
图
3.7 traingdx
函数网络训练结果曲线
图3.9 traincgf函数网络训练结果曲线
图3.11 trainlm函数网络训练结果曲线 图3.8 traingdx函数网络训练仿真结果 图3.10 traincgf函数网络训练仿真结果 图3.12 trainlm函数网络训练仿真结果
不同的学习算法的收敛速度不相同,标准BP算法、增加动量法、弹性BP算法、动量及自适应学习速率法的收敛速度不如共轭梯度法和Levenberg-Marquardt法收敛速度快,Levenberg-Marquardt法的收敛速度最快。
从仿真结果和均方误差综合来看,只有Levenberg-Marquardt法达到了目标误差要求。
从仿真效果图来看,Levenberg-Marquardt法的效果最好,吻合程度最高且无震荡。其次是共轭梯度法和弹性BP算法。
五.体会与总结
这次实验,是神经网络控制器的设计,根据实验步骤,我依次完成了各项实验,熟悉了MATLAB神经网络工具箱,体会到了MATLAB软件的应用范围之广,在以后的学习中,应该多多学习使用MATLAB软件。
通过此次实验,我进一步的了解了神经网络控制的基本原理及神经网络模型的建立和神经网络控制器的设计过程,熟悉了BP神经网络算法的基本设计实现并拟合函数,加深了对神经网络的认识和理解,巩固了在课堂上学习的知识,收获了很多。
实验一 模糊控制器设计
一、 目的和要求
1. 目的
(1) 通过本次实验,进一步了解模糊控制的基本原理、模糊模型的建立和模糊控制器的设计过程。
(2) 掌握MATLAB模糊逻辑工具箱的图形用户界面设计模糊控制器的过程。
(3) 提高控制系统的仿真能力
(4) 熟悉MATLAB在模糊控制系统仿真中的应用。
2. 要求
(1)充分理解实验内容,并独立完成实验报告。
(2)实验题目、实验具体内容及实验功能、结果分析、收获或不足、程序清单。
二、 实验内容
完成对给定的对象的模糊控制器设计:
某一工业过程要根据测量的温度和压力来确定阀门开启的角度。假设输入温度∈[0,30]模糊化成两级:冷和热。压力∈[0,3]模糊化成两级:高和正常。输出阀门开启角度的增量∈[-10,10],模糊化成三级:正、负和零。模糊控制规则为:
IF 温度 is 冷 and 压力 is 高 THEN 阀门角度增量 is 正
IF 温度 is 热 and 压力 is 高 THEN 阀门角度增量 is 负
IF 压力 is 正常 THEN 阀门角度增量 is 零
适当选择隶属函数后,设计一基于Mamdani 模型的模糊推理系统,计算温度和压力分布为5 和 1.5 , 11和2, 以及论域范围内的另外一组输入(课任意选择)时的阀门开启的角度增量,并绘制输入和输出曲面图。
方法有三种:
1.在MATLAB COMMAND 界面直接编制程序实现(选作实验);
2.在MATLAB COMMAND 界面利用系统提供个模糊控制指令编制程序实现;
3.利用MATLAB利用matlab中的模糊逻辑工具箱提供的图形用户界面(GUI)工具设计模糊控制器。
三.实验步骤
1.在COMMAND界面利用以下MATLAB程序,进行实验验证。
2.利用MATLAB利用matlab中的模糊逻辑工具箱提供的图形用户界面(GUI)工具设计模糊控制器。
四. 实验结果及分析
五.体会与总结
模糊控制直接依据人类专家的控制经验进行设计,不依赖被控对象的模型,可以有效地实现对复杂、非线性、大滞后、不确定性严重的对象的控制。本次实验是利用MATLAB完成对给定的对象的模糊控制器设计。
通过这次实验,我对模糊控制有了深入的了解,熟悉了模糊控制的基本思想和原理,了解了模糊控制器的结构设计,以及模糊控制的应用领域。同时我也学会了使用MATLAB模糊逻辑工具箱的图形用户界面设计简单的模糊控制器,了解了模糊控制器各个参数的意义,以及模糊控制器的功能,对MATLAB
软件的功能有了进一步的了解。
实验二 神经网络控制器设计
一、实验目的
(1)熟悉MATLAB 工作环境,熟悉神经网络命令窗口;
(2)进一步了解神经网络控制的基本原理、神经网络模型的建立和神经网络控制器的设计过程;
(3)掌握BP神经网络算法的基本设计实现并拟合函数;
(4)熟练掌握误差反馈对网络权重修正的机理;
(5)熟悉BP网络隐含层节点个数,频率参数及训练算法对输出结果的影响。
二、 实验内容
BP网络由很强的映射能力,主要用于模式识别分类、函数逼近、函数压缩等。下面将通过实例来说明BP网络在函数逼近方面的应用。
要求设计一个BP网络,逼近函数:g(x)=1+sin(k*pi/4*x),实现对该非线性函数的逼近。其中,分别令k=1,2,4进行仿真,通过调节参数(如隐藏层节点个数等)得出信号的频率与隐层节点之间,隐层节点与函数逼近能力之间的关系。
(1)网络设计,包括输入层、隐含层、输出层节点个数的设计。
(2)算法步骤
(3)编程,注意原始数据的通用化,数据输入的随机性。
(4)网络训练,注意训练数据与验证数据分开。
(5)网络验证
(6)结果分析,修改隐含层节点个数,修改频率参数,修改训练算法,分别对结果的影响。
三、实验步骤
(1)基于BP神经网络逼近函数
步骤1:假设频率参数k=1,绘制要逼近的非线性函数的曲线。
k=1;
p=[-1:.05:8];
t=1+sin(k*pi/4*p);
plot(p,t,'-');
title('要逼近的非线性函数');
xlabel('时间');
ylabel('非线性函数');
步骤2:网络的建立
应用newff()函数建立BP网络结构。隐层神经元数目n可以改变,暂设为n=3,输出层有一个神经元。选择隐层和输出层神经元传递函数分别为tansig函数和purelin函数,网络训练的算法采用Levenberg–Marquardt算法trainlm。
步骤3:网络训练
应用train()函数对网络进行训练之前,需要预先设置网络训练参数。将训练时间设置为50,训练精度设置为0.01,其余参数使用缺省值。保存训练后得到的误差变化过程曲线。
步骤4: 网络测试
对于训练好的网络进行仿真,绘制网络输出曲线,并与原始非线性函数曲线以及未训练网络的输出结果曲线相比较,保存比较出来的结果。
(2)不同频率下的逼近效果
(1)频率参数设为k=1,当隐层神经元数目取n=3时
(2)频率参数设为k=2,当隐层神经元数目分别取n=3、n=6时
(3)频率参数设为k=4,当隐层神经元数目分别取n=6、n=8时
分别观察并保存以上设置参数训练后的网络输出结果。分析网络输出结果。
(3)各种BP学习算法MATLAB仿真
根据上面对BP神经网络的MATLAB设计,可以得出下面的通用的MATLAB程序段,由于各种BP学习算法采用了不同的学习函数,所以只需要更改学习函数即可。设定好学习函数之后,运行并分别保存仿真误差曲线及仿真效果图。
MATLAB程序段如下:
x=-4:0.01:4;
y1=sin((1/2)*pi*x)+sin(pi*x);
%trainlm函数可以选择替换
net=newff(minmax(x),[1,15,1],{'tansig','tansig','purelin'},'trainlm');
net.trainparam.epochs=2000;
net.trainparam.goal=0.00001;
net=train(net,x,y1);
y2=sim(net,x);
err=y2-y1;
res=norm(err);
Pause%暂停,按任意键继续
%绘图,原图(蓝色光滑线)和仿真效果图(红色+号点线)
plot(x,y1);
hold on
plot(x,y2,'r+');
表1各种BP学习算法MATLAB仿真结果比较
记录并分析仿真结果,思考并分析下面问题:
四. 实验结果及分析
(1)基于BP神经网络逼近函数
要逼近的非线性函数
未训练网络的输出结果仿真输出--原函数-
时间非线性函数
时间 图1.1 要逼近的非线性函数 图1.2 未训练网络的输出结果
由图1.1和图1.2可以看出,未训练网络的输出结果与要逼近的非线性函数相差很大,因为使用newff()函数建立网络时,权值和阈值的初始化是随机的,所以网络输出结果很差,达不到函数逼近的目的。
训练后网络的输出结果
时间仿真输出图1.3 训练后网络的输出结果
由图1.3和图1.1可以看出,训练后网络的输出结果和要逼近的非线性函数很接近。BP神经网络有着
很强的学习能力和自适应能力,经过训练后,BP网络对非线性函数的逼近效果相当好。
(2)不同频率下的逼近效果
训练后网络的输出结果训练后网络的输出结果
仿真输出 仿真输出
时间
时间图2.1 k=1,n=3时训练后网络的输出结果
训练后网络的输出结果
图2.2 k=2,n=3时训练后网络的输出结果 训练后网络的输出结果 仿真输出仿真输出
时间时间图2.3 k=2,n=6时训练后网络的输出结果
训练后网络的输出结果图2.4 k=4,n=6 时训练后网络的输出结果 时间仿真输出
图2.5 k=4,n=8时训练后网络的输出结果
由图2.1至图2.5可以看出,k=1,n=3;k=2,n=3;k=2,n=6;k=4,n=8这四组参数对函数的逼近效果相对较好。对比五组参数的输出结果可以看出,非线性函数的频率值k越大,则BP神经网络对非线性函数的逼近效果越来越差。隐含层神经元个数n越大,则BP神经网络对非线性函数的逼近效果越好。
(3)各种BP学习算法MATLAB仿真
图 3.1 traingd
函数网络训练结果曲线
图 3.3 traingdm函数网络训练结果曲线
图3.5 trainrp函数网络训练结果曲线
图3.2 traingd函数网络训练仿真结果 图3.4 traingdm函数网络训练仿真结果 图3.6 trainrp函数网络训练仿真结果
图
3.7 traingdx
函数网络训练结果曲线
图3.9 traincgf函数网络训练结果曲线
图3.11 trainlm函数网络训练结果曲线 图3.8 traingdx函数网络训练仿真结果 图3.10 traincgf函数网络训练仿真结果 图3.12 trainlm函数网络训练仿真结果
不同的学习算法的收敛速度不相同,标准BP算法、增加动量法、弹性BP算法、动量及自适应学习速率法的收敛速度不如共轭梯度法和Levenberg-Marquardt法收敛速度快,Levenberg-Marquardt法的收敛速度最快。
从仿真结果和均方误差综合来看,只有Levenberg-Marquardt法达到了目标误差要求。
从仿真效果图来看,Levenberg-Marquardt法的效果最好,吻合程度最高且无震荡。其次是共轭梯度法和弹性BP算法。
五.体会与总结
这次实验,是神经网络控制器的设计,根据实验步骤,我依次完成了各项实验,熟悉了MATLAB神经网络工具箱,体会到了MATLAB软件的应用范围之广,在以后的学习中,应该多多学习使用MATLAB软件。
通过此次实验,我进一步的了解了神经网络控制的基本原理及神经网络模型的建立和神经网络控制器的设计过程,熟悉了BP神经网络算法的基本设计实现并拟合函数,加深了对神经网络的认识和理解,巩固了在课堂上学习的知识,收获了很多。