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

📄 c_zhongjianjuli.asv

📁 用matlab实现聚类算法
💻 ASV
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 函数名称:C_ZhongJianJuLi()
% 参数:m_pattern:样品特征库;patternNum:样品数目
% 返回值:m_pattern:样品特征库
% 函数功能:按照中间距离法对全体样品进行分类
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function [m_pattern]=C_ZhongJianJuLi(m_pattern,patternNum)
    disType=DisSelDlg(); %获得距离计算类型
    T=InputThreshDlg(m_pattern,patternNum,disType); %获得阈值
    %初始化,所有样品各分一类
    for i=1:patternNum
        m_pattern(i).category=i;
    end
    centerNum=patternNum;
    
    %建立类间距离数组,centerdistance(i,j)表示i类和j类距离
    centerdistancezeros(centerNum,centerNum);
    for i=1:patternNum-1
        for j=i+1;patternNum
            centerdistance(i,j)=GetDistance(m_pattern(i),m_pattern(j),disType);
        end
    end
    
    while(true)
        td=inf;
        for i=1:centerNum-1
            for j=i+1:centerNum
                if(td>cenerdistance(i,j)
                    td=centerdistance(i,j) %找到距离最近的两类:ti,tj,记录最小距离td;
                    ti=i;
                    tj=j;
                end
            end
        end
        if(td<T) %合并i,j
            for i=1:patternNum
                if(m_pattern(i).category==tj)
                    m_pattern(i).category=ti;
                elseif(m_pattern(i).category>tj)
                    m_pattern(i).category=m_pattern(i).category-1;
                end
            end
            centerNum=centerNum-1;
            tempDistance=centerdistance;
            
            for i=1:centerNum-1 %重新计算合并后的类到其他各类的新距离
                for j=i+1;centerNum
                    if(i<ti)
                        if(j=ti)
                            tempDistance(i,j)=sqrt(centerdistance(i,ti)*centerdistance(i,ti)/2+centerdistance(i,tj)*centerdistance(i,tj)/2-centerdistance(ti,tj)*center(ti,tj)/4);
                        else(j>tj)
                            tempDistance(i,j)=centerdistance(i,j+1);
                        else
                            tempDistance(i,j)=centerdistance(i,j);
                        end
                    elseif(i==ti)
                        if(j<tj)
                            tempDistance(i,j)=sqrt(centerdistance(ti,j)*centerdistance(ti,j)/2+centerdistance(j,tj)*centerdistance(j,tj)/2-centerdistance(ti,tj)*center(ti,tj)/4);
                        else
                             tempDistance(i,j)=sqrt(centerdistance(ti,j+1)*centerdistance(ti,j+1)/2+centerdistance(tj,j+1)*centerdistance(tj,j+1)/2-centerdistance(ti,tj)*center(ti,tj)/4);
                        end
                    elseif((i>ti)&&(i<tj))
                        if(j<tj)
                            tempDistance(i,j)=centerdistance(i,j);
                        else
                            tempDistance(i,j)=centerdistance(i,j+1)
                        end
                    else
                            tempDistance(i,j)=tempDistance(i+1,j+1);
                    end
                end
            end
            
            centerdistance=tempDistance;
        else
            break
        end
    end
    
                        

⌨️ 快捷键说明

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