您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > (完整版)纵横向拉开档次法的MATLAB实现
简介:本文档为《纵横向拉开档次法的MATLAB实现》,可适用于工程科技领域,主题内容包含globalxystdszxystdxy定义全局变量loadshuju原始数据xystd=zscore(shuju)数据无量纲处理xystdrow,符等。globalxystdszxystdxy%定义全局变量loadshuju%原始数据xystd=zscore(shuju);%数据无量纲处理[xystdrow,xystdcol]=size(xystd);%----------区域知识创造能力评价----------fortt=1:xystdcolxystdsz{tt}(:,:)=xystd{tt}(:,1:10);%提取区域知识创造能力指标无量纲值end[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);fori=1:xycolw0(1,i)=1/xycol;%优化初始值endAeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);%zeros生成零矩阵;ones生成全1阵。options=optimset('largescale','off');%优化函数,largescale大规模算法[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);%优化求权重;fmincon用来求解非线性多元函数最小值。wqz1=w./sum(w);%权重归一化fortt=1:xystdszcolz{tt}(:,1)=xystd{tt}(:,1:10)*wqz1';%求评价值pxacz(:,tt)=px(z{tt}(:,1));%对评价值排序endclearw0wlbubfaval;clearglobalxystdsz;%--------区域知识流动能力评价------------fortt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,11:16);%提取区域知识流动能力指标无量纲值endglobalxystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);fori=1:xycolw0(1,i)=1/xycol;%优化w初始值endAeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);options=optimset('largescale','off');[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);wqz2=w./sum(w);%权重归一化fortt=1:xystdszcolz{tt}(:,2)=xystd{tt}(:,11:16)*wqz2';%求评价值pxald(:,tt)=px(z{tt}(:,2));%对评价值排序endclearw0wlbubfaval;clearglobalxystdsz;%-----------企业技术创新能力评价------------fortt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,17:28);%提取企业技术创新能力指标无量纲值endglobalxystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);fori=1:xycolw0(1,i)=1/xycol;%优化w初始值endAeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);options=optimset('largescale','off');[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);wqz3=w./sum(w);%权重归一化fortt=1:xystdszcolz{tt}(:,3)=xystd{tt}(:,17:28)*wqz3';%求评价值pxaqy(:,tt)=px(z{tt}(:,3));%对评价值排序endclearw0wlbubfaval;clearglobalxystdsz;%-----------创新环境能力评价--------------fortt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,29:35);%提取创新环境能力指标无量纲值endglobalxystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);fori=1:xycolw0(1,i)=1/xycol;%优化w初始值endAeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);options=optimset('largescale','off');[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);wqz4=w./sum(w);%权重归一化fortt=1:xystdszcolz{tt}(:,4)=xystd{tt}(:,29:35)*wqz4';%求评价值pxahj(:,tt)=px(z{tt}(:,4));%对评价值排序endclearw0wlbubfaval;clearglobalxystdsz;%-------------创新经济绩效能力评价--------------fortt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,36:42);%提取创新绩效能力指标无量纲值endglobalxystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);fori=1:xycolw0(1,i)=1/xycol;%优化w初始值endAeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);options=optimset('largescale','off');[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);wqz5=w./sum(w);%权重归一化fortt=1:xystdszcolz{tt}(:,5)=xystd{tt}(:,36:42)*wqz5';%求评价值pxajx(:,tt)=px(z{tt}(:,5));%对评价值排序end%--------求整体综合能力评价排序-----------------clearw0wlbubfaval;clearglobalxystdsz;xystdsz=z;globalxystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);Aeq=[];beq=[];lb=zeros(1,xycol);ub=ones(1,xycol);options=optimset('largescale','off');[w,faval]=fmincon(@YHQU,w0,[],[],Aeq,beq,lb,ub,@fun,options);wqz6=w./sum(w);%权重归一化forkk=1:zcolz(:,kk)=z{kk}*wqz6';%求评价值pxazz=px(zz);%对评价值排序end%----------zzfxcapcity表示各项能力得分-结果-----------fori=1:7forj=1:5zzfxcapcity{j}(:,i)=z{i}(:,j);endendzzfxcapcity{6}(:,:)=zz;%----------pxafxcapcity表示各项能力排序结果------------pxafxcapcity{1}=pxacz;pxafxcapcity{2}=pxald;pxafxcapcity{3}=pxaqy;pxafxcapcity{4}=pxahj;pxafxcapcity{5}=pxajx;pxafxcapcity{6}=pxazz;%-------优化程序YHQU.mfunctionxysum=YHQU(w,xystdsz)globalxystdsz[xystdrow,xystdcol]=size(xystdsz);[xystdrow1,xystdcol1]=size(xystdsz{1});fori=1:xystdcolforj=1:xystdrow1xyvalue(j,i)=xystdsz{i}(j,:)*w';endendxymean=mean(mean(xyvalue));fori=1:xystdrow1%xystdrow1=30forj=1:xystdcol%xystdcol=7xyvar(i,j)=(xyvalue(i,j)-xymean).^2;endendxysum=-sum(sum(xyvar));%-------排序px..mfunctionpxa=px(gyhjg)%px排序.pxa是排序结果,gyhjg是要进行排序的评价值列向量jga=gyhjg;[m,n]=size(jga);forcol=1:nfori=1:m-1forj=i+1:mifjga(i,col)jga(j,col)temp=jga(i,col);jga(i,col)=jga(j,col);jga(j,col)=temp;endendendendforcol=1:nfori=1:mforj=1:mifgyhjg(i,col)==jga(j,col)pxa(i,col)=j;%comtinueendendendend%-----约束条件fun.mfunction[c,ceq]=fun(w)ceq=w*w'-1;c=[];%----------改进归一法bzycl.m----------functionxystd=bzycl(x,y)%bzycl改进的归一方法,是本系统默认采用的对指标值进行标准化处理的方法,%x是逆向指标值矩阵,通过xmax+xmin-x转化为正向指标;y是正向指标值矩阵;%如果存在负数指标值通过xy-min(xy)进行转化;最后利用列和归一化处理,考虑待评价数m很大时,xystd值很小,所以乘以m.%xystd是标准化处理后的指标值[yrow,ycol]=size(y);[m1,n1]=size(x{1});%m1表示x的行数,n1表示x的列数,逆向指标个数[m2,n2]=size(y{1});%n2表示正向指标个数n=n1+n2;%n表示指标数ifn10m=m1;%表示待评价对象数elseifn20m=m2;endendfort=1:ycolifn20xy{t}(:,1:n2)=y{t};endifn10xmin=min(x{t});xmax=max(x{t});fori=1:n1forj=1:mxy{t}(j,n2+1:n1+n2)=xmax(i)+xmin(i)-x{t}(j,i);%对逆向指标进行处理;endendendxyflag=all(xy{t}=zeros(m,n));%判断是否存在xy(j,i)0xymin=min(xy{t});fori=1:nifxyflag(i)==0forj=
本文标题:(完整版)纵横向拉开档次法的MATLAB实现
链接地址:https://www.777doc.com/doc-7283707 .html