如果要学习模型不建议阅读,我只会写模型的简介、代码要用到的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
Comments NOTHING