m=3
n=4 %%%%矩阵的行列下标
c=[1 2 3 4 5 6 7 89 10 11 12]
%%%% 数据规运颤范化
r=[]
for i=1:m
for j=1:n
r(i,j)=abs(c(i,j)-min(c(i,:)))/(max(c(i,:))-min(c(i,:)))
end
end
%%%%定义熵
for i=1:m
for j=1:m
k(i,j)=r(i,j)/sum(r(:,j))
end
end
for i=1:m
for j=1:n
if (k(i,j)==0)
k_lnk(i,j)=0
else
k_lnk(i,j)=k(i,j)*log(k(i,j))
end
end
end
for i=1:m
h(i)=-log(n)*sum(k_lnk(i,:))%定义熵的第i个唯悄悄指标,公式应该是错误的吧,应该是j=1,n吧
end
%%计算评价指标的变异系数
g=1-h
%%计算评价指标的熵权
w=g./sum(g)
%%% tmd gongsi 禁止拷贝,打了两遍,我够辛苦的,不指渣给分没天理了
%%%测试用矩阵较有规律,分母为0了,换一些其他的数据就较为正常了
%行是物理量,列是等级RefTable=[
2 3 4 6
10 15 2030
0.020.1 0.2 0.3
]
%data的列数等于table的行数
data=[
3.5 20 0.5
3 12 0.01
]
[n,ranks]=size(RefTable)
[m,n]=size(data)
for i=1:m %第i个地区培差的数据处理
table(:,:,i)=zeros(n,ranks)
for j=1:n %第j个物理量
x=data(i,j) %第i个地区,j物理量的实验数据
rank=1
if (RefTable(j,2)>RefTable(j,1)) %物理量指标升序扮信排列
while (rank<=ranks &&RefTable(j,rank)<x)
rank=rank+1
end
else %物理配缺皮量指标降序排列
while (rank<=ranks &&RefTable(j,rank)>x)
rank=rank+1
end
end
if rank>ranks
table(j,ranks,i)=1
elseif rank==1
table(j,1,i)=1
else
table(j,rank-1,i)=(RefTable(j,rank)-x)/(RefTable(j,rank)-RefTable(j,rank-1))
table(j,rank ,i)=(x-RefTable(j,rank-1))/(RefTable(j,rank)-RefTable(j,rank-1))
end
end
end
table
aver=mean(RefTable')
weight=zeros(m,n) %权系数
for i=1:m %第i个地区的数据处理
totalweight=0
for j=1:n %第j个物理量
if RefTable(j,2)>RefTable(j,2) %升序
weight(i,j)=data(i,j)/aver(j )
else
weight(i,j)=aver( j)/data(i,j)
end
totalweight=totalweight+weight(i,j)
end
weight(i,:)=weight(i,:)/totalweight
end
weight
for i=1:m
for j=1:n
last(j,:,i)=table(j,:,i)*weight(i,j)
end
end
last
M=sum(A)%各方案灶斗每项指标嫌知打分总和N=sum(M)%全部方案每项指标打分总和
m=size(A,2)%指标个数
S(j)=M(j)/N%各方案每项指标打分总和与全部方案每项指标打分总和之比
W(j)=S(j)/sum(S)各方案的权重
举例说明:
A=[40 35 30 4025 30 30 3015 15 10 155 10 5 10]
expert2(A)
结芹辩消果为
0.24638 0.26087 0.21739 0.27536
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)