利用MATLAB编写感知器算法,求判别函数
一、算法思想(以后有时间再更新吧)
二、matlab程序:(明白了思想,实现就很简单了)
clc;
clear all;
%%初始化
% w1=[0 0 0;1 0 0;1 0 1;1 1 0]';
% w2=[0 0 1;0 1 1;0 1 0;1 1 1]';
w1=[0 0;0 1]';
w2=[1 0;1 1]';
%构建增广矩阵
w1(end+1,:)=1;
w2(end+1,:)=1;
w2=-w2;%%w2×-1
[m,n]=size(w1);
%取c和w(1)
c=1;
wx=[zeros(1,m)]';
flag2=1;
time=1;
while(flag2==1)%循环直到没有错误为止
flag2=0;
disp(sprintf('第%d轮',time));
for i=1:n %w1
flag=wx'*w1(:,i)
if flag<=0%判断与0的大小
wx=wx+c*w1(:,i)%权向量惩罚,像正确方向移动
flag2=1;%有错误就置1
else
wx=wx%权向量奖励,不变
end
end
for i=1:n%w2道理同上
flag=wx'*w2(:,i)
if flag<=0
flag2=1;
wx=wx+c*w2(:,i)
else
wx=wx
end
end
time=time+1;
end
disp('overdata')
wx
三、运行结果展示:
第1轮
flag =
0
wx =
0
0
1
flag =
1
wx =
0
0
1
flag =
-1
wx =
-1
0
0
flag =
1
wx =
-1
0
0
第2轮
flag =
0
wx =
-1
0
1
flag =
1
wx =
-1
0
1
flag =
0
wx =
-2
0
0
flag =
2
wx =
-2
0
0
第3轮
flag =
0
wx =
-2
0
1
flag =
1
wx =
-2
0
1
flag =
1
wx =
-2
0
1
flag =
1
wx =
-2
0
1
第4轮
flag =
1
wx =
-2
0
1
flag =
1
wx =
-2
0
1
flag =
1
wx =
-2
0
1
flag =
1
wx =
-2
0
1
overdata
wx =
-2
0
1
>>