matlab代码编程实现成对比较矩阵判别
时间: 2023-08-12 16:06:05 浏览: 173
距离判别的Matlab编程实现-判别分析matlab
成对比较矩阵判别(Pairwise Comparison Matrix Discrimination)是一种常见的多准则决策分析方法,可以用于比较不同准则下多个方案的优劣。Matlab可以通过以下步骤实现成对比较矩阵判别:
1. 构建成对比较矩阵
将每个方案在不同准则下的得分两两比较,构建成对比较矩阵。例如,如果有3个方案A、B、C,在准则1下A得分为5,B得分为7,C得分为6,在准则2下A得分为6,B得分为4,C得分为5,则构建的成对比较矩阵为:
```
1 2 3
A 0 -2 1
B 2 0 -1
C -1 1 0
```
其中,每个元素表示第一行所代表的方案与第一列所代表的方案之间的得分差值。
2. 判断一致性
使用一致性指标判断成对比较矩阵是否具有一致性,通常使用CR(Consistency Ratio)指标。如果CR小于某个阈值,则认为成对比较矩阵具有一致性,可以进行后续计算。否则,需要重新构建成对比较矩阵,直到满足一致性要求。
3. 计算权重
使用层次分析法(Analytic Hierarchy Process,AHP)或其他方法计算每个准则的权重。具体方法可以参考AHP算法的实现。
4. 计算综合得分
将每个方案在不同准则下的得分加权求和,即可得到每个方案的综合得分。得分高的方案可作为较优方案。
Matlab中可以使用矩阵运算和函数实现上述步骤。例如,可以使用`eig`函数计算成对比较矩阵的最大特征值和特征向量,进而计算CR指标;可以使用`sum`函数和矩阵乘法计算加权和。完整的Matlab代码如下:
```matlab
% 构建成对比较矩阵
P = [0,-2,1;2,0,-1;-1,1,0];
% 判断一致性
n = size(P,1);
[eigvec,eigval] = eig(P);
lambda = max(diag(eigval));
CI = (lambda-n)/(n-1);
RI = [0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51];
CR = CI/RI(n);
if CR > 0.1
error('成对比较矩阵不一致,请重新构建。');
end
% 计算权重
w = eigvec(:,1)/sum(eigvec(:,1));
% 计算综合得分
scores = [5,7,6;6,4,5];
weighted_scores = scores*w;
```
其中,`P`为成对比较矩阵,`scores`为各个方案在不同准则下的得分矩阵,`w`为准则的权重向量,`weighted_scores`为各个方案的综合得分向量。
阅读全文