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. ansible(3)--ansible的相关命令行工具

    目录 1 ansible命令详解 2 ansible-doc显示模块帮助信息 3 ansible-playbook 4 ansible-galaxy 5 ansible-console 1 ansib ...

  2. ExpiringMap学习总结

    一.ExpiringMap简介 ExpiringMap是一个轻量级的Java缓存方式 针对一些小体量的项目,存储的数据量也不是很大(如校验码)的情况下,使用Redis会增加系统的复杂性和维护难度.它的 ...

  3. fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器

    fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器 从繁琐到简单,简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具--Fastposter海报生成器.作为一名开发者,我 ...

  4. fastposter v2.8.4 发布 电商海报生成器

    fastposter v2.8.4 发布 电商海报生成器 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发.贰维海报,图片海报,分享海报贰维码推 ...

  5. IPv6 — 移动性

    目录 文章目录 目录 前文列表 IPv6 的移动性 移动操作 路由优化 前文列表 <IPv6 - 网际协议第 6 版> <IPv6 - 地址格式与寻址模式> <IPv6 ...

  6. 前后端分离项目(vue+springboot)集成pageoffice实现在线编辑office文件

    前后端分离项目下使用PageOffice原理图 集成步骤 前端 vue 项目 在您Vue项目的根目录下index.html中引用后端项目根目录下pageoffice.js文件.例如: <scri ...

  7. CentOS7 防火墙(firewall)的命令详解

    复制代码 安装:yum install firewalld 1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status ...

  8. Pandas学习之路【3】

    新增列的一些操作 1.新增一个列,直接给列赋值 # 取所有行,新增的列为new_col df.loc[:, 'new_col'] = 100 2.使用df.apply方法给新增的列赋值 def get ...

  9. 记录一下Android usb相关的知识学习

    在SecondStageMain中会先调用PropertyInit做属性初始化,该方法会调用PropertyLoadBootDefaults加载持久化的属性主要加载位置: /system/build. ...

  10. C#自动安装字体

    在Windows系统中,原有自带的字体样式有限,有时候我们的程序会使用到个别稀有或系统不自带的字体.因此我们需要将字体打包到程序中,当程序启动时,检测系统是否有该字体,如果没有则安装该字体,也可以动态 ...