简直超easy超好理解
看到一半又对数模有了一点信心
基本过程
得到正向化矩阵----得到标准化矩阵----计算评分
里面的计算确实超简单的,只有加加减减平方啥的
这个想法确实不错,和最低成绩的插值占最大差距的比例,这在分段线性插值的理论公式中也有应用
举一反三:可以立刻想到另一个评分公式
m
a
x
−
x
m
a
x
−
m
i
n
\frac{max-x}{max-min}
max−minmax−x
归一化真是个好东西
新颖,涨知识了
又涨一波知识
四种指标以及相互转换的公式
牛逼
学会了repmat
由标准化矩阵得到正向化矩阵
即
越来越喜欢数学了竟然开始害怕起研究生毕业以后没有数学公式可供推导观看了······
示例
到这里已经体会到为啥方法名里有个距离了
这个方法玩的就是最大值和最小值的距离,数据和最大值的距离,数据和最小值的距离,多个指标之间简单的用平方和开方的方式组合到一起,但是
这实际上是默认了所有指标的权重相同
这实际上是默认了所有指标的权重相同
这实际上是默认了所有指标的权重相同
所以清风虽然成绩最高,但是最后排名却最低,因为完全没有纳入权重
我们可以先用层次分析法算出每个指标的权重,再用TOPSIS法计算评分呀
我还是有前途的,哈哈哈,先想到了这个
excel数据做成MATLAB的mat文件
在当前变量工作区新建一个变量,(crtl+N),命名为data或者其他的
双击打开
复制excel数据
直接粘贴在data.mat中,保存就搞定啦,后面在MATLAB中只需要load就可以使用数据
代码:
clear all
close all
clc
load('E:\BOOKS\数模\清风\数模基础模型和代码\数模基础模型和代码\第2讲.TOPSIS法(优劣解距离法)7.27\代码和例题数据\我写的代码\data.mat');
% 正向化指标
data(:,2) = mid2pos(data(:,2)); % ph值
data(:,3) = neg2pos(data(:,3)); % 细菌数
data(:,4) = range2pos(data(:,4)); % 植物性营养物
disp('正向化后的矩阵 X = ')
disp(data)
% 标准化指标
[n,m] = size(data);
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标'])
data = data./repmat(sum(data.*data).^0.5,n,1);
disp('标准化矩阵 Z = ')
disp(data)
% 计算评分
Z_P = max(data);
Z_N = min(data);
S = [];
for i=1:n
D_P(i) = sum((Z_P-data(i,:)).^2)^.5;
D_N(i) = sum((Z_N-data(i,:)).^2)^.5;
S(i) = D_N(i) / ( D_N(i) + D_P(i));
end
% 归一化评分
S = S / sum(S);
disp('最后的得分为:')
[sorted_S,index] = sort(S ,'descend')**
正向化后的矩阵 X =
4.6900 0.7172 3.0000 1.0000
2.0300 0.4069 35.0000 0.6940
9.1100 0.5241 8.0000 0.9058
8.6100 0.9655 8.0000 0.4443
7.1300 0.6552 4.0000 0.6914
2.3900 0.8414 16.0000 0.6007
7.6900 0.8552 16.0000 0.6551
9.3000 0.8690 27.0000 0
5.4500 0.5724 49.0000 1.0000
6.1900 0.8138 37.0000 0.7848
7.9300 0.6345 45.0000 0.6992
4.4000 0.8069 37.0000 0.5419
7.4600 0.1448 31.0000 1.0000
2.0100 0 7.0000 0.4546
2.0400 0.5862 31.0000 1.0000
7.7300 0.4069 2.0000 1.0000
6.3500 0.6000 29.0000 0.1824
8.2900 0.0276 15.0000 1.0000
3.5400 0.8138 0 0.4088
7.4400 0.4897 46.0000 0.2731
共有20个评价对象, 4个评价指标
标准化矩阵 Z =
0.1622 0.2483 0.0245 0.3065
0.0702 0.1408 0.2863 0.2127
0.3150 0.1814 0.0655 0.2776
0.2977 0.3342 0.0655 0.1361
0.2466 0.2268 0.0327 0.2119
0.0826 0.2912 0.1309 0.1841
0.2659 0.2960 0.1309 0.2008
0.3216 0.3008 0.2209 0
0.1885 0.1981 0.4009 0.3065
0.2141 0.2817 0.3027 0.2405
0.2742 0.2196 0.3682 0.2143
0.1522 0.2793 0.3027 0.1661
0.2580 0.0501 0.2536 0.3065
0.0695 0 0.0573 0.1393
0.0705 0.2029 0.2536 0.3065
0.2673 0.1408 0.0164 0.3065
0.2196 0.2077 0.2373 0.0559
0.2867 0.0095 0.1227 0.3065
0.1224 0.2817 0 0.1253
0.2573 0.1695 0.3763 0.0837
最后的得分为:
sorted_S =
1 至 14 列
0.0702 0.0684 0.0681 0.0591 0.0565 0.0539 0.0533 0.0527 0.0510 0.0488 0.0485 0.0478 0.0466 0.0451
15 至 20 列
0.0448 0.0438 0.0434 0.0431 0.0358 0.0192
index =
11 10 9 12 20 7 15 13 8 4 3 2 17 1 6 18 16 5 19 14
>>