您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 房地产 > 灰色关联度matlab源程序
灰色关联度matlab源程序最近几天一直在写算法,其实网上可以下到这些算法的源程序的,但是为了搞懂,搞清楚,还是自己一个一个的看了,写了,作为自身的积累,而且自己的的矩阵计算类库也迅速得到补充,以后关于算法方面,基本的矩阵运算不用再重复写了,挺好的,是种积累,下面把灰关联的matlab程序与大家分享。灰色关联度分析法是将研究对象及影响因素的因子值视为一条线上的点,与待识别对象及影响因素的因子值所绘制的曲线进行比较,比较它们之间的贴近度,并分别量化,计算出研究对象与待识别对象各影响因素之间的贴近程度的关联度,通过比较各关联度的大小来判断待识别对象对研究对象的影响程度。关联度计算的预处理,一般初值化或者均值化,根据我的实际需要,本程序中使用的是比较序列与参考序列组成的矩阵除以参考序列的列均值等到的,当然也可以是其他方法。%注意:由于需要,均值化方法采用各组值除以样本的各列平均值clear;clc;yangben=[47.92437525.168125827.4105438330.088751045.164375261.37437516.33726.62940.2824709.2752962.128484.87455.6966666730.80333333885.21275.80666671052.42435.81];%样本数据fangzhen=[36.2714.59836.15420.411011.83189.5464.7335.63755.45331.32978.5257.8742.4423.07846348.051025.4296.6959.3439.7794.31334.631016.4317.2752.9117.14821.79306.921141.94122.044.214.861815.522584.68963.610.006.012.431791.612338.171278.0830.873.011.581220.54956.141244.753.9125.657.42790.17328.881026.0192.82115.8027926.5350.931079.49544.3812.638.751055.501379.00875.101.65];%待判数据[rows,cols]=size(fangzhen);p=0.5;%分辨系数[m,n]=size(yangben);R=[];forirow=1:rowsyy=fangzhen(irow,:);data=[yy;yangben];data_gyh1=mean(yangben)fori=1:m+1forj=1:ndata_gyh(i,j)=data(i,j)/data_gyh1(j);endendfori=2:m+1forj=1:nDij(i-1,j)=abs(data_gyh(1,j)-data_gyh(i,j));endendDijmax=max(max(Dij));Dijmin=min(min(Dij));fori=1:mforj=1:nLij(i,j)=(Dijmin+p*Dijmax)/(Dij(i,j)+p*Dijmax);endendLijRowSum=sum(Lij');fori=1:mRij(i)=LijRowSum(i)/n;endR=[R;Rij];endRmatlab求灰色关联度矩阵源代码2010-12-1122:57functiongreyrelationaldegree(X,c)%GRAYRELATIONALDEGREEthisfunctionisusedforcalculatingthegery%relationbetweensquence%rememeberthatthefirstcolumnoftheinputmatrixisthedesicion%attributionsquences.whatwewanttocalculateisthegreyralationaldegreebetween%itandotherattributions%Xisthesquencematrix,cistheparameterusedinthefunction%inmostofthetime,thevalueofcis0.5firstrow=X(1,:);reci_firstrow=1./firstrow;reci_convert=diag(reci_firstrow);initialMIRROR=X*reci_convert;%findtheinitialvaluemirrorofthesequcematrixA=initialMIRROR'[nrow,ncolumn]=size(A);for(i=2:nrow)C=A(i,:)-A(1,:)D=abs(C);eval(['B'num2str(i)'=D']);amax=max(eval(['B'num2str(i)]))amin=min(eval(['B'num2str(i)]))maxarray(i-1)=amaxminarray(i-1)=aminend%findthedifferencesquenceandthemaxvalueandminvalueofeachsquencemaxmax=max(maxarray)minmin=min(minarray)for(i=2:nrow)for(j=1:ncolumn)eval(['greyrelationdegree'num2str(i)'(j)=(minmin+c*maxmax)/(B'num2str(i)'(j)+c*maxmax)'])endend%calculatethegreyralationaldegreeofeachdatafor(i=2:nrow)eval(['greyrelatioanaldegree_value'num2str(i)'=mean(greyrelationdegree'num2str(i)')'])end基于matlab灰色关联度计算的实现2006年07月28日星期五上午11:06functionr=incident_degree(x0,x1)%computetheincidentdegreeforgreymodel.%DesignedbyNIXIUHUI,DalianFisherUniversity.%17August,2004,LastmodifiedbyNXHat21August,2004%数据初值化处理x0_initial=x0./x0(1);temp=size(x1);b=repmat(x1(:,1),[1temp(2)]);x1_initial=x1./b;%分辨系数选择K=0.1;disp('Thegreyinterconnectdegreeis:');x0_ext=repmat(x0_initial,[temp(1)1]);contrast_mat=abs(x0_ext-x1_initial);delta_min=min(min(contrast_mat));%delta_min在数据初值化后实际为零delta_max=max(max(contrast_mat));a=delta_min+K*delta_max;incidence_coefficient=a./(contrast_mat+K*delta_max);%得到关联系数r=(sum(incidence_coefficient'))'/temp(2);%得到邓氏面积关联度我们根据图1的步骤和图2的数据进行编程实现,程序如下:%清除内存空间等clear;closeall;clc;%载入源数据%其实这里可以载入execl表格的n=15;%参与评价的人数m=4;%参与评价的指标个数X_0=zeros(n,m);%数据矩阵X_2=zeros(n,m);%偏差结果的求取矩阵X_3=zeros(n,m);%相关系数计算矩阵a1_0=[131817181717181713171813181318];a2_0=[181817171813171318131713131717];a3_0=[48.6743.3343.5641.8939.4743.4437.9741.1439.6739.8334.1140.5834.1930.7521.22];a4_0=[1010.735.45.40.74.20.59.30.852.95.454.22.76];%指标数X_1=[a1_0',a2_0',a3_0',a4_0'];%最后使用到的数据矩阵%1寻找参考列x0=[max(a1_0),max(a2_0),max(a3_0),max(a4_0)];%取每列的最大值(指标的最大值)%2计算偏差结果i=1;while(i~=m+1)%为什么这个地方会出问题呢forj=1:1:nX_2(j,i)=abs(X_1(j,i)-x0(i));end;i=i+1;end%3确定偏差的最值error_min=min(min(X_2));error_max=max(max(X_2));%4计算相关系数i=1;p=0.5;while(i~=m+1)forj=1:1:nX_3(j,i)=(error_min+p*error_max)/(X_2(j,i)+p*error_max);end;i=i+1;end%X_3%可以在此观察关联矩阵%5计算各个学生的关连序a=zeros(1,n);forj=1:1:nfori=1:1:ma(j)=a(j)+X_3(j,i);%%%%其实可以直接用sumend;a(j)=a(j)/m;%%%%%%%%%可以改进%%%%%%%%%%123下一页%end%a%在此可以观测各个学生的序%改进:如果各个指标的所占权重不一样的话,可以添加相应的权系数%6排序b=a';[c,s]=sort(b);fori=1:1:nd(i)=i;endd=d';result=[dbcs]%7将结果显示出来figure(1);plot(a);figure(2)bar(a);%柱状图最后所得到的结果如图3到图5所示。图3程序运行结果图4曲线图图5柱状图根据以上三图我们就可以判断出每个学生序列与参考序列(最大值)之间的关系,与最大值的关系越密切,那么其关联度越大。根据以上的启示,我用matlab灰度关联分析的想法是:1、参考序列我可以选择已知属于某一类神经元的统计数据,我选择平均值。2、加入一个未知类的数据,与已有类中的数据一起计算他们与平均值的关联度。3、计算出来的关联度我们可以有多种处理思路,如果未知类的关联度不是排在最末,可以认为它属于这一类,或者未知类的关联度大于计算出来的关联度平均值,我们可以认为它属于这一类。使用关联度进行分类,计算出来的关联度如何使用还是个问题,这个东西是我琢磨出来的,我还没有见到过相关的文献,估计应该可以用,期望以后的专家学者钻研了。参考文献:[1]郝海燕,王斌.大学生综合素质测评的灰色关联分析法[J].承德石油高等专科学校学报,2009,11(2):57-59.上一页123请教一下用MATLAB实现灰色关联分析的程序初始矩阵为x=[1.141.491.692.122.434.325.926.077.85;3.303.473.613.804.004.194.424.614.80;6.006.006.007.507.507.509.009.009.00;1.201.201.801.801.802.402.703.604.00;4.875.896.767.978.8410.0511.3112.2511.64]我写的程序如下:x1=[1.141.491.692.122.434.325.926.077.85;3.303.473.613.804.004.194.424.614.80;6.006.006.007.507.507.509.009.009.00;1.201.201.801.801.802.402.703.604.00;4.875.896.767.97
本文标题:灰色关联度matlab源程序
链接地址:https://www.777doc.com/doc-5532163 .html