TOPSIS 法是一种常用的组内综合评价方法,能充分利用原始数据的信息,其结果能精确地反映各评价方案之间的差距。下面我们来介绍具体步骤与代码实现

问题提出

通过这20条河流的4个指标,对这20条河流进行打分

第一步:数据输入

1.如何从excel中复制数据直接储存为matlab变量

选取想要的数据



在matlab的工作区中新建一个变量,将数据复制到变量中

2.如何将变量储存为mat文件,利用load函数加载数据

在matlab工作区右键点击变量,选择另存为,即可把变量储存在文件夹中,使用load(‘变量名’)即可加载数据

第二步:判断是否需要正向化

因为topsis法使用指标值与最优解与最劣解的距离进行评价,但是有些指标不是越大越好,为了计算方便,我们需要将指标值进行正向化

1.常见指标如图所示

2.正向化方法





3.代码实现

代码实现的过程实际上是矩阵计算的过程,要求编程者熟悉对矩阵的语法

(1)提供基础性息,并判断是否需要正向化

(2)用户指定需要正向化的与正向化方法

(3) Positivization(x,type,i)函数进行计算

第一个参数x为需要进行正向化的的列,可以用向量来表示多列。type也可以是一个向量,与x对应表示正向化的方法,而i表示列的索引

代码如图所示,主要表示一个分段函数,其中正向化的方法储存在另外三个函数中

第三步:正向化矩阵标准化

1.计算原理

以列为一个单位,对矩阵进行标准化。也就是对每一个指标分别进行标准化,去除量纲的影响

2.代码实现

sum(X.*X).^0.5为标准化的分母,是一个对列进行平方求和后的行向量,利用repmat函数将其扩展n行,这样就与原矩阵的维度相同,方便进行点除。

第四步:计算得分并归一化

1.计算原理

2.代码实现

此过程与前面的数值计算无异,也就是用向量进行计算。

其中max(Z)表示对Z的每一列求最大值,得到一个行向量,扩展后与原矩阵进行运算;

sum函数将运算后得到的矩阵按列相加,得到一个行向量;

计算出D_positive与D_negtive后即可算出未归一化的得分S;

最后的sort函数则对得分进行排序,并记录下排序的索引。

TOPSIS模型原理以及代码实现的更多相关文章

  1. Actor模型原理

    1.Actor模型 在使用Java进行并发编程时需要特别的关注锁和内存原子性等一系列线程问题,而Actor模型内部的状态由它自己维护即它内部数据只能由它自己修改(通过消息传递来进行状态修改),所以使用 ...

  2. 机器学习之决策树三-CART原理与代码实现

    决策树系列三—CART原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9482885.html ID ...

  3. 机器学习之决策树一-ID3原理与代码实现

    决策树之系列一ID3原理与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9429257.html 应用实 ...

  4. [NLP] TextCNN模型原理和实现

    1. 模型原理 1.1 论文 Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出Te ...

  5. Holt-Winters模型原理分析

    Holt-Winters模型原理分析及代码实现(python) from:https://blog.csdn.net/u010665216/article/details/78051192 引言 最近 ...

  6. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    本文介绍多层感知机算法,特别是详细解读其代码实现,基于python theano,代码来自:Multilayer Perceptron,如果你想详细了解多层感知机算法,可以参考:UFLDL教程,或者参 ...

  7. OpenStack 虚拟机冷/热迁移的实现原理与代码分析

    目录 文章目录 目录 前文列表 冷迁移代码分析(基于 Newton) Nova 冷迁移实现原理 热迁移代码分析 Nova 热迁移实现原理 向 libvirtd 发出 Live Migration 指令 ...

  8. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  9. flume原理及代码实现

    转载标明出处:http://www.cnblogs.com/adealjason/p/6240122.html 最近想玩一下流计算,先看了flume的实现原理及源码 源码可以去apache 官网下载 ...

  10. word2vec模型原理与实现

    word2vec是Google在2013年开源的一款将词表征为实数值向量的高效工具. gensim包提供了word2vec的python接口. word2vec采用了CBOW(Continuous B ...

随机推荐

  1. next-route

    在目录结构中,我们精心创建的每一个文件最终都会经过处理,转化为相应的页面路由.然而,值得注意的是,某些特殊文件格式在生成过程中并不会被当作路由路径来处理. app |-auth login page. ...

  2. MindSpore梯度进阶操作

    技术背景 在MindSpore深度学习框架中,我们可以使用mindspore.grad对函数式编程的函数直接计算自动微分,也可以使用mindspore.ops.GradOperation求解Cell类 ...

  3. win10 使用idea 构建一个ssm的模板maven项目

    一.创建一个maven项目   1.1建立一个module作为web项目   File->New->project 选择maven,默认jdk,下面的列表什么都不选,next->输入 ...

  4. 源码分析——MyBatis核心接口SqlSession的实现原理

    在上一篇文章中(<MyBatis动态代理调用过程源码分析>),我们知道了MyBatis动态代理的核心是MapperProxy,在它内部封装了动态代理的调用逻辑,而我们也知道了在使用动态代理 ...

  5. 如何用 Unity 做出一只赛博宠物

    推荐的一些学习资料 unity 官方文档:Unity 用户手册 (2019.4LTS) - Unity 手册 视频教程:https://www.bilibili.com/video/BV1zB4y1C ...

  6. WPF 制作高性能的透明背景异形窗口(使用 WindowChrome 而不要使用 AllowsTransparency=True)

    在 WPF 中,如果想做一个背景透明的异形窗口,基本上都要设置 WindowStyle="None".AllowsTransparency="True" 这两个 ...

  7. vivo 制品管理在 CICD 落地实践

    作者:vivo 互联网效能平台团队 - Chen Lingling 在DevOps实践中,制品管理是一个重要的组成部分,它可以帮助团队快速交付高质量.高可靠性的软件,本文将介绍在 DevOps 领域, ...

  8. OC的引用计数

    一.引用计数 引用计数是Objetive-C语言的内存管理机制,用于管理OC对象(通常指包含isa指针的结构体)的内存. 一个对象的引用计数为大于0的计数,表示这个对象被持有,不能被释放,当引用计数为 ...

  9. svg动画导致持续占用CPU

    1.在一次性能优化中突然发现一个svg矢量图动画导致CPU持续占用的问题,该svg在web中使用, 即使webview释放之后,CPU依然占用达到10%,6s+上测试结果 svg如下所示: <s ...

  10. MySQL学习笔记-约束

    约束 约束是作用于表中字段上的规则,用于限制存储在表中的数据,保证数据库中数据的正确.有效和完整. 一. 常用的约束 约束作用于表中的字段,可以在创建表或修改表的时候添加约束. AUTO_INCREM ...