⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classcover2.m

📁 基于类覆盖算法和粒子群优化的神经网络解决模式分类问题
💻 M
📖 第 1 页 / 共 2 页
字号:
function f=classcover()
%读味觉信号数据

[fid1,message]=fopen('2wdata.dat','r');
[A,count]=fscanf(fid1,'%f %f %i',[3,inf]);
fclose(fid1);

%转换数据的矩阵次序
TempA=A;
for sequence=1:1:11
    A=[];
    A=TempA;
    switch sequence
        case 1
            A=TempA;
        case 2
            for i=1:1:100
                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:100
                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:100
                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:100
                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:100
                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:100
                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:100
                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:100
                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:100
                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:100
                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

            
            
            
            
%建立各数据点的半径信息
    for i=1:1:100
        radius=2;
        ax=A(1,i);
        ay=A(2,i);
        aclass=A(3,i);
        for j=101:1:1100
            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;
    end

%贪心算法找最大覆盖点
    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:100
            x=0;
            if A(6,i)==0
                for j=1:1:100
                    if A(6,j)==0
                        tempradius=sqrt((A(1,i)-A(1,j))^2+(A(2,i)-A(2,j))^2);
                        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:100
            if A(6,i)==0
                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:100
                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
        if position ==0
            coverend=0;
        else %paint circle 
            hold on
            for t=A(1,position)-A(4,position):A(4,position)/100:A(1,position)+A(4,position);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -