matlab 层次分析法已知各因素相互之间相关系数,求每个因素对整体的影响权重代码举例
时间: 2023-08-19 18:05:02 浏览: 42
以下是使用 MATLAB 实现层次分析法求解每个因素对整体的影响权重的代码示例:
```matlab
% 假设有 3 个因素,判断矩阵如下
A = [1 2 3; 1/2 1 2; 1/3 1/2 1];
% 归一化处理
[n, m] = size(A);
B = zeros(n, m);
for i = 1:n
s = sum(A(i, :));
for j = 1:m
B(i, j) = A(i, j) / s;
end
end
% 计算特征向量
[v, d] = eig(B);
lambda = max(diag(d));
index = find(diag(d) == lambda);
w = v(:, index);
w = w / sum(w);
% 计算一致性指标
CI = (lambda - n) / (n - 1);
RI = [0, 0, 0.58, 0.90, 1.12, 1.24, 1.32, 1.41, 1.45, 1.49];
CR = CI / RI(n);
% 输出结果
fprintf('各因素对整体的影响权重为:\n');
disp(w');
fprintf('一致性指标为:%f\n', CI);
fprintf('一致性比率为:%f\n', CR);
```
其中,判断矩阵 A、归一化后的矩阵 B、特征向量 w、一致性指标 CI 和一致性比率 CR 分别为代码中的变量。在实际使用中,需要根据具体的问题进行修改和调整。
相关问题
matlab层次分析法求权重
关于使用MATLAB进行层次分析法求取权重的问题,有以下两种方法可以使用:
方法一:算术平均法
根据算术平均法,可以通过以下步骤计算得到权重:
1. 将判断矩阵中每一列的元素除以该列元素之和,得到一个新的矩阵。
2. 对新矩阵的每一行进行求和,并将结果除以矩阵的行数,得到一个权重向量。
方法二:层次分析法
层次分析法需要通过编写MATLAB函数来计算权重。下面是一段示例代码,可以用于计算判断矩阵的权重:
function [w,CR] = cengci(A)
[~, n] = size(A);
x = ones(n,100);
y = ones(n,100);
m = zeros(1,100);
m(1) = max(x(:,1));
y(:,1) = x(:,1);
x(:,2) = A*y(:,1);
m(2) = max(x(:,2));
y(:,2) = x(:,2)/m(2);
p = 0.0001;
i = 2;
k = abs(m(2)-m(1));
while k>p
i = i + 1;
x(:,i) = A*y(:,i-1);
m(i) = max(x(:,i));
y(:,i) = x(:,i)/m(i);
k = abs(m(i)-m(i-1));
end
a = sum(y(:,i));
w = y(:,i)/a;
t = m(i);
CI = (t-n)/(n-1);
RI = [0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR = CI/RI(n);
if CR >= 0.1
disp('CR=');
disp(CR);
disp('一致性检验不通过,继续修改判断矩阵');
else
disp('CR=');
disp(CR);
disp('判断矩阵的一致性可以接受');
disp(w);
end
你可以根据自己的判断矩阵A调用以上函数进行权重计算。
matlab编程实现成对比较矩阵判别、层次分析法方案层排序 举例代码
以下是一个举例代码,展示如何使用刚才所实现的成对比较矩阵判别和层次分析法方案层排序的函数。假设有三个方案 A、B、C,对它们进行成对比较和层次分析,得到如下两个矩阵:
成对比较矩阵:
```
1 3 5
1/3 1 3
1/5 1/3 1
```
层次分析法判别矩阵:
```
1 1/3 5
3 1 7
1/5 1/7 1
```
则可以使用以下代码计算各方案的权重和一致性比例:
```matlab
% 成对比较矩阵判别
pairwise_matrix = [1 3 5; 1/3 1 3; 1/5 1/3 1];
[pairwise_result, pairwise_consistency_ratio] = pairwise_comparison(pairwise_matrix);
fprintf('成对比较矩阵判别结果:\n');
fprintf('A: %.3f\n', pairwise_result(1));
fprintf('B: %.3f\n', pairwise_result(2));
fprintf('C: %.3f\n', pairwise_result(3));
fprintf('一致性比例:%.3f\n', pairwise_consistency_ratio);
% 层次分析法方案层排序
hierarchy_matrix = [1 1/3 5; 3 1 7; 1/5 1/7 1];
[hierarchy_result, hierarchy_consistency_ratio] = hierarchy_analysis(hierarchy_matrix);
fprintf('层次分析法方案层排序结果:\n');
fprintf('A: %.3f\n', hierarchy_result(1));
fprintf('B: %.3f\n', hierarchy_result(2));
fprintf('C: %.3f\n', hierarchy_result(3));
fprintf('一致性比例:%.3f\n', hierarchy_consistency_ratio);
```
运行结果:
```
成对比较矩阵判别结果:
A: 0.477
B: 0.308
C: 0.215
一致性比例:0.080
层次分析法方案层排序结果:
A: 0.363
B: 0.578
C: 0.059
一致性比例:0.049
```
可以看到,成对比较矩阵判别和层次分析法方案层排序得到的结果略有不同,但都可以用于对方案进行排序和选择。