📄 classcover516.m
字号:
function f=classcover()
%读味觉信号数据
[fid1,message]=fopen('2wdata.dat','r');
[A,count]=fscanf(fid1,'%f %f %i',[3,inf]);
fclose(fid1);
[fid2,message]=fopen('statistic.dat','w');
NumofClass1=100;
NumofOtherClass=1000;
NumofTotalClass=1100;
%转换数据的矩阵次序
TempA=A;
for sequence=1:1:11
A=[];
A=TempA;
switch sequence
case 1
A=TempA;
case 2
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+100);
A(2,i)=TempA(2,i+100);
A(3,i)=TempA(3,i+100);
A(1,i+100)=TempA(1,i);
A(2,i+100)=TempA(2,i);
A(3,i+100)=TempA(3,i);
end
case 3
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+200);
A(2,i)=TempA(2,i+200);
A(3,i)=TempA(3,i+200);
A(1,i+200)=TempA(1,i);
A(2,i+200)=TempA(2,i);
A(3,i+200)=TempA(3,i);
end
case 4
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+300);
A(2,i)=TempA(2,i+300);
A(3,i)=TempA(3,i+300);
A(1,i+300)=TempA(1,i);
A(2,i+300)=TempA(2,i);
A(3,i+300)=TempA(3,i);
end
case 5
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+400);
A(2,i)=TempA(2,i+400);
A(3,i)=TempA(3,i+400);
A(1,i+400)=TempA(1,i);
A(2,i+400)=TempA(2,i);
A(3,i+400)=TempA(3,i);
end
case 6
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+500);
A(2,i)=TempA(2,i+500);
A(3,i)=TempA(3,i+500);
A(1,i+500)=TempA(1,i);
A(2,i+500)=TempA(2,i);
A(3,i+500)=TempA(3,i);
end
case 7
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+600);
A(2,i)=TempA(2,i+600);
A(3,i)=TempA(3,i+600);
A(1,i+600)=TempA(1,i);
A(2,i+600)=TempA(2,i);
A(3,i+600)=TempA(3,i);
end
case 8
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+700);
A(2,i)=TempA(2,i+700);
A(3,i)=TempA(3,i+700);
A(1,i+700)=TempA(1,i);
A(2,i+700)=TempA(2,i);
A(3,i+700)=TempA(3,i);
end
case 9
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+800);
A(2,i)=TempA(2,i+800);
A(3,i)=TempA(3,i+800);
A(1,i+800)=TempA(1,i);
A(2,i+800)=TempA(2,i);
A(3,i+800)=TempA(3,i);
end
case 10
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+900);
A(2,i)=TempA(2,i+900);
A(3,i)=TempA(3,i+900);
A(1,i+900)=TempA(1,i);
A(2,i+900)=TempA(2,i);
A(3,i+900)=TempA(3,i);
end
case 11
for i=1:1:NumofClass1
A(1,i)=TempA(1,i+1000);
A(2,i)=TempA(2,i+1000);
A(3,i)=TempA(3,i+1000);
A(1,i+1000)=TempA(1,i);
A(2,i+1000)=TempA(2,i);
A(3,i+1000)=TempA(3,i);
end
end
%建立各数据点的半径信息
MaxRadius=0;% rep. maxradius
for i=1:1:NumofClass1
radius=2;
ax=A(1,i);
ay=A(2,i);
aclass=A(3,i);
for j=(NumofClass1+1):1:NumofTotalClass
bx=A(1,j);
by=A(2,j);
bclass=A(3,j);
tempradius=sqrt((ax-bx)^2+(ay-by)^2);
if tempradius<radius
radius=tempradius;
end
end
A(4,i)=radius;
if MaxRadius<radius
MaxRadius=radius;
end
end
%用改进的贪心算法找最大覆盖点
RateA=0.03;
RateB=0.4;
A(5,1)=0;%num of covered points w.r.t a point
A(6,1)=0;%uncovered points
coverend=1;
while coverend>=1
for i=1:1:NumofClass1
x=0;
if A(6,i)==0
for j=1:1:NumofClass1
if A(6,j)==0
tempradius=sqrt((A(1,i)-A(1,j))^2+(A(2,i)-A(2,j))^2);
if A(4,i)>RateB*MaxRadius
A(4,i)=RateB*MaxRadius;
end
if tempradius<=A(4,i)
x=x+1;
end
end
end
A(5,i)=x;
end
end
%找中心点
var=0;
position=0;
for i=1:1:NumofClass1
if (A(6,i)==0)&(A(5,i)>=RateA*NumofClass1)
if (var==0)
var=1;
position=i;
y=A(5,i);
elseif A(5,i)>y
position=i;
y=A(5,i);
end
end
end
%去除已被覆盖的点
if position>0
for i=1:1:NumofClass1
tempredius=sqrt((A(1,i)-A(1,position))^2+(A(2,i)-A(2,position))^2);
if tempredius<=A(4,position)
A(6,i)=1; %1 rep. be covered
end
end
end
%画图显示,B(2,x)---radius;(A(1,x),A(2,x))---centra
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -