数学建模之层次分析法模型

article/2025/11/5 18:25:31

目录

问题

问题实例

 问题分析

建立层次分析法模型

分析权重的方法

​编辑

填表指标的权重​编辑

 一致性检验

一致性检验的引入

 一致性检验的步骤

 计算判断矩阵

归一化处理

算术平均法求权重

几何平均法求权重

特征值法求权重(常用)

汇总结果,得出结论 

得出权重矩阵

 计算得分

得出结论

代码部分

Matlab入门知识

本文例题代码计算部分

撰写论文部分

他人的例子(选自2016创新奖B题)

 一些技巧


问题

问题实例

 问题分析

 推荐搜索网站:虫部落 https://www.chongbuluo.com/

确定指标为:

景点景色,旅游花费,居住环境,饮食情况,交通便利程度

建立层次分析法模型

分析权重的方法

填表指标的权重

 同理得到方案的权重的判断矩阵(例子)

 一致性检验

一致性检验的引入

 矩阵的秩为1时,其一特征值为对角线之和,其余特征值为0

具体证法(来源网络)(推荐手机)https://vt.quark.cn/blm/quark-doc-ssr-293/preview?PageNum=1&bi=35823&ch=kk%40store&de=AANmbWuCsNJjJuHiN4nNjNNrIbUqF3IGiixbrKnuC%252FFU6A%253D%253D&dn=49492697401-9bf53019&ds=AAO3jqGiP6RzKox%2FKmKSp6aQa2lVksVIPKXkS2dt1FDQNg%3D%3D&ei=bTkwBAFH4DT%2Fh3SoyOphaRkAazmaVXkSCg%3D%3D&fp_from=sc&fr=android&gi=bTkwBDddBvWRpgZgFtlHKaFunbMg9eJnF8DTnjx5msb056s%253D&id=BA2370434CBCF2CF8A22C0FCDFBB15B9&kp=AAR4Kqhc6UKAk2Tl2RsfX33vtgZhGd%2B1%2B%2F1mUPhTkKSg0bLS%2FrGSklIXitXn7IQL7xctUyfBJrssWmgAHCqKTfPADxxm8yJ93S2n6bGUEnWbVQ%3D%3D&nt=5&nw=0&pf=3300&pr=ucpro&sid=621a06ba3e82ee0b0b09827e21c179c3&sv=release&uc_biz_str=OPT%3ABACK_BTN_STYLE%400%7COPT%3ATOOLBAR_STYLE%400%7COPT%3AS_BAR_BG_COLOR%40ffffff%7Cqk_enable_gesture%3Atrue&uc_param_str=dnntnwvepffrgibijbprsvpidsdicheiutkp&ut=AAO3jqGiP6RzKox%2FKmKSp6aQa2lVksVIPKXkS2dt1FDQNg%3D%3D&ve=5.9.3.228&previewShare=previewShare

 

 一致性检验的步骤

 计算判断矩阵

归一化处理

每一行除以其所在列的和

算术平均法求权重

几何平均法求权重

特征值法求权重(常用)

汇总结果,得出结论 

得出权重矩阵

 计算得分

在此处使用EXCEL可以简化计算 

技巧:F4可以锁定计算用的对应单元格

得出结论

比较三者的得分

代码部分

以下代码均来自数模清风课

Matlab入门知识

