大家好,又见面了,我是你们的朋友全栈君。
利用matlab编程,很容易根据变异系数法,求得多指标综合评价模型的权重。 代码如果有不懂的地方,可以联系我。
变异系数法求权重matlab 代码
clear;clc;
[data1,header1]=xlsread(‘statistic1.xlsx’,’ECO’); %必须将statistic.xlsx至于默认文件下,或者给出完整路径
[data2,header2]=xlsread(‘statistic2.xlsx’,’ECO’); % data1 为10个city数据,data2位20个city数据
size1=size(data1);m1=size1(1,1);d1=data1;d2=data2;
size2=size(data2);m2=size2(1,1);
judge=[4 6 12 13 16 17 18]; % 需要极大化处理的指标位置
for j=1:length(judge) % 将极小型数据指标极大化,便于计算得分 d2(:,judge(1,j))=1./d2(:,judge(1,j));
d1(:,judge(1,j))=1./d1(:,judge(1,j));
end
sum2=sum(d2);sum1=sum(d1);
data22=[];data11=[];
for i=1:m2 % 数据归一化处理
data22=[data22;d2(i,:)./sum2];
end
for i=1:m1
data11=[data11;d1(i,:)./sum1];
end
R=data22;
deta=std(R)./mean(R); % 计算变异系数
w=deta/sum(deta);
%score=data1*w’; % 综合得分
score=data11*w’;
output=[mean(R);deta;w];
score1=5 (score-min(score) std(score)/length(score))./(max(score)-min(score) mean(score)/length(score))*95;
% 功效系数法,使得得分在[5,100]
[ScoreFinal,index]=sort(score1,’descend’); %降序排列
sort=[ScoreFinal,index]; % 得分与排名
xlswrite(‘statistic1.xlsx’,output,’变异系数’); %输出均值mean,标准差std,权重w 到statistic1.xlsx
xlswrite(‘statistic1.xlsx’,sort,’变异sortDescend’); %输出得分与排名 statistic1.xlsx
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132269.html原文链接:https://javaforall.cn