📄 getpoints.m
字号:
%函数名称:GetPoints(Num,A,xp,phai,CrX,CrY)
%函数作用:建立正弦信号曲线作为理想分类面,在一定区域内随机生成指定个数的座标点
% 并给出原始分类信息,作为分类训练样本。
%函数参数:Num,A,xp,phai,CrX,CrY
%参数说明:Num:需要的坐标点数
% A:正弦信号的幅值
% xp:正弦信号的周期
% phai:正弦信号的初相角
% CrX:坐标点分布的水平范围(x=0/CrX)
% CrY:坐标点分布的垂直范围(y=+/-CrY)
%函数输出:Points[]
%输出说明:Points[x,y,i]:坐标点(x,y),其分类为i,如果坐标点在
% 正弦信号上方,则i=1;如果在正弦信号下方,则i=0。
% (实际上,为了满足BP网络输出的要求,i分别为0.95和0.05。)
%创建日期:2007.12.31
%最后更新日期:2007.12.31
function Points=GetPoints(Num,A,xp,phai,CrX,CrY);
%生成随机坐标点数组(0-1之间),乘以2是为了后面取舍方便,防止点恰好出现在分类面上
rndpoints=rand(2,Num*2);
%将随机坐标点线性水平变换到(0,CrX)之间,垂直变换到(-Cr,Cr)之间
rndpoints(1,:)=rndpoints(1,:)*CrX;
rndpoints(2,:)=(rndpoints(2,:)-0.5)*CrY*2;
%定义一个循环计数器
counter=1;
%为rndpoints定义一个移动指针
rdp=1;
%生成待输出的随机坐标点矩阵
output=zeros(3,Num);
%开始循环对随机坐标点进行分类
while(counter<=Num)
%如果坐标点恰好在分类面上,直接放弃,进入下一次循环
if(rndpoints(2,rdp) == A * sin(2 * pi * rndpoints(1,rdp) / xp + phai))
rdp=rdp+1;
continue;
end
%如果坐标点在分类面上方,分类1,否则分类2
if(rndpoints(2,rdp) > A * sin(2 * pi * rndpoints(1,rdp) / xp + phai))
output(1,counter)=rndpoints(1,rdp);
output(2,counter)=rndpoints(2,rdp);
output(3,counter)=0.95;
end
if(rndpoints(2,rdp) < A * sin(2 * pi * rndpoints(1,rdp) / xp + phai))
output(1,counter)=rndpoints(1,rdp);
output(2,counter)=rndpoints(2,rdp);
output(3,counter)=0.05;
end
%计数器加一
rdp=rdp+1;
counter=counter+1;
end
%输出生成好的已分类的坐标点列
Points=output;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -