内容来自B站UP主:【数模加油站】配套视频地址:【数学建模快速入门】数模加油站:数学建模模型、算法、编程、写作及Matlab等软件学习教程(数学建模国赛美赛必看教程)_哔哩哔哩_bilibili
1、模型引出
2、模型原理
3、典型例题
4、matlab代码
4.1一致性检验代码
A = input('判断矩阵A='); %输入判断矩阵
[n,n] = size(A); %获取A的行和列
%求出最大特征值以及对应的特征向量
[V,D] = eig(A); %V是特征向量 D是特征值构成的对角矩阵
Max_eig = max(max(D)); %先求出每一列的最大值,再求最大值中的最大值
CI = (Max_eig - 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时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
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
4.2求权重代码
%1、算术平均法求权重
A = input('判断矩阵A='); %输入判断矩阵
ASum = sum(A,1); %将判断矩阵每列求和
[n,n] = size(A); %获取A的行和列,用于对ASum复制,对应位相除归一化
Ar = repmat(ASum,n,1); %复制Asum n行1列为Ar矩阵
Stand_A = A./Ar; %归一化
ASumr = sum(Stand_A,2); %各列相加到同一行
disp(ASumr/n); %将相加后得到的向量每个元素除以n可以得到权重向量
%2、几何平均法求权重
clc;
A = input('判断矩阵A=‘); %输入判断矩阵
[n,n] = size(A); %获取A的行和列
prod_A = prod(A,2); %将A中每一行元素相乘得到一列向量
prod_n_A = prod_A.^(1/n); %将新的向量的每个分量开n次方等价求1/n次方
re_prod_A = prod_n_A./sum(prod_n_A);%归一化处理
disp(re_prod_A); %展示权重结果
%3、特征值法计算权重
clc;
A = input('判断矩阵A=‘); %输入判断矩阵
[n,n] = size(A); %获取A的行和列
%求出最大特征值以及对应的特征向量
[V,D] = eig(A); %V是特征向量 D是特征值构成的对角矩阵
Max_eig = max(max(D)); %先求出每一列的最大值,再求最大值中的最大值
[r,c] = find(Max_eig == D,1);%使用find()函数找出最大特征值对应的特征向量
%对特征向量进行归一化得到所需权重
disp(V(:,c)./sum(V(:,c)));
内容来自B站UP主:【数模加油站】配套视频地址:【数学建模快速入门】数模加油站:数学建模模型、算法、编程、写作及Matlab等软件学习教程(数学建模国赛美赛必看教程)_哔哩哔哩_bilibili