层次分析法:matlab代码实现

计算权重:

一、算术平均法

关于矩阵:

1、矩阵的输入写法

     [ ; ; ]同行用空格或逗号隔开,不同行用分号间隔

2、矩阵求和

     默认按列求和 a=sum(E) 等同于 a=sum(E,1) 得到行向量

     按行求和 a=sum(E,2) 得到列向量

     对整个矩阵求和 a=sum(E,"all")或者a=sum(E(:)) 或者 a=sum(sum(E))

3、矩阵求积

     默认按列求积  a=prod(E)或者a=prod(E,1)

     按行求积 a=prod(E,2)

     整个矩阵求积 a=prod(E,"all")

4、提取指定位置的元素 A(i,j)

     提取指定行的全部元素 A(i,:)  列的全部元素 A(:,j)

     提取第2行和第5行 A([2,5],:)

     提取2到5行 A(2:5,:) end表示最后一行

     提取第2行和第4行 A(2:2:5,:) 从2开始,每次加2,不包括5

5、 A(:)或A表示所有元素

     按列拼接,以一整个列向量输出

6、 [r,c]=size(A) 返回矩阵的行数和列数

      size(A,1)返回行数,size(A,2)返回列数

 

7、B=repmat(A,m,n) 复制矩阵A,B由m*2个A平铺而成

8、矩阵的乘法和除法 A*B   A/B=A*inv(B)乘以逆矩阵

      形状相同的矩阵对应元素的乘除法用'.*'和'./'

      乘方^ 和 .^

此处判断矩阵实为一个方阵: 

clear;clc

A=input('请输入判断矩阵A:')

%第一步: 归一化(先对列求和得一个行向量,再让矩阵对应除以该行向量)
sum_Acol=sum(A)

r=size(A,1)
c=size(A,2)
%这里把行向量复制row次,成一个与A同形的矩阵,再让对应元素作除法
B=repmat(sum_Acol,r,1)
Stand_A=A./B 

%第二步: 算权重向量(先按行求和得一个列向量,再除以col)
res=sum(Stand_A,2)/c


二、几何平均法

clear;clc

A=input("请输入判断矩阵A:")
%第一步: 先按行相乘,再开n次方,得到一个列向量
Prod_Arow=prod(A,2)
n=size(A,2)
B=Prod_Arow.^(1/n)

%第二步: 归一化
res=B./(sum(B))

三、特征值法

特征向量与特征值:

1、求特征值 E=eig(A)  A的全部特征值构成向量E

2、[V,D]=eig(A)  A的特征向量构成V的列向量,A的所有特征值构成对角阵D

find:

1、p=find(X,n) 返回前n个符合条件的元素的位置(按列来读)

2、[r,c]=find(X,n) 返回的位置是二维坐标

clear;clc

A=input("请输入判断矩阵A:")

%第一步: 求矩阵的最大特征值及其对应的特征向量
[V,D]=eig(A)
Max_eig=max(max(D)) %找最大特征值
[r,c]=find(D==Max_eig,1) %找D中第一个与最大特征值相等的元素的位置
B=V(:,c) %提取最大特征值对应的特征向量(提取列)

%第二步: 对特征向量归一化
res=B./sum(B)



一致性检验:

%计算一致性比例CR
n=size(A,1)
CI=(Max_eig-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.10
    disp("一致性检验通过")
else
    disp("一致性检验不通过")
end %函数或循环都要以end结尾

 

 

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
层次分析法(Analytic Hierarchy Process,简称AHP)是一种常用的决策分析方法,可以用于处理复杂的多因素决策问题。在Matlab实现AHP方法,可以参照以下步骤进行编写: Step 1: 输入判断矩阵 首先,需要输入判断矩阵,即对于每个因素之间的相对重要性进行判断,得到一个矩阵。这个矩阵的大小为n x n,其中n表示因素的数量。 例如,假设有3个因素A、B和C,需要对它们进行判断,得到的判断矩阵如下: ``` A B C 2 4 6 1/4 1 3 1/6 1/3 1 ``` 在Matlab中,可以使用矩阵输入这个判断矩阵: ``` J = [2 4 6; 1/4 1 3; 1/6 1/3 1]; ``` Step 2: 计算特征向量 接下来,需要计算每个因素的权重,即计算判断矩阵的特征向量。可以使用Matlab中的eig函数进行计算: ``` [eigvec, eigval] = eig(J); ``` 其中,eigvec表示判断矩阵的特征向量,eigval表示判断矩阵的特征值。 Step 3: 归一化特征向量 由于特征向量的大小不一定为1,需要对特征向量进行归一化。可以使用Matlab中的norm函数进行计算: ``` w = eigvec(:,1)/norm(eigvec(:,1)); ``` 其中,eigvec(:,1)表示特征向量的第一列,即对应最大特征值的特征向量。 Step 4: 计算一致性指标 为了判断判断矩阵的一致性,需要计算一致性指标。可以使用以下公式进行计算: ``` CI = (lambda - n)/(n-1); ``` 其中,lambda表示最大特征值,n表示判断矩阵的大小。一般来说,CI的值应该小于0.1。 Step 5: 计算随机一致性指标 为了比较计算出来的一致性指标和随机一致性指标,需要先计算随机一致性指标。可以使用以下公式进行计算: ``` RI = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49]; ``` 其中,RI是一个数组,根据判断矩阵的大小取不同的值。 Step 6: 判断一致性 最后,可以比较计算出来的一致性指标和随机一致性指标,判断判断矩阵是否一致性。如果一致性指标小于0.1,则可以认为判断矩阵是一致的。 完整的Matlab代码如下: ``` % 输入判断矩阵 J = [2 4 6; 1/4 1 3; 1/6 1/3 1]; % 计算特征向量 [eigvec, eigval] = eig(J); % 归一化特征向量 w = eigvec(:,1)/norm(eigvec(:,1)); % 计算一致性指标 lambda = max(max(eigval)); n = length(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]; RCI = (RI(n)-n)/(n-1); % 判断一致性 if CI/RCI < 0.1 disp('判断矩阵一致'); else disp('判断矩阵不一致'); end ``` 这个代码可以对任意大小的判断矩阵进行计算,并输出一致性判断结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值