break;
end
%调整输出层加权系数
deltak=Ok.*(1-Ok).*(T-Ok);
w=wki;
wki=wki+lr*deltak*Oi';
wki0=w;
%调整隐层加权系数
deltai=Oi.*(1-Oi).*(deltak'*wki)';
w=wij;
wij=wij+lr*deltai*X';
wij0=w;
end
epoch%显示计算次数
%根据训练好的wki,wij和给定的输入计算输出
X1=X;
%计算隐层各神经元的输出
NETi=wij*X1;
forj=1:
N
fori=1:
q
Oi(i,j)=2/(1+exp(-NETi(i,j)))-1;
end
end
%计算输出层各神经元的输出
NETk=wki*Oi;
fori=1:
N
fork=1:
L
Ok(k,i)=2/(1+exp(-NETk(k,i)))-1;
end
end
Ok%显示网络输出层的输出
2、BP逼近任意函数算法的matlab实现程序
⏹X=-4:
0.08:
4;
⏹T=1.1*(1-X+2*X.^2).*exp(-X.^2./2);
⏹net=newff(minmax(X),[20,1],{'tansig','purelin'});
⏹net.trainParam.epochs=15000;
⏹net.trainParam.goal=0.001;
⏹net=train(net,X,T);
⏹X1=-1:
0.01:
1;
⏹y=sim(net,X1);
⏹figure;
⏹plot(X1,y,'-r',X,T,':
b','LineWidth',2);
3.RBF能够逼近任意的非线性函数
⏹X=-4:
0.08:
4;
⏹T=1.1*(1-X+2*X.^2).*exp(-X.^2./2);
⏹net=newrb(X,T,0.002,1);
⏹X1=-1:
0.01:
1;
⏹y=sim(net,X1);
⏹figure;
⏹plot(X1,y,'-r',X,T,':
b','LineWidth',3);
五、思考题
1、试设计一个函数并将结果用图画出。
2、假设训练样本X=[11;-1-1;11],目标输出T=[11;11],建立一个输入层3个神经元,单隐层8个神经元,输出层2个神经元的网络结构,其中隐层、输出层神经元的传递函数均为sigmoid函数,
(1)试利用BP学习算法实现该网络的训练过程;
(2)利用增加动量项的BP学习算法实现该网络;
(3)观察两种学习算法的运行结果,比较两种算法的优缺点
3、训练参数的改变对逼近性能的影响
实验二、药品销售预测实验
一、实验目的
1、了解利用神经网络处理实际问题的一般思路
2、掌握MATLAB中常用神经网络函数
二、实验内容
1、数据预处理。
2、神经网络的MATLAB实现
三、实验步骤
1、熟悉MATLAB开发环境
2、输入参考程序
3、设置断点,运行程序,观察运行结果
四、参考程序
下表为某药品的销售情况,现构建一个如下的三层BP神经网络对药品的销售进行预测:
输入层有三个结点,隐含层结点数为5,隐含层的激活函数为tansig;输出层结点数为1个,输出层的激活函数为logsig,并利用此网络对药品的销售量进行预测,预测方法采用滚动预测方式,即用前三个月的销售量来预测第四个月的销售量,如用1、2、3月的销售量为输入预测第4个月的销售量,用2、3、4月的销售量为输入预测第5个月的销售量.如此
反复直至满足预测精度要求为止。
月份
1
2
3
4
5
6
销量
2056
2395
2600
2298
1634
1600
月份
7
8
9
10
11
12
销量
1873
1478
1900
1500
2046
1556
程序实现:
production=[205623952600229816341600187314781900150020461556];
gyhvector=(production-1478)/(2600-1478);
P=[0.51520.81731.0000;
0.81731.00000.7308;
1.00000.73080.1390;
0.73080.13900.1087;
0.13900.10870.3520;
0.10870.35200.0000;]';
T=[0.73080.13900.10870.35200.00000.3761];
net=newff([01;01;01],[5,1],{'tansig','logsig'},'traingd');
net.trainParam.epochs=500;%%%%可以改
net.trainParam.goal=0.005;
LP.lr=0.1;
net=train(net,P,T);
test=[0.01960.50620.0695;
0.37610.01960.5062;
00.37610.0196;
0.51520.81731.0000;
0.81731.00000.7308;
1.00000.73080.1390;
0.73080.13900.1087;
0.13900.10870.3520;
0.10870.35200.0000;
0.352000.3761;
00.37610.0196;
0.37610.01960.5062;]';
y=sim(net,test);
x=[1:
12];
figure;
plot(x,gyhvector,'rs',x,y,'bo');
set(gca,'xtick',x);
实验结果:
goal=0.005
五、思考题
简述利用MATLAB神经网络函数处理实际工程问题的一般方法和步骤
实验三、基本遗传算法设计实验
一、实验目的
1、了解基本遗传算法全局优化一般思路
2、掌握选择、交叉、变异算子如何实现
3、轮盘赌方法(roulettewheelmodel)如何用程序方法实现
4、适应度函数设计方法
二、实验内容
1、初始化处理。
2、神经网络的MATLAB实现
三、实验步骤
1、熟悉MATLAB开发环境
2、输入参考程序
3、设置断点,运行程序,观察运行结果
四、参考程序
1、初始化
functionresult=Initial(length)
fori=1:
length
r=rand();
result(i)=round(r);
end
2、Matlab实现----十进制与二进制转换
⏹functiony=Dec(a,b,x,L)
⏹base=2.^((L-1):
-1:
0);
⏹y=dot(base,x);
⏹y=a+y*(b-a)/(2^L-1);
3、Matlab实现---适应度函数计算
⏹functionF=fitness(x)
⏹F=20+x+10*sin(4*x)+8*cos(3*x);
4、Matlab实现----GA()
function[xv,fv]=GA(fitness,a,b,NP,NG,pc,pm)
L=24;%L=ceil(log((b-a)/eps+1))L=24
x=zeros(NP,L);
fori=1:
NP;
x(i,:
)=Initial(L);
fx(i)=fitness(Dec(a,b,x(i,:
),L));
end
fork=1:
NG
sumfx=sum(fx);
px=fx/sumfx;
ppx=0;
ppx
(1)=px
(1);
fori=2:
NP
ppx(i)=ppx(i-1)+px(i);
end
fori=1:
NP
sita=rand();
forn=1:
NP
ifsita<=ppx(n)
SelFather=n;
break;
end
end
SelMother=floor(rand()*(NP-1))+1;
posCut=floor(rand()*(L-2))+1;
r1=rand();
ifr1<=pc
nx(i,1:
posCut)=x(SelFather,1:
posCut);
nx(i,(posCut+1):
L)=x(SelMother,(posCut+1):
L);
r2=rand();
ifr2<=pm
posMut=round(rand()*(L-1)+1);
nx(i,posMut)=~nx(i,posMut);
end
else
nx(i,:
)=x(SelFather,:
);
end
end
x=nx;
fori=1:
NP
fx(i)=fitness(Dec(a,b,x(i,:
),L));
end
end
fv=-inf;
fori=1:
NP
fitx=fitness(Dec(a,b,x(i,:
),L));
iffitx>fv
fv=fitx;
xv=Dec(a,b,x(i,:
),L);
end
end
⏹
5、Matlab实现----主程序
a=0;
b=10;
NP=10;%%%%改
NG=2000;%%%该
pc=0.6;
pm=0.04;
[xv,fv]=GA(@fitness,a,b,NP,NG,pc,pm);
disp“最优个体"
xv
disp“最优适应度"
fv
6、实验结果
五、思考题
1、求y=x*x在【0,31】的最大值
2、如何求最小值并考虑怎样修改程序:
f(x)=x2-10x+16【0,31】的最小值?
实验四、模糊PID控制器设计实验
一、实验目的
1、掌握常规PID算法如何用程序来实现
2、掌握过程输出如何仿真
3、模糊PID控制器程序设计方法
4、比较两种控制器的控制效果
二、实验要求
具体要求如下:
1、模糊PID控制器设计方法。
2、过程输出仿真。
3、Matlab程序设计实现及调试。
三、实验原理
对于已知系统的传递函数为:
,假设系统给定为阶跃值R=10,系统的初始值R(0)=0,试分析设计:
a、常规的PID控制器
b、模糊PID控制器
c、比较两种控制器的控制效果
控制规则:
If(erroriserror<<0)then(duisdu>>0)
(1)
If(erroriserror=0)then(duisdu=0)
(1)
If(erroriserror>>0)then(duisdu<<0)
(1)
If(erroriserror<0)and(deisde<0)then(duisdu>>0)
(1)
If(erroriserror>0)and(deisde>0)then(duisdu<<0)
(1)
过程输出仿真:
四阶龙格库塔法
三、实验参考程序
模糊PID控制器:
常规的PID控制器:
五、思考题
1、模糊控制器设计方法
2、龙格库塔法模拟控制对象输出的原理?
实验五、模糊自适应PID控制设计实验
一、实验目的
1、掌握如何运用模糊推理来实现PID各个参数自动调节
2、掌握如何将操作人员的经验进行形式化变成可用的知识库
3、掌握过程输出如何仿真
4、模糊PID控制器程序设计方法
5、掌握自适应PID算法如何用程序来实现
二、实验要求
具体要求如下:
1、模糊PID控制器设计方法。
2、过程输出仿真。
3、Matlab程序设计实现及调试。
四、实验原理
模糊化规则由PID各个参数对系统的影响得到:
(a)当误差|e|较大时,说明误差的绝对值较大,不论误差的变化趋势如何,都应该考虑控制器的Kp取较大值,以提高响应的快速性;而为防止因为|ec|瞬时过大,kd应该取较小的值;为控制超调,ki也应该取值很小。
(b)当误差|e|在中等大小时,为保证系统的相应速度并控制超调,应减小Kp,Ki值应增大,Kd应适中。
(c)当误差|e|较小时,为保证系统具有良好的稳态特性,应加大Kp、Ki的取值,同时为避免产生振荡,Kd的取值应该和|ec|联系起来。
模糊PID控制根据系统运行的不同状态,考虑Kp、Ki、Kd三者的关联,根据工程经验设计模糊整定这三个参数,选择输入语言变量为误差e和偏差变化率ec,语言变量值取{NB,NM,NS,0,PS,PM,PB}七个模糊值;选择输出语言变量为△Kp,△Ki,△Kd语言变量值也取{NB,NM,NS,0,PS,PM,PB}七个模糊值,建立△Kp,△Ki,△Kd的模糊规则表如下表1、表2、表3。
五、实验参考程序
五、思考题
1、自适应模糊PID控制基本原理及框图
2、考虑在改变控制对象传递函数的情况下如何修改程序,并以具体实例说明。