📄 cmac工作过程演示.m
字号:
%初始化
clear;
clc;
%step1:从S到M的映射
%输入样本的量化
Xs1=['ABCD';'EBCD';'EFCD';'EFGD';'EFGH'];
Xs2=['abcd';'ebcd';'efcd';'dfgd';'dfgh';'ifgh';'ijgh'];
Xs1
Xs2
%step2:从M到A的映射
Ax=[];
for i=1:7
As=[];
for j=1:5
for k=1:4
p=[Xs1(j,k),Xs2(8-i,k)];
As=[As,p];
end
end
Ax=[Ax;As];
end
Ax
%step3:从A到Ap的映射
%用“杂散技术”完成多到少的映射
abs(Ax)
Ap=[];
for i=1:7
for j=1:2:39
q=Ax(i,j)*1000+Ax(i,j+1);
k=(j+1)/2;
Ap(i,k)=q;
end
end
Ap
N=rem(Ap,17)
%建全矩阵向量W
W=zeros(16,1);
%查地址表得到权值
M=[];
for i=1:7
for j=1:1:20
r=N(i,j)+1;
s=W(r,1);
M(i,j)=s;
end
end
M
%求和得到输出矩阵Y
Y=[];
for i=1:7
for j=1:4:17
q=M(i,j)+M(i,j+1)+M(i,j+2)+M(i,j+3);
k=(j+3)/4;
Y(i,k)=q;
end
end
Y
%期望输出
Yd=[-1.0000 0 3.5000 2.0000 2.0000
2.5000 3.5000 0.5000 -1.0000 -1.0000
2.5000 2.5000 -0.5000 -2.0000 -2.0000
4.0000 4.0000 1.0000 -0.5000 -1.5000
5.0000 5.0000 2.0000 -1.0000 -2.0000
3.5000 3.5000 3.5000 0.5000 -0.5000
3.5000 2.0000 2.0000 -1.0000 -2.0000];
%权值调整
D=[];
for j=1:5
for i=1:7
D(i,j)=Yd(i,j)-Y(i,j);
end
end
b=1;
C=4;
for i=1:7
for j=1:4:17
r=N(i,j)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+1)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+2)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+3)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
end
end
W
%循环学习修改权值
while (sum(abs(D)))>1
M=[];
for i=1:7
for j=1:1:20
r=N(i,j)+1;
s=W(r,1);
M(i,j)=s;
end
end
Y=[];
for i=1:7
for j=1:4:17
q=M(i,j)+M(i,j+1)+M(i,j+2)+M(i,j+3);
k=(j+3)/4;
Y(i,k)=q;
end
end
D=[];
for j=1:5
for i=1:7
D(i,j)=Yd(i,j)-Y(i,j);
end
end
for i=1:7
for j=1:4:17
r=N(i,j)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+1)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+2)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
r=N(i,j+3)+1;
s=W(r,1);
s=s+b*D(i,(j+3)/4)/C;
W(r,1)=s;
end
end
W
Y
end
W
Y
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -