如果要学习模型不建议阅读,我只会写模型的简介、代码要用到的matlab语法和模型的代码,如果要学习模型可以去看完整的教程。

层次分析法是建模比赛中最基础的模型之一,其主要解决评价类问题(例如:选择哪种方案最好、哪位运动员或者员工的表现更优秀)

step1:搞清楚目标、准则和方案
step2:确定准则的评分标准,可以去别人发表的优秀论文中寻找,或者使用搜索引擎搜索
step3:填写权重表格(重点)

权重指标1、指标2、指标3...
目标1
目标2
目标3

表格确定的方法:
1、首先确定指标的权重,两两比较,得到判断矩阵
2、再确定指标1、指标2、指标3分别对应于目标1、目标2、目标3中的权重,并通过一致性检验
3、计算权重,一致矩阵可直接用第一列进行归一化、如果是判断矩阵,三列都需要计算并最后算平均值,算平均值的方法有三种:算术、几何和特征向量
4、当上述表格填满后,计算个方案的得分排名

matlab语法

1、加分号表示不显示结果。


2、ctrl+r 快速注释 ctrl+t快速取消注释。


3、clear 消除工作区中的变量。


4、clc 消除命令行中的文本。


5、disp('') 和printf函数类似,输出字符串,matlab中双引号和单引号都表示字符串。


6、strcat('字符串1','字符串2') 合并串1和串2。


7、['字符串1' '字符串2'],讲两个字符串放在同一个向量中,就会自动合并。


8、num2str() 可将数字转换成字符。


9、disp(['c的取值为:' 'num2str(c)']) 输出一个串。


10、A = input('请输入A:') 从键盘输入一个数,给A赋值,如果加分号表示不输出结果。


11、sum() 行列向量可以直接求和,如果参数是一个矩阵,默认会按列求和;如果sum有两个参数:sum(matrix , 1) 第二个参数为1表示将矩阵A按列求和,2表示按行求和,如果要计算矩阵中每个元素的和:a = sum(sum(matrix)) / a = sum(matrix(:)),冒号的作用表示所有。


12、size() 返回一个行向量,第一个列为矩阵的行数,第二列为矩阵的列数,用法:[r , c] = size(matrix) 或 r = size(matrix , 1) ,c = size(matrix , 2) 与sum函数有些许不同,size函数第二个参数为1表示行,为2表示列。


13、repmat(matrix , m , m) 函数有三个参数:表示将一个matrix重复 n行m列次 === repmat = repeat matrix 字面意思就是其功能


14、matlab中的运算:*和/表示对矩阵作乘法和出发,这里的除法指的是A/B = A*B的逆


15、 matlab中的运算:.*和./表示形状相同的矩阵对应位置的乘法和除法


16、matlab中的预算:矩阵中的每个元素同时和常数相乘或者相除时,上面的两种用法都行,但是如果对矩阵中的每个元素乘方,就只能用 .^


17、prod()函数的用法和sum函数的用法相同,只不过他用于乘法。


18、matlab中如果要求矩阵的特征值和特征向量(额,只有方阵才能求这个,别瞎搞):E = eig(matrix),表示E为matrix的特征值,放在一个矩阵里头。[V,D] = eig(matrix)中,V(vector)表示一个矩阵,存放特征向量,D表示存放特征值的矩阵。


19、find函数:https://www.cnblogs.com/anzhiwu815/p/5907033.html,这篇博客讲的很深入,我就不废话了。


20、矩阵与常数的大小判断 > < == 会返回一个相同大小的logic矩阵


21、if的用法

if condition1
    statement1
elseif condition2
    statement2
else
    statement3
end

22、for的用法

for variable = start:increment:end
    commands
end

AHP代码

%%
clear;clc
disp('请输入判断矩阵A: ')
A = input('判断矩阵A=')

k = 0;
for i = 1:n
    for j = 1:n
        if A(i,j) * A(j,i) ~= 1  || A(i,j) < 0
            k = 1
        end
    end
end

if k == 1
    disp('此矩阵不为正互反矩阵,请修改')
else
    disp('此矩阵为正互反矩阵')
end
%%
% 特征值求权重

% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D] = eig(A)   
Max_eig = max(max(D)) 
D == Max_eig
[r,c] = find(D == Max_eig , 1)
% 找到D中第一个与最大特征值相等的元素的位置,记录它的行和列。

% 第二步:对求出的特征向量进行归一化即可得到的权重
V(:,c)
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )
% 我们先根据上面找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。

%% 计算一致性比例CR
clc
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];  %注意哦,这里的RI最多支持 n = 15
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

立志做一名攻城狮