%% Matlab基本的小常识
% (1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子;)表示不显示运行结果
a = 3;
a = 5% (2)多行注释:选中要注释的若干语句,快捷键Ctrl+R% (3)取消注释:选中要取消注释的语句,快捷键Ctrl+T% clear可以清楚工作区的所有变量
clear% clc可以清除命令行窗口中的所有文本,让屏幕变得干净
clc% 所以大家在很多代码开头,都会见到:
clear;clc   % 分号也用于区分行。
% 这两条一起使用,起到“初始化”的作用,防止之前的结果对新脚本文件(后缀名是 .m)产生干扰。4%% 输出和输入函数(disp 和 input)
% matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数
disp('我是清风,大家好鸭~~~记得投币关注我哦')
disp(a) 
% 注意,disp函数比较特殊,这里可要分号,可不要分号哦
disp(a);% matlab中两个字符串的合并有两种方法
% (1)strcat(str1,str2……,strn) strcat('字符串1','字符串2') 
% (2)[str 1,str 2,……, str n]或[str1  str2  ……  strn]
['字符串1'  '字符串2']
['字符串1','字符串2']
% 一个有用的字符串函数:num2str  将数字转换为字符串
c = 100
num2str(c)
disp(['c的取值为' num2str(c)])
disp(strcat('c的取值为', num2str(c)))% input函数
% 一般我们会将输入的数、向量、矩阵、字符串等赋给一个变量,这里我们赋给A
A = input('请输入A:');
B = input('请输入B:')
% 注意观察工作区,并体会input后面加分号和不加分号的区别%% sum函数
% (1)如果是向量(无论是行向量还是列向量),都是直接求和
E = [1,2,3]
sum(E)
E = [1;2;3]
sum(E)
% (2)如果是矩阵,则需要根据行和列的方向作区分
clc
E = [1,2;3,4;5,6]
% a=sum(x); %按列求和(得到一个行向量)
a = sum(E)
a = sum(E,1)
% a=sum(x,2); %按行求和(得到一个列向量)
a = sum(E,2)
% a=sum(x(:));%对整个矩阵求和
a = sum(sum(E))
a = sum(E(:))%% 基础:matlab中如何提取矩阵中指定位置的元素?
% (1)取指定行和列的一个元素(输出的是一个值)
clc;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];
A
A(2,1)
A(3,2)
% (2)取指定的某一行的全部元素(输出的是一个行向量)
clc;A
A(2,:)
A(5,:)
% (3)取指定的某一列的全部元素(输出的是一个列向量)
clc;A
A(:,1)
A(:,3)
% (4)取指定的某些行的全部元素(输出的是一个矩阵)
clc;A
A([2,5],:)      % 只取第二行和第五行(一共2行)
A(2:5,:)        % 取第二行到第五行(一共4行)
A(2:2:5,:)     % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)
1:3:10
10:-1:1
A(2:end,:)      % 取第二行到最后一行
A(2:end-1,:)    % 取第二行到倒数第二行
% (5)取全部元素(按列拼接的,最终输出的是一个列向量)
clc;A
A(:)%% size函数
clc;
A = [1,2,3;4,5,6]
B = [1,2,3,4,5,6]
size(A)
size(B)
% size(A)函数是用来求矩阵A的大小的,它返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数
[r,c] = size(A)
% 将矩阵A的行数返回到第一个变量r,将矩阵的列数返回到第二个变量c
r = size(A,1)  %返回行数
c = size(A,2) %返回列数%% repmat函数
% B = repmat(A,m,n):将矩阵A复制m×n块,即把A作为B的元素,B由m×n个A平铺而成。
A = [1,2,3;4,5,6]
B = repmat(A,2,1)
B = repmat(A,3,2)%% Matlab中矩阵的运算
% MATLAB在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(A/B = A*inv(B))
A = [1,2;3,4]
B = [1,0;1,1]
A * B
inv(B)  % 求B的逆矩阵
B * inv(B)
A * inv(B)
A / B% 两个形状相同的矩阵对应元素之间的乘除法需要使用“.*”和“./”
A = [1,2;3,4]
B = [1,0;1,1]
A .* B
A ./ B% 每个元素同时和常数相乘或相除操作都可以使用
A = [1,2;3,4]
A * 2
A .* 2
A / 2 
A ./ 2% 每个元素同时乘方时只能用 .^
A = [1,2;3,4]
A .^ 2
A ^ 2 
A * A%% Matlab中求特征值和特征向量
% 在Matlab中,计算矩阵A的特征值和特征向量的函数是eig(A),其中最常用的两个用法:
A = [1 2 3 ;2 2 1;2 0 3]
% (1)E=eig(A):求矩阵A的全部特征值,构成向量E。
E=eig(A)
% (2)[V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。(V的每一列都是D中与之相同列的特征值的特征向量)
[V,D]=eig(A)%% find函数的基本用法
% 下面例子来自博客:https://www.cnblogs.com/anzhiwu815/p/5907033.html 博客内有更加深入的探究
% find函数,它可以用来返回向量或者矩阵中不为0的元素的位置索引。
clc;X = [1 0 4 -3 0 0 0 8 6]
ind = find(X)
% 其有多种用法,比如返回前2个不为0的元素的位置:
ind = find(X,2)%上面针对的是向量(一维),若X是一个矩阵(二维,有行和列),索引该如何返回呢?
clc;X = [1 -3 0;0 0 8;4 0 6]
ind = find(X)
% 这是因为在Matlab在存储矩阵时,是一列一列存储的,我们可以做一下验证:
X(4)
% 假如你需要按照行列的信息输出该怎么办呢?
[r,c] = find(X)
[r,c] = find(X,1) %只找第一个非0元素%% 矩阵与常数的大小判断运算
% 共有三种运算符:大于> ;小于< ;等于 ==  (一个等号表示赋值;两个等号表示判断)
clc
X = [1 -3 0;0 0 8;4 0 6]
X > 0
X == 4%% 判断语句
% Matlab的判断语句,if所在的行不需要冒号,语句的最后一定要以end结尾 ;中间的语句要注意缩进。
a = input('请输入考试分数:')
if a >= 85  disp('成绩优秀')
elseif a >= 60 disp('成绩合格')
elsedisp('成绩挂科')
end% % 注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
% % 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭

本文例题代码计算部分

%% 输入判断矩阵
clear;clc
disp('请输入判断矩阵A: ')
% A = input('判断矩阵A=')
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]
% matlab矩阵有两种写法,可以直接写到一行:
% [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]
% 也可以写成多行:
[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]
% 两行之间以分号结尾(最后一行的分号可加可不加),同行元素之间以空格(或者逗号)分开。%% 方法1:算术平均法求权重
% 第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
Sum_A = sum(A)[n,n] = size(A)  % 也可以写成n = size(A,1)
% 因为我们的判断矩阵A是一个方阵,所以这里的r和c相同,我们可以就用同一个字母n表示
SUM_A = repmat(Sum_A,n,1)   %repeat matrix的缩写
% 另外一种替代的方法如下:SUM_A = [];for i = 1:n   %循环哦,这一行后面不能加冒号(和Python不同),这里表示循环n次SUM_A = [SUM_A; Sum_A]end
clc;A
SUM_A
Stand_A = A ./ SUM_A
% 这里我们直接将两个矩阵对应的元素相除即可% 第二步:将归一化的各列相加(按行求和)
sum(Stand_A,2)% 第三步:将相加后得到的向量中每个元素除以n即可得到权重向量
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2) / n)
% 首先对标准化后的矩阵按照行求和,得到一个列向量
% 然后再将这个列向量的每个元素同时除以n即可(注意这里也可以用./哦)%% 方法2:几何平均法求权重
% 第一步:将A的元素按照行相乘得到一个新的列向量
clc;A
Prduct_A = prod(A,2)
% prod函数和sum函数类似,一个用于乘,一个用于加  dim = 2 维度是行% 第二步:将新的向量的每个分量开n次方
Prduct_n_A = Prduct_A .^ (1/n)
% 这里对每个元素进行乘方操作,因此要加.号哦。  ^符号表示乘方哦  这里是开n次方,所以我们等价求1/n次方% 第三步:对该列向量进行归一化即可得到权重向量
% 将这个列向量中的每一个元素除以这一个向量的和即可
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))%% 方法3:特征值法求权重
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量
clc
[V,D] = eig(A)    %V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig = max(max(D)) %也可以写成max(D(:))哦~
% 那么怎么找到最大特征值所在的位置了? 需要用到find函数,它可以用来返回向量或者矩阵中不为0的元素的位置索引。
% 那么问题来了,我们要得到最大特征值的位置,就需要将包含所有特征值的这个对角矩阵D中,不等于最大特征值的位置全变为0
% 这时候可以用到矩阵与常数的大小判断运算
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.10disp('因为CR < 0.10,所以该判断矩阵A的一致性可以接受!');
elsedisp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end%%注意以上代码,一致性检验在最后,实际上应该提前

