clear%产生第一类和第二类原始数据,分别赋值给w1和w2变量w1=[0.16.8-3.52.04.13.1-0.80.95.03.9;1.17.1-4.12.72.85.0-1.31.26.44.0];w2=[-3.00.52.9-0.1-4.0-1.3-3.4-4.1-5.11.9;-2.98.785.22.23.76.23.41.65.1];%分别产生第一类和第二类增广样本向量集ww1、ww2ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];%产生第一类和第二类样本向量的规范化增广样本向量集w12w12=[ww1,-ww2];y=zeros(1,size(w12,2));%产生1x20的行向量,赋给y,初值全为0a=[1;1;1];%给权向量a赋初值k=0;%k为迭代次数,a(0)=[1;1;1]whileany(y=0)fori=1:size(y,2)y(i)=a'*w12(:,i);enda=a+(sum((w12(:,find(y=0)))'))';k=k+1;enda%显示最终求得的权向量a的值k%迭代次数值figure(1)plot(w1(1,:),w1(2,:),'r+')holdonplot(w2(1,:),w2(2,:),'*')xmin=min(min(w1(1,:)),min(w2(1,:)));xmax=max(max(w1(1,:)),max(w2(1,:)));ymin=min(min(w1(2,:)),min(w2(2,:)));ymax=max(max(w1(2,:)),max(w2(2,:)));xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-a(2)*xindex/a(3)-a(1)/a(3);plot(xindex,yindex)我自己模仿写的:%%测试函数点clcclearallx1=-1:0.1:1;y1=x1+2;w1=[x1;y1];x2=-1.5:0.1:0.5y2=x2;w2=[x2;y2];figure(1)plot(x1,y1,'r+')holdonplot(x2,y2,'g*')ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];w12=[ww1,-ww2];a=[1;1;1];y=zeros(1,size(w12,2));k=1;whileany(y=0)fori=1:size(w12,2)y(i)=a'*w12(:,i);endtemp=sum((w12(:,find(y=0)))')';a=a+temp;k=k+1;endakxmin=min(min(x1),min(x2));xmax=max(max(x1),max(x2));ymin=min(min(y1),min(y2));ymax=max(max(y2),max(y2));xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-a(2)/a(3)*xindex-a(1)/a(3);holdonplot(xindex,yindex)心得体会:感知器准则函数只能用来线性分类,而且最有找到判决边界一般在边界面上,具体原理还是比较好理解的。三类情况:clear%originaldata%产生第一类、第二类和第三类原始数据,分别赋给w1、w2和w3变量w1=[0.10.8-3.52.04.13.1-0.825.03.9;1.17.1-4.12.72.85.0-1.31.26.44.0];w2=[7.1-1.44.56.34.21.42.42.58.44.1;4.2-4.30.01.61.9-3.2-4.0-6.13.7-2.2];w3=[-3.052.9-0.1-4.0-1.3-3.4-4.1-5.11.9;-2.98.72.15.22.23.76.23.41.65.1];figure(1)plot(w1(1,:),w1(2,:),'r.')holdonplot(w2(1,:),w2(2,:),'*')%normalized%分别产生第一类、第二类和第三类增广样本向量集ww1、ww2和ww3ww1=[ones(1,size(w1,2));w1];ww2=[ones(1,size(w2,2));w2];ww3=[ones(1,size(w3,2));w3];%产生第一类和第二类样本向量的规范化增广样本向量集w12w12=[ww1,-ww2];%%w13=[ww1,-ww3];%%w23=[ww2,-ww3];y=zeros(1,size(w12,2));%产生1x20的行向量,赋给y,初值全为0v=[1;1;1];%给权向量v赋初值k=0;%k为迭代次数,v(0)=[1;1;1]whileany(y=0)fori=1:size(y,2)y(i)=v'*w12(:,i);endv=v+(sum((w12(:,find(y=0)))'))';k=k+1;endv%显示最终求得的权向量v的值k%迭代次数值figure(1)plot(w1(1,:),w1(2,:),'r.')holdonplot(w2(1,:),w2(2,:),'*')xmin=min(min(w1(1,:)),min(w2(1,:)));xmax=max(max(w1(1,:)),max(w2(1,:)));ymin=min(min(w1(2,:)),min(w2(2,:)));ymax=max(max(w1(2,:)),max(w2(2,:)));xindex=xmin-1:(xmax-xmin)/100:xmax+1;yindex=-v(2)*xindex/v(3)-v(1)/v(3);plot(xindex,yindex)%写出实现批处理感知器算法的程序,从v=0开始,将程序应用在ω2和ω3类上,同样记下收敛的步数。w23=[ww2,-ww3];yy=zeros(1,size(w23,2));%产生1x20的行向量,赋给y,初值全为0vv=[1;1;1];%给权向量v赋初值kk=0;%k为迭代次数,v(0)=[1;1;1]whileany(yy=0)fori=1:size(yy,2)yy(i)=vv'*w23(:,i);endvv=vv+(sum((w23(:,find(yy=0)))'))';kk=kk+1;endvv%显示最终求得的权向量v的值kk%迭代次数值figure(2)plot(w2(1,:),w2(2,:),'r.')holdonplot(w3(1,:),w3(2,:),'*')xxmin=min(min(w2(1,:)),min(w3(1,:)));xxmax=max(max(w2(1,:)),max(w3(1,:)));yymin=min(min(w2(2,:)),min(w3(2,:)));yymax=max(max(w2(2,:)),max(w3(2,:)));xxindex=xmin-1:(xxmax-xxmin)/100:xxmax+1;yyindex=-vv(2)*xxindex/vv(3)-vv(1)/vv(3);plot(xxindex,yyindex)