logo资料库

有序聚类算法代码.docx

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
要聚类的数据为:vector=[1.3 1.4 1.5 1.7 1.8 1.9 1.9 2.0 2.1 2.3 9.9] ; vector=[6.0 6.0 5.3 4.0 5.7 6.3 5.3 4.7 8.3 7.7 7.7 10.3] [2878 2968 3015 3319 3645 3834 4110 4136 4237 4315 4350 4370 4579 4724 4917 5425 5674 5820 6257 6670 6681 6813 6837 6837 6888 7287 7333 7378 7939 8018 8066 8284 8468 8542 9877 10424 10456 10583 10607]; [204 317 2248 2426 2589 2673 2894 2911 3645 4028 4237 4357 4658 5063 5650]; 数据正规化: MATLAB 代码:建立名为 std1. m 的 m 文件对矩阵进行标准化,首先分别 求出列的最大值和最小值后,然后利用循环函数对矩阵进行标准化。 function [std]=std1 (vector) %对矩阵进行标准化 %vector 为待分割矩阵 max1=max(vector); %对列求最大值 min1=min (vector); %对列求最小值 [a, b]=size (vector); %矩阵大小,a 为行数,b 为列数 for j=1:b std (j)=(vector (j)-min1)/(max1-min1); end 计算极差矩阵: MATLAB 代码:建立名为 range1. m 的 m 文件返回计算所得的极差矩阵。 function [D,a,b]=range1(vector) [a,b]=size (vector); %求矩阵大小,a 为行数,b 为列数 k=a; for i=1:b for j=i:b d(i,j) =max (vector(k,i:j))-min(vector(k,i:j)); end end D=d; 最优 K 分割代码: MATLAB 代码:建立名为 divi. m 的 m 文件返回计算最优 K 分割。 function [S,alp]=divi(vector,n) [d,a,b]=range1(vector); alp=zeros(1,b); %al(i,j)表示前 i 个样品的第 j 次分割点 for m=n:b %n 为要分割的段数 for j=n-1:m-1 if n==2 s(m, j)=d(1,j) +d(j+1,m);
else [S,alp]=divi(vector, n-1); s(m,j)=S(j,alp(j))+d(j+1,m); end end S=zeros(b,b); S_temp(m,1)=min(s(m,n-1:m-1)); for j=1:m-1 if S_temp(m, 1)==s (m,j); alp(m)=j; end end for t=1:m if alp(t)~=0 S(t,alp(t))=S_temp(t,1); end end end function [array]=sect(vector,n) %vector 为样品矩阵,当直接对样品矩阵进行分割时调用该函数 %array 返回样品最优 n 分割的分割点号 %n 为要分割的段数 [a,b]=size(vector); for num=n:-1:2 [S, alp]=divi(vector,num); if num ==n array(num-1)=alp(1,b); else array(num-1)=alp(array(num)); end end function [array]=fsect(filename,n) %filename 为需要分割的样品数据的文件名 %要对数据文件进行分割时调用该函数 fid=fopen(filename,'r'); [A,count]=fscanf(fid,'%f'); vector=A'; [a,b]=size(vector); for num=n:-1:2 [S, alp]=divi (vector,num); if num ==n array(num-1)=alp(1,b); else
array(num-1)=alp(array(num)); end end
分享到:
收藏