撰写论文部分

他人的例子(选自2016创新奖B题)

 一些技巧

1.在求权重时用三种方法可以避免出错,写进论文里一笔带过可能也会加点评委分。

2.关于作图软件,推荐亿图图示(以本文题例) 

 3.若没有通过一致性检验则需要对假设的数据进行调整,向判断矩阵行列成比例上调整

4.评价层标准不宜太多,太多可能会导致一致性检验难以通过。若N为2,可以把表中2对应数据近似为0.001来代入公式。

5.在excel用公式计算单元格之间的值时,按F4可以锁定公式中锁定的单元格,有助于将公式推广到此后的单元格

 


http://chatgpt.dhexx.cn/article/yAxHPxYO.shtml

相关文章

逻辑数据模型之层次数据模型、网状数据模型和关系数据模型

上一篇文章简单介绍了概念数据模型、逻辑数据模型、物理数据模型的基本概念、特性以及三者所对应的数据库的开发阶段。现在针对逻辑数据模型中所用到的三种数据模型---层次数据模型、网状数据模型以及关系数据模型做一个相信的介绍与对比分析。 一、层次数据模型 定义&#xff…

三种数据模型---层次模型、网状模型以及关系模型

一、层次数据模型 定义&#xff1a;层次数据模型是用树状<层次>结构来组织数据的数据模型。 其实层次数据模型就是的图形表示就是一个倒立生长的树&#xff0c;由基本数据结构中的树&#xff08;或者二叉树&#xff09;的定义可知&#xff0c;每棵树都有且仅有一个根节点…

