matlab写一个Topsis代码
时间: 2024-04-30 19:20:15 浏览: 97
MATLAB源码集锦-Topsis算法综合评价代码.txt
5星 · 资源好评率100%
Topsis是一种多属性决策分析方法,下面是一个MATLAB实现的Topsis代码:
```matlab
function [A_star, C_star] = topsis(A, w)
% A: m x n 的决策矩阵,m 表示决策个数,n 表示属性个数
% w: 1 x n 的权重向量,表示各个属性的权重
% A_star: m x 1 的向量,表示每个决策的综合得分
% C_star: 1 x n 的向量,表示每个属性的综合得分
[m, n] = size(A);
% 1. 标准化决策矩阵
A_norm = zeros(m, n);
for j = 1:n
A_norm(:, j) = A(:, j) / norm(A(:, j));
end
% 2. 计算加权标准化决策矩阵
A_weighted = zeros(m, n);
for j = 1:n
A_weighted(:, j) = A_norm(:, j) * w(j);
end
% 3. 计算正理想解和负理想解
A_max = max(A_weighted, [], 1);
A_min = min(A_weighted, [], 1);
% 4. 计算每个决策到正理想解和负理想解的距离
D_plus = zeros(m, 1);
D_minus = zeros(m, 1);
for i = 1:m
D_plus(i) = norm(A_weighted(i, :) - A_max);
D_minus(i) = norm(A_weighted(i, :) - A_min);
end
% 5. 计算综合得分
A_star = D_minus ./ (D_plus + D_minus);
% 6. 计算属性综合得分
C_star = sum(A_star .* A_weighted, 1) / sum(A_star);
```
使用方法:
假设有如下决策矩阵和权重向量:
```matlab
A = [3, 5, 2; 4, 7, 5; 6, 3, 8; 7, 6, 1];
w = [0.4, 0.3, 0.3];
```
则可以调用 `topsis` 函数计算得到每个决策的综合得分和每个属性的综合得分:
```matlab
[A_star, C_star] = topsis(A, w);
```
阅读全文