matlab层次分析法模型及相关语言基础

发现更多计算机知识,欢迎访问Cr不是铬的个人网站

代码放在最后面!

这篇文章是学习层次分析法模型的笔记。

1.什么时候用层次分析法

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

层次分析法式利用各项指标的不同权重来进行判断的模型。就比如这样的:

file


2.关于权重表

关于上图的表作进一步的说明。这个表的评分是根据数据来的,但是每天每次这种数据可能略有不同,那么计算的得分不也就不同了吗?为了消除这种差异,我们引进的是相对的概念! file

根据这个表格的规则来填写,就变得更加的稳定且准确。

3.一致矩阵

刚刚我们根据那个规则填写出来的表是判断矩阵。那么什么是一致性矩阵呢?

满足如图的公式的矩阵我们称之为一致性矩阵!

file


其实也就是各行各列成倍数关系

4.一致性检验

一致性检验就是检验我们构造的判断矩阵和一致性矩阵的差别大不大。

一致性矩阵的充要条件:

file

一致性检验步骤

计算一致性指标

image-20231117210132103


查找平均随机一致性指标

file


计算一致性比例CR

file 如果CR < 0.1,那么代表其能够通过一致性检验!

一致性矩阵如何计算权重

在判断为一致性矩阵后,我们来计算权重值。有这么三种方法:算术平均法

算术平均法求权重

  • 将判断矩阵归一化 file

  • 将归一化的矩阵按行求和

file

  • 将相加后得到的向量中每个元素除以n即可得到权重向量

file

file

几何平均法求权重

  • 第一步:将A的元素按照行相乘得到一个新的列向量
  • 第二步:将新的向量的每个分量开n次方
  • 第三步:对该列向量进行归一化即可得到权重向量

file


特征值法

特征值法是最常用也是最重要的!

一致矩阵有一个特征值为n,其余特征值均为0

  • 第一步:求出矩阵A的最大特征值以及其对应的特征向量
  • 第二步:对求出的特征向量进行归一化即可得到我们的权重

层次分析法步骤

  • 分析系统中各因素之间的关系,建立系统的递阶层次结构.

file


  • 对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)

file


  • 由判断矩阵计算被比较元素对于该准则的相对权重,并进行一致性检验(检验通过权重才能用).

在比赛中三种方法最好都用上。考虑健壮性

代码部分

Matlab基本的小常识

% (1)在每一行的语句后面加上分号(一定要是英文的哦;中文的长这个样子;)表示不显示运行结果a = 3;a = 5% (2)多行注释:选中要注释的若干语句,快捷键Ctrl+R% a = 3;% a = 5% (3)取消注释:选中要取消注释的语句,快捷键Ctrl+T% 我想要取消注释下面这行% 还有这一行% clear可以清楚工作区的所有变量clear% clc可以清除命令行窗口中的所有文本,让屏幕变得干净clc% 所以大家在很多代码开头,都会见到:clear;clc   % 分号也用于区分行。% 这两条一起使用,起到“初始化”的作用,防止之前的结果对新脚本文件(后缀名是 .m)产生干扰。

输出和输入函数(disp 和 input)

% disp函数% matlab中disp()就是屏幕输出函数,类似于c语言中的printf()函数disp('hello,math')a = [1,2,3]    %同一行中间用逗号分隔,也可以不用逗号,直接用空格a = [1 2 3]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 = 100num2str(c)disp(['c的取值为' num2str(c)])disp(strcat('c的取值为', num2str(c)))% input函数% 一般我们会将输入的数、向量、矩阵、字符串等赋给一个变量,这里我们赋给AA = input('请输入A:');B = input('请输入B:')% 注意观察工作区,并体会input后面加分号和不加分号的区别

sum函数