【数学模型】层次分析

Hello大家好&#xff0c;今年数学建模国赛将于9月中旬举行&#xff0c;是时候提前做一些准备了。 本次模型非常简单&#xff0c;只是介绍比较得详细&#xff0c;我下次注意&#xff0c;争取限制下字数。 文末准备了 层次分析-python 模型的实现&#xff0c;简单懂得模型原理便…

数据库中的常用的数据模型 层次模型 网状模型 关系模型

层次数据模型 定义&#xff1a;层次数据模型是用树状<层次>结构来组织数据的数据模型。 满足下面两个条件的基本层次联系的集合为层次模型     1. 有且只有一个结点没有双亲结点&#xff0c;这个结点称为根结点     2. 根以外的其它结点有且只有一个双亲结点 其…

1.2 《数据库系统概论》之数据模型(概念模型、逻辑模型--物理模型、层次模型、网状模型、关系模型、面向对象模型、对象关系模型)

文章目录 0.思维导图1.数据模型的概念2.两大类数据模型客观对象的抽象过程---两步抽象 3.数据模型的组成要素(1)数据结构(2)数据操作(3)数据的完整性约束条件 4.概念模型(1)用途与基本要求(2) 信息世界中的基本概念(3)两个实体型之间的联系① 一对一联系&#xff08;1:1&#x…

层次、网状、关系模型

层次、网状、关系模型都是逻辑上的&#xff0c;它们都是以一定的方式存储在数据库系统中&#xff0c;这是数据库管理系统的功能&#xff0c;是数据库管系统中的物理存储模型。 格式化模型 层次模型和网状模型统称为格式化模型。格式化模型中数据结构的基本单位是基本层次联系&…

层次分析模型

离散模型&#xff1a;代数方程与差方程、整数规划、图论、对策论、网络论 层次模型&#xff08;AHP&#xff09;是一种定性与定量相结合的、系统化、层次化的分析方法。 人们在进行社会的、经济的以及科学管理领域问题的系统分析中&#xff0c;面临的常常是一个互相关联、相互…

常用的数据模型及其对比(层次模型、网状模型、关系模型)

数据库领域中主要的逻辑数据模型有:层次模型、网状模型、关系模型、面向对象数据模型等,我们重点讲解了**层次模型、网状模型、关系模型**。1.1 层次模型 层次数据库系统的典型代表是IBM公司的Information Management System数据库管理系统。层次模型用树形结构来表示各类实体…

层次模型

层次模型 层次模型是数据库系统中最早出现的数据模型&#xff0c;层次模型系统采用层次模型作为数据的组织形式。层次数据库系统的典型代表IMS是IBM公司1968年推出的第一个大型商用数据库管理系统。层次模型用树形结构来表示各类实体以及实体间的联系。 层次模型的数据结构 …

“OXO”历史上最早开发的电子游戏——游戏编年史

