目录
一、层次分析法(AHP)
二、topsis
三、熵值法
四、模糊综合评价法
function [weights, CR] = AHP(matrix)
% AHP - 层次分析法
% 输入:成对比较矩阵 matrix
% 输出:权重向量 weights 和一致性比率 CR
% 计算权重向量(特征向量)
[V, D] = eig(matrix);
[max_eig, max_ind] = max(diag(D));
weights = V(:, max_ind) / sum(V(:, max_ind));
% 计算一致性指标(CI)和一致性比率(CR)
n = size(matrix, 1);
CI = (max_eig - n) / (n - 1);
RI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45]; % 随机一致性指数
CR = CI / RI(n);
% 输出一致性比率
if CR < 0.1
fprintf('一致性可接受(CR = %f)\n', CR);
else
fprintf('一致性不可接受(CR = %f)!请重新检查成对比较矩阵。\n', CR);
end
end
% 使用示例
% 定义成对比较矩阵
matrix = [1, 1/2, 4; 2, 1, 7; 1/4, 1/7, 1];
% 调用 AHP 函数
[weights, CR] = AHP(matrix);
% 显示结果
fprintf('权重向量:\n');
disp(weights);
代码实现:
% 步骤1:输入数据
% 决策矩阵(每行代表一个方案,每列代表一个属性)
D = [your_decision_matrix];
% 权重向量(每个属性的权重,权重和应该等于1)
W = [your_weight_vector];
% 步骤2:标准化决策矩阵
[m, n] = size(D);
for j = 1:n
D(:, j) = D(:, j) / norm(D(:, j), 2);
end
% 步骤3:计算正理想解(Positive Ideal Solution)和负理想解(Negative Ideal Solution)
PIS = max(D);
NIS = min(D);
% 步骤4:计算每个方案到正理想解和负理想解的距离
for i = 1:m
S_plus(i) = norm(D(i, :) - PIS, 2);
S_minus(i) = norm(D(i, :) - NIS, 2);
end
% 步骤5:计算综合评分
for i = 1:m
TOPSIS_score(i) = S_minus(i) / (S_plus(i) + S_minus(i));
end
% 步骤6:根据综合评分排序
[sorted_score, ranking] = sort(TOPSIS_score, 'descend');
% 输出排序结果
disp('TOPSIS分析结果:');
disp('方案 综合评分 排名');
for i = 1:m
fprintf('%d %.4f %d\n', ranking(i), TOPSIS_score(ranking(i)), i);
end
代码实现
% 步骤1:输入数据
% 决策矩阵(每行代表一个方案,每列代表一个属性)
D = [your_decision_matrix];
% 步骤2:标准化决策矩阵
[m, n] = size(D);
for j = 1:n
D(:, j) = D(:, j) / sum(D(:, j));
end
% 步骤3:计算熵值
E = -sum(D .* log(D), 2);
% 步骤4:计算权重
W = (1 - E) / sum(1 - E);
% 输出权重
disp('熵值法权重:');
disp(W);
代码实现:
% 步骤1:输入数据
% 决策矩阵(每行代表一个方案,每列代表一个属性)
D = [your_decision_matrix];
% 步骤2:设置隶属度函数
% 这里以三角形隶属度函数为例,你可以根据实际情况选择不同的隶属度函数
mu = @(x, a, b, c) max(0, min((x - a) / (b - a), (c - x) / (c - b)));
% 步骤3:计算隶属度矩阵
[m, n] = size(D);
R = zeros(m, n);
% 根据具体的隶属度函数计算隶属度矩阵
for i = 1:m
for j = 1:n
R(i, j) = mu(D(i, j), a, b, c); % 替换 a, b, c 为隶属度函数参数
end
end
% 步骤4:计算综合评价值
% 这里以加权平均为例,你可以根据需要选择不同的聚合运算方法
weights = [your_weights_vector]; % 替换为属性权重向量
F = sum(R .* weights, 2);
% 输出综合评价值
disp('模糊分析评价综合评价值:');
disp(F);