简介:本文档为《纵横向拉开档次法的MATLAB实现》,可适用于工程科技领域,主题内容包含globalxystdszxystdxy定义全局变量loadshuju原始数据xystd=zscore(shuju)数据无量纲处理xystdrow,符等。
global xystdsz xystd x y %定义全局变量load shuju %原始数据xystd= zscore (shuju); %数据无量纲处理[xystdrow,xystdcol]=size(xystd);%----------区域知识创造能力评价----------for tt=1:xystdcolxystdsz{tt}(:,:)=xystd{tt}(:,1:10); %提取区域知识创造能力指标无量纲值end[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);for i=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); %权重归一化for tt=1:xystdszcolz{tt}(:,1)=xystd{tt}(:,1:10)*wqz1'; % 求评价值pxacz(:,tt)=px(z{tt}(:,1)) ; % 对评价值排序endclear w0 w lb ub faval ;clear global xystdsz;%--------区域知识流动能力评价------------for tt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,11:16); %提取区域知识流动能力指标无量纲值endglobal xystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);for i=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 );for tt=1:xystdszcolz{tt}(:,2)=xystd{tt}(:,11:16)*wqz2'; % 求评价值pxald(:,tt)=px(z{tt}(:,2)) ; % 对评价值排序endclear w0 w lb ub faval ;clear global xystdsz;%-----------企业技术创新能力评价------------for tt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,17:28); %提取企业技术创新能力指标无量纲值endglobal xystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);for i=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); %权重归一化for tt=1:xystdszcolz{tt}(:,3)=xystd{tt}(:,17:28)*wqz3'; % 求评价值pxaqy(:,tt)=px(z{tt}(:,3)) ; % 对评价值排序endclear w0 w lb ub faval ;clear global xystdsz;%-----------创新环境能力评价--------------for tt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,29:35); %提取创新环境能力指标无量纲值endglobal xystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);for i=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 );for tt=1:xystdszcolz{tt}(:,4)=xystd{tt}(:,29:35)*wqz4'; % 求评价值pxahj(:,tt)=px(z{tt}(:,4)) ; % 对评价值排序endclear w0 w lb ub faval ;clear global xystdsz;%-------------创新经济绩效能力评价--------------for tt=1:xystdszcolxystdsz{tt}(:,:)=xystd{tt}(:,36:42); %提取创新绩效能力指标无量纲值endglobal xystdsz;[xystdszrow,xystdszcol]=size(xystdsz);[xyrow,xycol]=size(xystdsz{1});w0=zeros(1,xycol);for i=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); %权重归一化for tt=1:xystdszcolz{tt}(:,5)=xystd{tt}(:,36:42)*wqz5'; % 求评价值pxajx(:,tt)=px(z{tt}(:,5)) ; % 对评价值排序end% --------求整体综合能力评价排序-----------------clear w0 w lb ub faval ;clear global xystdsz;xystdsz=z;global xystdsz;[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); %权重归一化for kk=1:zcolz(:,kk)=z{kk}*wqz6'; % 求评价值pxazz=px(zz) ; % 对评价值排序end%---------- zzfxcapcity表示各项能力得分-结果-----------for i=1:7for j=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.mfunction xysum=YHQU(w,xystdsz)global xystdsz[xystdrow,xystdcol]=size(xystdsz);[xystdrow1,xystdcol1]=size(xystdsz{1});for i=1:xystdcolfor j=1:xystdrow1xyvalue(j,i)=xystdsz{i}(j,:)*w';endendxymean=mean(mean(xyvalue));for i=1:xystdrow1 %xystdrow1=30for j=1:xystdcol %xystdcol=7xyvar(i,j)=(xyvalue(i,j)-xymean).^2;endendxysum=-sum(sum(xyvar));%-------排序px..mfunction pxa=px(gyhjg) % px排序.pxa是排序结果,gyhjg是要进行排序的评价值列向量jga=gyhjg;[m,n]=size(jga);for col=1:nfor i=1:m-1for j=i+1:mif jga(i,col)<jga(j,col)temp=jga(i,col);jga(i,col)=jga(j,col);jga(j,col)=temp;endendendfor col=1:nfor i=1:mfor j=1:mif gyhjg(i,col)==jga(j,col)pxa(i,col)=j;% comtinueendendendend%-----约束条件fun.mfunction [c,ceq]=fun(w)ceq=w*w'-1;c=[];%----------改进归一法bzycl.m----------function xystd=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表示指标数if n1>0m=m1; %表示待评价对象数else if n2>0m=m2;endendfor t=1:ycolif n2>0xy{t}(:,1:n2)=y{t};endif n1>0xmin=min(x{t});xmax=max(x{t});for i=1:n1for j=1:mxy{t}(j,n2+1:n1+n2)=xmax(i)+xmin(i)-x{t}(j,i); %对逆向指标进行处理;endendxyflag=all(xy{t}>=zeros(m,n)); %判断是否存在xy(j,i)<0xymin=min(xy{t});for i=1:nif xyflag(i)==0for j=1:mxy{t}(j,i)=xy{t}(j,i)-xymin(i); %对xy(j,i)<0的指标进行平移处理,使所有指标非负endendendxysum{t}=sum(xy{t}); %列求和xystd{t}=xy{t}./xysum{t}(ones(m,1),:); %进行列和等于11归一化处理xystd{t}=m*xystd{t}; %避免由于待评价对象m很大时,xystd值很小,所以乘以m end。