《OXO》是亚历山大道格拉斯&#xff08;Alexander S. Douglas&#xff09;在1952年开发的一款井字游戏&#xff0c;它是开发在电子延迟存储自动计算器&#xff08;EDSAC&#xff09;上&#xff0c;EDSAC是最早的存储程序计算机之一&#xff0c;具有可读取或写入的存储器&#x…

游戏发展史上十大经典之作

今天我们就来说说RTS发展历史上出现的经典之作&#xff0c;说说那些让人玩过之后难以忘怀的作品&#xff0c;请注意&#xff0c;这个榜单的排名不分先后&#xff0c;既已进入了经典的领域&#xff0c;还何必去分什么高下呢。 10.傲世三国 傲世三国绝对是中国最棒的RTS作品&…

哪些游戏称得上“次时代”? 次时代游戏史

最近在网络游戏界讨论的一个最热门的话题是“国产网游是否能称‘次世代网游’&#xff1f;”对于此话题&#xff0c;许多玩家一听就会嗤之以鼻&#xff0c;笑称“国产网游也配称次世代&#xff1f;”其实笔者觉得大家没有必要盲目的妄自尊菲薄&#xff0c;国产网游是否能称“次…

最早的计算机网络游戏,手机网络游戏早期发展史——图文游戏

原标题&#xff1a;手机网络游戏早期发展史——图文游戏 当手机游戏走入千家万户时&#xff0c;越来越多的端游玩家进入到了手游的世界&#xff0c;你可知&#xff0c;手机游戏的发展史要比电脑端游心酸的太多太多。 最早的手机游戏是在运营商的网站上在线操作的&#xff0c;那…

家用游戏机的发展史

大致线路 Nintendo Family computer Super family computer Nintendo 64Wii Wii U Sony PlayStation PlayStation 2PlayStation 3PlayStation 4 Microsoft Xbox Xbox360 Xbox one 第一世代(1972&#xff0d;1977) 世界上第一台家用游戏机是谁发明的&#xff1f;在哪一…

游戏引擎发展历程

游戏引擎&#xff08;Game Engine&#xff09;是什么&#xff1f;大多数人给出的解释都是基于engine的英文翻译&#xff0c;将游戏引擎等同于汽车中的引擎&#xff08;发动机&#xff09;&#xff0c;再好一些的解释成动力&#xff0c;这些解释都对&#xff0c;但是动力只说并不…

游戏趣史:游戏引擎的发展史

游戏引擎&#xff0c;作为开发人员的重要伙伴&#xff0c;游戏引擎将开发过程中复杂繁琐的底层组件进行了系统化、标准化的处理。我们如今能够直观感受到的精美画面与物理效果&#xff0c;正是得益于它的不断发展。游戏引擎诞生&#xff1a;游戏产业的工业革命在二十世纪九十年…

80年代电子游戏及电脑游戏的发展历史

1980年代 主条目&#xff1a;1980 年代的电子游戏 20世纪80年代初&#xff0c;随着出版社的出现&#xff0c;电子游戏行业经历了第一次重大的成长困境。20世纪80年代早期的一些游戏只是现有街机游戏的简单复制品&#xff0c;而个人电脑游戏相对较低的出版成本使得大胆、独特的游…

游戏引擎的发展历程

本文来自&#xff1a; http://edu.gamfe.com/tutor/d/41955.html &#xff3b;1&#xff3d;游戏引擎&#xff08;Game Engine&#xff09;是什么&#xff1f;大多数人给出的解释都是基于engine的英文翻译&#xff0c;将游戏引擎等同于汽车中的引擎&#xff08;发动机&#xf…

游戏引擎发展史

本次对引擎&#xff08;真正意义上的游戏引擎&#xff09;的历史回顾将主要围绕动作射击游戏的变迁展开&#xff0c;动作射击游戏同3D引擎之间的关系相当于一对孪生兄弟&#xff0c;它们一同诞生&#xff0c;一同成长&#xff0c;互相为对方提供着发展的动力。 1992年&#xff…

电子游戏发展史

四十年前的五月&#xff0c;一位从法西斯德国逃到美国的发明家Ralph Baer&#xff0c;搭建出了第一套家用电子游戏系统——Brown Box。这个游戏主机原型采用D-cell电池驱动&#xff0c;和一台黑白电视机相连。Baer回忆当年时说&#xff1a;“显然当时没有人能预见到今后会有怎样…