• 大小: 753KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: rbf  matlab  

资源简介

用于函数逼近的rbf的 matlab代码,有 结果图和 实验报告,可运行

资源截图

代码片段和文件信息

function RBF() 
%%基于梯度法的RBF网设计算法 
tic 
SamNum=100;  %训练样本数 
TargetSamNum=101;  %测试样本数 
UnitNum=10;  %隐节点数 
InDim=1;  %输入样本维数 
MaxEpoch=5000;  %最大训练次数 
E0=0.9;  %目标误差 
  
%根据样本目标函数获得样本输入/输出 
rand(‘state‘sum(100*clock))  %产生均匀分布的随机矩阵,元素0.0-1.0 
NoiseVar=0.1; 
Noise=NoiseVar*randn(1SamNum);  %产生正态分布的随机矩阵 
SamIn=8*rand(1SamNum)-4; 
SamOutNoise=1.1*(1-SamIn+2*SamIn.^2).*exp(-SamIn.^2/2); 
SamOut=SamOutNoise+Noise; 

 
TargetIn=-4:0.08:4; 
TargetOut=1.1*(1-TargetIn+2*TargetIn.^2).*exp(-TargetIn.^2/2); 
 
figure 
hold on 
grid 
plot(SamInSamOut‘r+‘) 
plot(TargetInTargetOut‘g-‘) 
xlabel(‘Inputx‘); 
ylabel(‘Outputy‘); 
 
Center=8*rand(InDimUnitNum)-4;%中心 
SP=0.2*rand(1UnitNum)+0.1;%扩展常数 
W=0.2*rand(1UnitNum)-0.1;%权值 
lrCent=0.001;  %隐节点数据中心学习系数 
lrSP=0.001;  %隐节点扩展常数学习系数 
lrW=0.001;  %隐节点输出权值学习系数 

%alphacent=0.8;
%alphasp=0.8;
%alphaw=0.8;

ErrHistory=[];  %用于记录每次参数调整后的训练误差 
for epoch=1:MaxEpoch 
    AllDist=dist(Center‘SamIn); 
    SPMat=repmat(SP‘1SamNum); 
    UnitOut=radbas(AllDist./SPMat);  %radbas是径向基函数 
    NetOut=W*UnitOut; 
    Error=SamOut-NetOut; 
    %停止学习判断 
    SSE=sumsqr(Error); 
    %记录每次权值调整后的训练误差 
    ErrHistory=[ErrHistory SSE]; 
    if SSE        break; 
    end 
    for i=1:UnitNum     
        CentGrad=(SamIn-repmat(Center(:i)1SamNum))*(Error.*UnitOut(i:)*W(i)/(SP(i)^2))‘;%中心的梯度 
        SPGard=AllDist(i:).^2*(Error.*UnitOut(i:)*W(i)/(SP(i)^3))‘;%扩展常数的梯度 
        WGard=Error*UnitOut(i:)‘;%权值的梯度 
             
        Center(:i)=Center(:i)+lrCent*CentGrad; 
        SP(i)=SP(i)+lrSP*SPGard; 
        W(i)=W(i)+lrW*WGard;   
    
 %Center(:i)=Center(:i)+lrCent*CentGrad+alphacent*pre_CentGrad; 
 %SP(i)=SP(i)+lrSP*SPGard+alphasp*pre_SPGard; 
 %W(i)=W(i)+lrW*WGard+alphaw*pre_WGard;
         %pre_CentGrad=CentGrad;
         %pre_SPGard=SPGard;
         %pre_WGard=WGard;

    end 
end 
%测试 
TestDistance=dist(Center‘TargetIn); 
TestSpreadsMat=repmat(SP‘1TargetSamNum); 
TestHiddenOut=radbas(TestDistance./TestSpreadsMat); 
TestNNOut=W*TestHiddenOut; 
plot(TargetInTestNNOut‘b-‘) 
toc 
%绘制学习误差曲线 
figure 
hold on 
grid 
[~Num]=size(ErrHistory); 
plot(1:NumErrHistory‘k-‘); 
%epoch;
end

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      783889  2018-04-20 21:55  RBF\BRF函数逼近.pdf
     文件        2437  2018-04-20 21:49  RBF\RBF.m
     文件      705654  2018-04-20 21:50  RBF\误差.bmp
     文件      705654  2018-04-20 21:50  RBF\逼近.bmp
     目录           0  2018-04-21 23:43  RBF\

评论

共有 条评论