赞
踩
目录
- 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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。