赞
踩
eg: 大学生旅游最佳目的地选择
eg: 北京、上海、杭州
eg: 花费、交通、住宿、饮食、风景
对角线的都为1;Aij*Aji=1;Aij>0。
举例:
1 | 1/7 | 3 |
7 | 1 | 5 |
1/3 | 1/5 | 1 |
如果正互反矩阵满足Aij*Ajk=Aik,则称之为一致矩阵(或者理解为对应的行或者列成比例)。
举例:
1 | 1/2 | 3 |
2 | 1 | 6 |
1/3 | 1/6 | 1 |
第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
第二步:将归一化的各列相加(按行求和)
第三行:将相加后得到的向量中的每一个元素除以n即可得到权重向量
总结:假设判断矩阵A= ,那么算数平均值法求得的权重向量为:
示例:已知
景色 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
按照第一列计算:杭州:1/(1+1/2+1/4)=0.57
上海:(1/2)/(1+1/2+1/4)=0.29
苏州:(1/4)/(1+1/2+1/4)=0.14
按照第二列计算:杭州:2/(2+1+1/2)=0.57
上海:1/(2+1+1/2)=0.29
苏州:(1/2)/(2+1+1/2)=0.14
按照第三列计算:杭州:4/(4+2+1)=0.57
上海:2/(4+2+1)=0.29
苏州:1/(4+2+1)=0.14
所以在景色这一栏三者的权重:杭州:(0.57+0.57+0.57)/3=0.57
上海:(0.29+0.29+0.29)/3=0.29
苏州:(0.14+0.14+0.14)/3=0.14
注意:如果是一致矩阵则只计算一列即可;如果是一般的判断矩阵则需要计算个列在求平均值。
第一步:将矩阵按照行相乘得到一个新的列向量
第二步:将新的向量的每一个分量开n次方
第三步:对该列向量进行归一化即可得到权重向量
第一步:求出判断矩阵的最大特征值以及其对应的特征向量
第二步:对求出的特征向量进行归一化即可得到权重
例如:
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
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<0.1,则可以认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修改(修改时可以灵活修改)。
景色 | 花费 | 居住 | 饮食 | 交通 | |
景色 | 1 | 1/2 | 4 | 3 | 3 |
花费 | 2 | 1 | 8 | 6 | 6 |
居住 | 1/4 | 1/8 | 1 | 3/4 | 3/4 |
饮食 | 1/3 | 1/6 | 4/3 | 1 | 1 |
交通 | 1/3 | 1/6 | 4/3 | 1 | 1 |
再利用上述的三种求解权重的方法求出指标权重
指标权重 | |
景色 | 0.2636 |
花费 | 0.4758 |
居住 | 0.0538 |
饮食 | 0.0981 |
交通 | 0.1087 |
景色 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
花费 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
居住 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
饮食 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
交通 | 杭州 | 上海 | 苏州 |
杭州 | 1 | 2 | 4 |
上海 | 1/2 | 1 | 2 |
苏州 | 1/4 | 1/2 | 1 |
权重的计算方法和上面一样,一致性检验的方法参照上面。
假设上述得到的各项权重为:
北京 | 上海 | 杭州 | |
景色 | 0.5954 | 0.2764 | 0.1283 |
花费 | 0.0819 | 0.2363 | 0.6817 |
居住 | 0.4286 | 0.4286 | 0.1429 |
饮食 | 0.6337 | 0.1919 | 0.1744 |
交通 | 0.1667 | 0.1667 | 0.6667 |
指标权重 | 北京 | 上海 | 杭州 | |
景色 | 0.2636 | 0.5954 | 0.2764 | 0.1283 |
花费 | 0.4758 | 0.0819 | 0.2363 | 0.6817 |
居住 | 0.0538 | 0.4286 | 0.4286 | 0.1429 |
饮食 | 0.0981 | 0.6337 | 0.1919 | 0.1744 |
交通 | 0.1087 | 0.1667 | 0.1667 | 0.6667 |
北京:0.2636*0.5945+0.4758*0.0819+0.0538*0.4286+0.0981*0.6337+0.1087*0.1667=0.2992604
上海:0.2636*0.2764+0.4758*0.2363+0.0538*0.4286+0.0981*0.1919+0.1087*0.1667=0.24529494
杭州:0.2636*0.1283+0.4758*0.6817+0.0538*0.1429+0.0981*0.1744+0.1087*0.6667=0.45543969
所以,综上所述,杭州最好,北京次之,上海最后。
- % 层次分析法——求出给定矩阵的权重
-
- % 第一步:输入判断矩阵
- clear;
- clc;
- A=input('Please enter your number:');
- % A =[1 1 4 1/3 3;
- % 1 1 4 1/3 3;
- % 1/4 1/4 1 1/3 1/2;
- % 3 3 3 1 3;
- % 1/3 1/3 2 1/3 1];
-
- Error=0;
- [xx,yy]=size(A);
-
- % 判断是否为方阵、是否维数小于等于1
- if xx~=yy || xx<=1
- Error=1;
- end
-
- % 判断矩阵中的元素是否小于0
- if Error==0
- if min(min(A))<=0
- Error=2;
- end
- end
-
- % 判断维数是否超过15
- if Error==0
- if size(A,1)>15
- Error=3;
- end
- end
-
- % 判断是否满足Aij*Aji=1
- if Error==0
- if A' .* A~=ones(size(A,1))
- Error=4;
- end
- end
- if Error==0
- if size(A,1)~=2 %如果维数大于2才判断一致性,如果为2则不需要判断一致性,因为此时必为一致矩阵
- % 第二步:判断一致性
- [E,F]=eig(A); %得到A矩阵的所有特征值构成列向量,E为特征向量矩阵,F为特征值矩阵,对角线为特征值,其余为0
- Fmax=max(max(F)); %得到最大的特征值
- n=size(A,1);
- CI=(Fmax-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('CI=');
- disp(CI);
- disp('CR=');
- disp(CR);
- disp('矩阵的一致性可以接受!');
- else
- disp('矩阵的一致性不可以接受!');
- end
- end
- % 第三步:求出权重
- % 方法一:算数平均值法求权重
- Sum_A=sum(A,1); %按列求和得到一个行向量
- SUM_A=repmat(Sum_A,size(A,1),1); %用repmat函数构造一个元素都为和的矩阵
- Stand_A=A./SUM_A; %每一个元素除以所在列的和构成归一化矩阵,注意这里是 ./,不是/
- disp('算数平均值法求得的权重为:');
- disp(sum(Stand_A,2)/n);
- % 方法二:几何平均法求权重
- A_prod=prod(A,2);
- A_prod=A_prod.^(1/n);
- disp('几何平均法求得的权重为:');
- disp(A_prod/sum(A_prod));
- % 方法三:特征值法求权重
- [x,y]=find(F~=0,1); %一致矩阵的一个特征值为n,其余均为0
- %[x,y]=find(F==Fmax,1);
- disp('特征值法求得的权重为:');
- disp(E(:,y)/sum(E(:,y)));
- elseif Error==1
- disp('输入的矩阵不为方阵或者维数小于等于1 !');
- elseif Error==2
- disp('输入的矩阵中有元素小于等于0 !');
- elseif Error==3
- disp('输入的矩阵维数大于15 !');
- elseif Error==4
- disp('输入的矩阵不满足Aij*Aji=1 !');
- end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。