博大广阔 发表于 2011-11-18 18:54

CMAC神经网络的非线性系统识别

%CMAC Identification for nonlinear model
function CMAC=CMAC_indentification()
clear all;
close all;
%%%%%%%%%%%%%%%%%%%%initial vallue and set the parameter of system %%%%%%%%
xite=0.8;                      %输出层权值的学习效率,也可以大于1;
alfa=0.05;                     %输出层的惯性常数
M=100;N=7;    C=7;         %M为概念映射量化后的最大值,C为泛化参数,检测单元的感受野大小
                               %N为实际映射中除以一个质数,中得质数
w=zeros(N,1);                  %输出层权值的初始值
%w=rands(N,1);
                               %!!这里C等于w
ts=0.01;tmax=1;             %仿真时间和步长
%%%%%%%%%%%%%%%%%%%%%%loop needed value%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
w_1=w; w_2=w; u_1=0;y_1=0;

for k=1:1:tmax/ts
%%%%%%%%%%%%%%%%%%%%%be controled model%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
y=u_1^3+y_1/(1+y_1^2);
u=sin(4*2*pi*k*ts/2)+1;
%%%%%%%%%%%%%%%%%%%%%%%CMAC神经网络输出计算%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xmin=0; xmax=2;         %跟u有直接的关系,是u的最大值和最小值
s=round((u-xmin)*M/(xmax-xmin));    %Quantity,按线性函数量化
sum=0;
for i=1:1:C
   ad(i)=mod(s+i,N)+1;   %Table mapping and Hash transfer:Start address
   sum=sum+w(ad(i));
end
ym=sum;                      %CMAC神经网络的输出
%%%%%%%%%%%%%%%%%%%%%%%%%CMAC神经网络的输出权值的调整%%%%%%%%%%%%%%%%%%%%%%%%%%
error=y-ym;                     %性能指标
d_w=xite*error/C;                %采用梯度下降法获得
for i=1:1:C
   ad(i)=mod(s+i,N)+1;      %实际地址,相当于坐标。选中其中的权值进行调整
   w(ad(i))=w_1(ad(i))+ d_w+alfa*(w_1(ad(i))-w_2(ad(i)));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%parameter update%%%%%%%%%%%%%%%%%%%%%%%%%
w_2=w_1;w_1=w;u_1=u;y_1=y;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%output save%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
time(k)=ts*k;                  %record the time
YY(k)=y; YYm(k)=ym;
end
plot(time,YY,'b',time,YYm,'r');grid on
end



















页: [1]
查看完整版本: CMAC神经网络的非线性系统识别