层次分析法(matlab源码)

% 1.输入判断矩阵
% 2.特征值法求权重(将最大的特征向量作为权向量)
% 3.一致性检验

clear all
clc
disp('请输入判断矩阵A');
A=input('A=');
[n,n]=size(A);%先求出A的阶数,后面算一致性检验需要


[V,D] = eig(A);       %V是特征向量,D是由特征值构成对角矩阵,V的第1列特征向量对应D的第1列的特征值
disp('特征向量');
disp(V);
disp('特征值');
disp(max(D));

DMax= max(max(D));     %求出最大特征值 也可以写成DMax= max(D(:));
%既然找到了最大特征值,怎么找对应特征向量?
%1.比较 D == DMax,返回一个只含bool值的矩阵(0,1)  D上的元素只有等于DMax(最大特征值)上的位置为1,其余位置为零
%2.利用find函数找到最大特征值在D中的索引
[r,c]=find(D == DMax , 1);
disp('最大的特征值DMax在D中的列数为:');
disp(c);
disp('最大特征值DMax对应的特征向量为:');
disp(V(:,c));

disp('最终权向量为:');
disp( V(:,c) ./ sum(V(:,c)) )  %特征向量的归一化


%计算一致性比例CR的环节
CI = (DMax - n) / (n-1);
RI=[0 0.0001 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];  %这里的RI最多支持 n = 15
%n=2时,2阶一定是一致性矩阵,为了避免分母为零,取第二个数为比零大一点的数
CR=CI/RI(n);
disp('一致性指标CI=');disp(CI);
disp('一致性比例CR=');disp(CR);
if CR<0.10
    disp('因为CR<0.10,A矩阵通过一致性检验。');
else
    disp('CR >= 0.10,判断矩阵A需要进行修改!');
end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值