axis([0 10 0 10]);%横、纵坐标范围
hold on
%hold on 使当前轴及图形保持而不被刷新,准备接受此后将绘制的图形,多图共存
%hold off 使当前轴及图形不在具备被刷新的性质,新图出现时,取消原图
x=[];%存放鼠标取点坐标
n=0;%计数
%w1类取点向量
disp('单击鼠标左键点取需要的点');
disp('单击鼠标右键点取最后一个点');
but=1;
while but==1
[xi,yi,but]=ginput(1);%[x,y,button] = ginput(...) 返回x和y的坐标,以及button值(1=左键,2=中,3=右)或者按键的ASXII码值
plot(xi,yi,'b-o')
n=n+1;
disp('单击鼠标左键点取下一个点');
x(n,1)=xi;
x(n,2)=yi;
end;
nn=n;%w1分界点
%disp(num2str(nn));
hold on
%w2类取点向量
disp('单击鼠标右键点取需要的点');
disp('单击鼠标左键点取最后一个点');
but=3;
while but==3
[xi,yi,but]=ginput(1);
plot(xi,yi,'r-.*')
n=n+1;
disp('单击鼠标右键点取下一个点');
x(n,1)=xi;
x(n,2)=yi;
end
%disp(num2str(n));
y=zeros(n,3);%w1,w2类样本的增广向量
for i=1:nn
y(i,1)=x(i,1);
y(i,2)=x(i,2);
y(i,3)=1;
end
%disp(num2str(y));
for i=nn+1:n
y(i,1)=-x(i,1);
y(i,2)=-x(i,2);
y(i,3)=-1;
end
%disp(num2str(y));
w=[0;0;0];p=1;k=0;%给定初始权矢量,增量,步数
d=zeros(n,10000);%用来存储判别函数
for i=1:10000
for j=1:n
k=k+1;
d(j,i)=y(j,:)*w;
if d(j,i)<=0
w=w+y(j,:)';
end
end
if d(:,i)>0
disp('所求的解向量为:');
disp(num2str(w));
break;
end
end
fun=@(xx,yy)w(1)*xx+w(2)*yy+w(3);%匿名函数的定义:函数句柄=@(变量名) 函数表达式
h=ezplot(fun,[0 10 0 10]);%画出函数图形
set(h,'color','y','LineWidth',2);%%设置颜色和线宽
hold off