1、1智能控制理论与应用实验实验三:利用 MATLAB神经网络工具箱编程实现 Hermit多项式逼近一、实验目的:(1)加深对神经网络控制概念的理解;(2)掌握神经网络工具箱的应用;(3)熟练编程操作。二、实验内容:利用 MATLAB神经网络工具箱编程实现 Hermit多项式逼近。3、实验步骤:F(x)=1.1*(1x+2*x )exp(x /2)22训练样本按以下方式产生:样本数 P=100,其中输入样本 X1服从区间-4,4内的均匀分布,样本输出为 F(xi)+ei,ei 为添加的噪声,服从均值为 0,标准差为 0.1的正态分布。(1)试用聚类方法求数据中心和扩展常数,输出权值和阈值用伪逆法求
2、解。隐节点数 M=10,隐节点重叠系数 =1,初始聚类中心取前 10个训练样本。(2)试用梯度算法训练 RBF网络,设 =0.001,M=10,初始权值为-0.1,0.1内的随机数,初始数据中心为-4.0,4.0内的随机数,初始扩展常数取0.1,0.3内的随机数,目标误差为 0.9,最大训练次数为 5000。(3)编写代码如下:function main()SamNum=100;TestSamNum=101;InDim=1;ClusterNum=10;Overdap=1.0;rand(state,sum(100*clock)NoiseVar=0.1;Noise=NoiseVar*rand(1,
3、SamNum);Samln=8*rand(1,SamNum)-4;SamOutNoNoise=1.1*(1-SamIn+2*SamIn.2).*exp(-SamIn.2/2);SamOut=SamOutNoNoise+Noise;TestSamIn=-4:0.08:4;TestSamOut=1.1*(1-TestSamIn+2*TestSamIn.2).*exp(-TestSamIn.2/2);figurehold ongridplot(SamIn,SamOut,k+)plot(TestSamIn,TestSamOut,k-)xlabel(Input x);ylabel(Output y);2
4、Centers=SamIn(:,1:ClusterNum);NumberInClustem=zeros(ClusterNum,1);IndexInClusters=zeros(ClusterNum,SamNum);while 1NumberInClustem=zeros(ClusterNum,1);IndexInClusters=zeros(ClusterNum,SamNum);for i=1:SantNumAllDistance=dist(Center,SamIn(:,i);MinDist,Pos=min(AllDistance);NumberInClusters(pos)=NumberIn
5、Clusters(pos)+1;IndexInClusters(Pos,NumberInClusters(Pos)=i;endOldCenters=Centers;for i=1:ClusterNumIndex=IndexInClusters(i,1:NumberInClusters(i);Centers(:,i)=mean(SamIn(:,Index);endEqualNum=Sum(sun(Centers=OldCenters);if EqualNum=InDim*ClusterNum,break,endendAllDistances=dist(Centers,Centers);Maxim
6、um=max(max(AllDistances);for i=1:ClusterNumAllDistances(i,i)=Maximum+1;endSpreads=Overlap*min(AllDistances);Distance=dist(Centers,SamIn);SpreadsMat=repmat(Spreads,1,SamNunl);HiddenUnitOut=radbas(Distance./SpreadsMat)HiddenUnitOutEx=HiddenUnitOutones(SamNum,1);W2Ex=SamOut*pinv(HiddenUnitOutEx);W2=W2E
7、x(:,1:ClusterNum);B2=W2Ex(:,ClusterNum+1);TestDistance=dist(Centers,TestSamIn);TestSpreadsMat=repmat(Spreads,1,TeasSamNum);TestHiddenUnitOut=radbas(TestDistance./TestSpreadsMat);TestNNOut=W2*TestHiddenUnitOut+B2;plot(TestSamIn,TestNN+t,k-)(4)编写代码说明:3SamNum为训练样本数;TestSamNum为测试样本数;InDim为样本输入维数;Cluster
8、Num为隐节点数,即聚类样本数;Overdap为隐节点重叠系数;在 while语句之前将各类样本数初始化为零,语句如下:NumberInClustem=zeros(ClusterNum,1);IndexInClusters=zeros(ClusterNum,SamNum)表示各类语句的索取号;然后按照最小距离原则对所有样本进行分类,保存了旧的聚类中心后再重新计算各类的聚类中心,如果新旧聚类中心一致,则结束聚类。聚类结束之后开始计算各隐节点的扩展常数:计算隐节点数据中心间的距离,找出其中最大的一个距离,将对角线上的 0替换为较大的值,以隐节点间的最小距离作为扩展常数,计算各样本输入离各数据中心的距离,计算隐节点输出矩阵,求广义输出权值,输出权值,然后进行测试。四、得到的测试结果如下: