0
点赞
收藏
分享

微信扫一扫

TOPSIS 法

boomwu 2023-02-18 阅读 55


(续例 10.1)用 TOPSIS 法进行评价

 

TOPSIS 法_python

 TOPSIS 法的具体算法如下:

 

TOPSIS 法_App_02

TOPSIS 法_数据_03

需要文件数据的发邮箱

代码: 

matlib

clc, clear
a=textread('data3.txt');
[m,n]=size(a);
n=n-1 ;
for j=1:n
b(:,j)=a(:,j)/norm(a(:,j)); %向量规划化
end
cstar=max(b); %求正理想解
c0=min(b); %求负理想解
for i=1:m
sstar(i)=norm(b(i,:)-cstar); %求到正理想解的距离
s0(i)=norm(b(i,:)-c0); %求到负理想解的距离
end
f=s0./(s0+sstar); %求评价的指标值
[sf,ind3]=sort(f,'descend') %按从大到小对指标值进行排列

python

import numpy as np
import pandas as pd
a = pd.read_excel("data1.xlsx").values[:,1:]

m,n = a.shape
b = np.zeros((m,n))
for i in range(n) :
sum = 0
for j in range(m) :
sum+=(a[j,i]*a[j,i])
sum = np.sqrt(sum)
# print(sum)
for j in range(m) :
b[j,i] = a[j,i]/sum

cstar = np.max(b,axis=0)
c0 = np.min(b,axis=0)
# print("cstar : " ,cstar)
# print("c0 : " , c0)
print()
sstar = np.zeros((10,1))
szero = np.zeros((10,1))
for i in range(m):
sum = 0
s = 0
for j in range(n) :
sum+=(b[i,j]-cstar[j])**2
s +=(b[i,j]-c0[j])**2

sum = np.sqrt(sum)
s = np.sqrt(s)
szero[i] = s
sstar[i] = sum

f = szero / (szero + sstar)
print("f" ,f.T)
print(np.argsort(f.T,axis=1))

数据

链接:https://pan.baidu.com/s/1Xrcvyh3puahWXf8ULkmNew 
提取码:13xx 
复制这段内容后打开百度网盘手机App,操作更方便哦

 

举报

相关推荐

0 条评论