% (1)如果是向量(无论是行向量还是列向量),都是直接求和E = [1,2,3]sum(E)E = [1;2;3]sum(E)% (2)如果是矩阵,则需要根据行和列的方向作区分clcE = [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];AA(2,1)A(3,2)% (2)取指定的某一行的全部元素(输出的是一个行向量)clc;AA(2,:)A(5,:)% (3)取指定的某一列的全部元素(输出的是一个列向量)clc;AA(:,1)A(:,3)% (4)取指定的某些行的全部元素(输出的是一个矩阵)clc;AA([2,5],:)      % 只取第二行和第五行(一共2行)A(2:5,:)        % 取第二行到第五行(一共4行)A(2:2:5,:)     % 取第二行和第四行 (从2开始,每次递增2个单位,到5结束)1:3:1010:-1:1A(2:end,:)      % 取第二行到最后一行A(2:end-1,:)    % 取第二行到倒数第二行% (5)取全部元素(按列拼接的,最终输出的是一个列向量)clc;AA(:)

size函数

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在矩阵的运算中,“*”号和“/”号代表矩阵之间的乘法与除法(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元素

矩阵与常数的大小判断运算

% 共有三种运算符:大于> ;小于< ;等于 ==  (一个等号表示赋值;两个等号表示判断)clcX = [1 -3 0;0 0 8;4 0 6]X > 0X == 4

判断语句

% Matlab的判断语句,if所在的行不需要冒号,语句的最后一定要以end结尾 ;中间的语句要注意缩进。a = input('请输入考试分数:')if a >= 85  ​    disp('成绩优秀')elseif a >= 60 ​    disp('成绩合格')else​    disp('成绩挂科')end

层次分析法代码

% 在开始下面正式的步骤之前,我们有必要检验下A是否因为粗心而输入有误
ERROR = 0;  % 默认输入是没有错误的
%(1)检查矩阵A的维数是否不大于1或不是方阵
[r,c]=size(A);
%size(A)函数是用来求矩阵的大小的,返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数
%[r,c]=size(A)  %将矩阵A的行数返回到第一个输出变量r,将矩阵的列数返回到第二个输出变量cif r ~= c  || r <= 1% 注意哦,不等号是 ~=  (~是键盘Tab上面那个键,要和Shift键同时按才会出来),别和C语言里面的!=搞混了% ||表示逻辑运算符‘或’(在键盘Enter上面,也要和Shift键一起按) 逻辑运算符且是 && (&读and,连接符号,是and的缩写。 )ERROR = 1;
end
% Matlab的判断语句,if所在的行不需要冒号,语句的最后一定要以end结尾 ;中间的语句要注意缩进。%(2)检验是否为正互反矩阵  a_ij > 0 且 a_ij * a_ji = 1
if ERROR == 0[n,n] = size(A);% 因为我们的判断矩阵A是一个非零方阵,所以这里的r和c相同,我们可以就用同一个字母n表示% 判断是否有元素小于0%    for i = 1:n%        for j = 1:n%            if A(i,j)<=0%                ERROR = 2;%            end%        end%    endif sum(sum(A <= 0)) > 0ERROR = 2;end
end%顺便检验n是否超过了15,因为RI向量为15维
if ERROR == 0if n > 15ERROR = 3;end
endif ERROR == 0% 判断  a_ij * a_ji = 1 是否成立if sum(sum(A' .* A ~=  ones(n))) > 0ERROR = 4;end% A' 表示求出 A 的转置矩阵,即将a_ij和a_ji互换位置% ones(n)函数生成一个n*n的全为1的方阵, zeros(n)函数生成一个n*n的全为0的方阵% ones(m,n)函数生成一个m*n的全为1的矩阵% MATLAB在矩阵的运算中,“/”号和“*”号代表矩阵之间的乘法与除法,对应元素之间的乘除法需要使用“./”和“.*”% 如果a_ij * a_ji = 1 满足, 那么A和A'对应元素相乘应该为1
endif ERROR == 0% % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %Sum_A = sum(A);SUM_A = repmat(Sum_A,n,1);Stand_A = A ./ SUM_A;disp('算术平均法求权重的结果为:');disp(sum(Stand_A,2)./n)% % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %Prduct_A = prod(A,2);Prduct_n_A = Prduct_A .^ (1/n);disp('几何平均法求权重的结果为:');disp(Prduct_n_A ./ sum(Prduct_n_A))% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %[V,D] = eig(A);Max_eig = max(max(D));[r,c]=find(D == Max_eig , 1);disp('特征值法求权重的结果为:');disp( V(:,c) ./ sum(V(:,c)) )% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %CI = (Max_eig - n) / (n-1);RI=[0 0.00001 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.10disp('因为CR<0.10,所以该判断矩阵A的一致性可以接受!');elsedisp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');end
elseif ERROR == 1disp('请检查矩阵A的维数是否不大于1或不是方阵')
elseif ERROR == 2disp('请检查矩阵A中有元素小于等于0')
elseif ERROR == 3disp('A的维数n超过了15,请减少准则层的数量')
elseif ERROR == 4disp('请检查矩阵A中存在i、j不满足A_ij * A_ji = 1')
end

本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/200134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试题07

1.线程池都有哪些状态&#xff1f; 线程池的状态有RUNNING&#xff08;运行中&#xff09;、SHUTDOWN&#xff08;关闭中&#xff0c;不接受新任务&#xff09;、 STOP&#xff08;立即关闭&#xff0c;中断正在执行任务的线程&#xff09;和TERMINATED&#xff08;终止&#x…

高防CDN如何预防攻击?

现在网络攻击事件越来越多&#xff0c;而且愈发凶猛&#xff0c;为了保障互联网业务能稳定正常的运行&#xff0c;市场上出现了很多高防产品&#xff0c;例如高防服务器、高防IP、高防CDN等等。其中究竟高防CDN怎么防攻击&#xff0c;能防哪些攻击&#xff1f;高防CDN如何实现防…

详解Python安装requests库的实例代码

文章目录 前言基本用法基本的get请求带参数的GET请求解析json关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前…

为什么 Django 后台管理系统那么“丑”?

哈喽大家好&#xff0c;我是咸鱼 相信使用过 Django 的小伙伴都知道 Django 有一个默认的后台管理系统——Django Admin 它的 UI 很多年都没有发生过变化&#xff0c;现在看来显得有些“过时且简陋” 那为什么 Django 的维护者却不去优化一下呢&#xff1f;原文作者去询问了多…

网页开发如何实现简易页面跳动/跳转,html课堂练习/作业,页面ABC的相互跳转

先建一个文件夹&#xff0c;文件夹包含三个文件夹&#xff0c;三个文件夹分别包含各自的代码。(可以只建一个文件夹&#xff0c;文件夹包含各页面代码) 页面1的代码&#xff1a; <head> <meta http-equiv"Content-Type" content"text/html; charsetu…

使用Docker部署Python Flask应用的完整教程

一、引言 Docker是一种开源的容器化平台&#xff0c;可以将应用程序及其依赖项打包成一个独立的容器&#xff0c;实现快速部署和跨平台运行。本文将详细介绍如何使用Docker来部署Python Flask应用程序&#xff0c;帮助开发者更高效地构建和部署应用。 二、准备工作 在开始之前…

国产压力测试工具的主要作用

国产压力测试工具可以帮助软件开发和维护团队对系统进行全面的性能测试&#xff0c;以评估系统在高负载下的性能表现。以下是国产压力测试工具的主要作用&#xff1a; 性能评估&#xff1a;国产压力测试工具可以模拟多用户同时对系统进行访问和操作&#xff0c;通过对系统的响应…

​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第15章 面向服务架构设计理论与实践&#xff08;P527~554&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

pycharm 控制台中文乱码处理

今天使用pycharm&#xff0c;发现控制台输出又中文乱码了&#xff0c;看网上很多资料说把编码改为UTF-8&#xff0c;设置为并未生效&#xff0c;特此在此记录下本地设置。 1. 修改文件编码&#xff1a;Setting -> Editor ->File Encodings,修改配置如下&#xff1a; 2. …

ChatGPT/GPT4科研实践应用与AI绘图技术及论文高效写作

2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

【每日OJ —— 225.用队列实现栈(队列)】

每日OJ —— 225.用队列实现栈&#xff08;队列&#xff09; 1.题目&#xff1a;225.用队列实现栈&#xff08;队列&#xff09;2.解法2.1.解法讲解&#xff1a;2.1.1.算法讲解2.1.2.代码实现2.1.3.提交通过展示 1.题目&#xff1a;225.用队列实现栈&#xff08;队列&#xff0…

【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解

【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解 文章目录 【图像分类】【深度学习】【轻量级网络】【Pytorch版本】MobileNets_V2模型算法详解前言MobleNet_V2讲解反向残差结构(Inverted Residuals)兴趣流形(Manifold of interest)线性瓶颈层…

微信小程序记住密码,让登录解放双手

密码是用户最重要的数据&#xff0c;也是系统最需要保护的数据&#xff0c;我们在登录的时候需要用账号密码请求登录接口&#xff0c;如果用户勾选记住密码&#xff0c;那么下一次登录时&#xff0c;我们需要将账号密码回填到输入框&#xff0c;用户可以直接登录系统。我们分别…

力扣贪心——跳跃游戏I和II

1 跳跃游戏 利用边界进行判断&#xff0c;核心就是判定边界&#xff0c;边界内所有步数一定是最小的&#xff0c;然后在这个边界里找能到达的最远地方。 1.1 跳跃游戏I class Solution {public boolean canJump(int[] nums) {int len nums.length;int maxDistance 0;int te…

卷积、卷积图像操作和卷积神经网络

好多内容直接看书确实很难坚持&#xff0c;就比如这个卷积&#xff0c;书上的一大堆公式和图表直接把人劝退&#xff0c;我觉得一般的学习流程应该是自顶向下&#xff0c;先整体后局部&#xff0c;先把握大概再推敲细节的&#xff0c;上来就事无巨细地展示对初学者来说很痛苦。…

2021年03月 Scratch(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch等级考试(1~4级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 小猫在沙漠中旅行好不容易找到了一杯水,初始位置如下图所示,下面哪个程序可以帮助它成功喝到水? A: B: C: D:

OpenLayers实战,WebGL图层根据Feature要素的变量动态渲染多种颜色的三角形,适用于大量三角形渲染不同颜色

专栏目录: OpenLayers实战进阶专栏目录 前言 本章使用OpenLayers根据Feature要素的变量动态渲染不同颜色的三角形。 通过一个WebGL图层生成四种不同颜色的图形要素,适用于WebGL图层需要根据大量点要素区分颜色显示的需求。 更多的WebGL图层使用运算符动态生成样式的内容将会…

手机弱网测试工具:Charles

我们在测试app的时候&#xff0c;需要测试弱网情况下的一些场景&#xff0c;那么使用Charles如何设置弱网呢&#xff0c;请看以下步骤&#xff1a; 前提条件&#xff1a; 手机和电脑要在同一局域网内 Charles连接手机抓包 一、打开Charles&#xff0c;点击代理&#xff0c;…

黑马React18: 基础Part II

黑马React: 基础2 Date: November 16, 2023 Sum: 受控表单绑定、获取DOM、组件通信、useEffect、Hook、优化B站评论 受控表单绑定 受控表单绑定 概念&#xff1a;使用React组件的状态&#xff08;useState&#xff09;控制表单的状态 准备一个React状态值 const [value, se…

万界星空科技QMS质量管理系统功能

QMS质量管理系统结合质量决策、综合质量管理、过程质量控制三个层次要素&#xff0c;帮助企业实现产品全寿命周期质量数据的及时、灵活、准确和全面采集。 通过质量管理软件能够实现质量数据科学处理和应用&#xff0c;包括数据的系统化组织、结构化存贮、便捷式查询、定制化统…