利用matlab写层次分析法的代码
时间: 2023-11-02 18:20:23 浏览: 29
下面给出一个简单的 MATLAB 实现层次分析法(AHP)的代码:
```matlab
% 输入判断矩阵
A = [1, 2, 7;
1/2, 1, 4;
1/7, 1/4, 1];
% 计算加权平均数
w = sum(A) / size(A,1);
W = w ./ sum(w);
% 计算一致性指标 CR
RI = [0, 0, 0.52, 0.89, 1.11, 1.25, 1.35, 1.40, 1.45, 1.49];
lambda_max = max(eig(A));
CI = (lambda_max - size(A,1)) / (size(A,1) - 1);
CR = CI / RI(size(A,1));
% 输出结果
disp('权重向量:');
disp(W);
disp(['一致性指标 CR = ', num2str(CR)]);
```
其中,输入的判断矩阵 A 中,每个元素表示对应的两个因素之间的比较结果。计算加权平均数 W 时,先对每一列求和,再除以矩阵行数,得到每个因素的加权平均值,最后再将每个元素除以所有元素之和,得到权重向量 W。计算一致性指标 CR 时,需要先计算最大特征值 lambda_max 和一致性指标 RI,再利用公式计算 CI 和 CR。最后输出权重向量和一致性指标 CR。
相关问题
matlab主层次分析法代码
以下是Matlab中使用主层次分析法进行多准则决策分析的示例代码:
```matlab
% 假设有4个因素需要进行决策分析
n = 4;
% 构建判断矩阵,即各因素之间的比较结果
% 这里采用随机数进行模拟
A = rand(n);
% 对判断矩阵进行归一化处理,使其每一列的和为1
for i=1:n
s = sum(A(:,i));
A(:,i) = A(:,i) / s;
end
% 计算各因素的权重
w = sum(A, 2) / n;
% 计算一致性比率
RI = [0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45 1.49];
[eigvector, eigvalue] = eig(A);
max_eigvalue = max(max(eigvalue));
CI = (max_eigvalue - n) / (n - 1);
CR = CI / RI(n);
if CR < 0.1
disp('一致性检验通过');
else
disp('一致性检验未通过,请重新构建判断矩阵');
end
```
这段代码展示了如何使用Matlab中的主层次分析法进行多准则决策分析,其中包括了构建判断矩阵、归一化处理、计算权重和一致性比率等步骤。需要注意的是,在实际应用中,我们需要根据具体问题对代码进行适当的修改和调整。
matlab进行层次分析法代码
以下是 Matlab 中进行层次分析法分析的示例代码:
假设有一个层次结构,包含三个层次,如下所示:
一级指标:A、B、C
二级指标:a1、a2、b1、b2、c1、c2
三级指标:x、y、z
判断矩阵如下:
A B C
2 3 5
1/3 1 2
1/5 1/2 1
则可以按照以下步骤进行计算:
```matlab
% 构建判断矩阵
A = [2 3 5; 1/3 1 2; 1/5 1/2 1];
% 计算特征向量
[V, D] = eig(A);
w = V(:, 1) / sum(V(:, 1));
% 计算一致性指标
n = size(A, 1);
RI = [0 0 0 0 0 0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45 1.49];
CR = (max(D(:)) - n) / (n - 1) / RI(n);
% 进行层次单排序
w1 = w(1:3);
w2 = w(4:8);
w3 = w(9:15);
w_a = w1 / sum(w1);
w_b = w2 / sum(w2);
w_c = w3 / sum(w3);
% 进行层次总排序
w_x = w_a(1) * w1(1) + w_b(1) * w2(1) + w_c(1) * w3(1);
w_y = w_a(2) * w1(2) + w_b(2) * w2(2) + w_c(2) * w3(2);
w_z = w_a(3) * w1(3) + w_b(3) * w2(3) + w_c(3) * w3(3);
% 输出结果
fprintf('一级指标权重:A=%.3f, B=%.3f, C=%.3f\n', w_a);
fprintf('二级指标权重:a1=%.3f, a2=%.3f, b1=%.3f, b2=%.3f, c1=%.3f, c2=%.3f\n', w_b);
fprintf('三级指标权重:x=%.3f, y=%.3f, z=%.3f\n', w_x, w_y, w_z);
```
以上代码中,先构建判断矩阵 A,然后使用 eig 函数计算特征向量 V 和特征值 D,再进行归一化处理得到权重向量 w。接着使用 RI 函数计算一致性指标,判断判断矩阵是否具有合理的一致性。然后将权重向量按照层次关系进行分组,计算得到各项的相对权重。最后将各项的相对权重与其所属的层次结构关系相结合,进行总排序,得到最终的排序结果。