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. 如何使用Mac远程控制Windows电脑?

    如何使用Mac远程控制Windows电脑?在你开始之前,设置您要远程处理的 Windows 计算机. 先安装 Microsoft Remote Desktop. 打开 Microsoft Remote ...

  2. vue我自己的动态菜单思路

    1.在router里把所有的路由都加上. 2.后端存储路由path和其他设计需要的信息. 3.登录后,后端返回菜单树,根据权限不同,返回的菜单不同,并且还要返回每个path代表的页面具有的权限数组.可 ...

  3. 『手撕Vue-CLI』添加终端用户交互

    前言 经过上一篇文章的梳理,实现了可以从 GitHub 上拉取模板项目名称,已经可以得知可使用的模板有哪些了,那么我觉得是不是要进行选择呢?所以这一篇文章就来实现终端用户交互,让用户可以自己选择想要使 ...

  4. 深入探讨Function Calling:在Semantic Kernel中的应用实践

    引言 上一章我们熟悉了 OpenAI 的 function calling 的执行原理,这一章节我们讲解一下 function calling 在 Semantic Kernel 的应用. 在Open ...

  5. NOIP模拟64

    T1 三元组 解题思路 一看题面,好像是一道数学题,但不完全是,或者说根本不是... 比较好想到的是 \(\mathcal{O}(n^2)\) 和 \(\mathcal{O}(nk)\) 的做法,然后 ...

  6. CMake官网教程学习

    简介 本文档是根据CMake的官方教程学习的笔记,同时将教程中C++实现的代码更改为C语言实现.当前还未学习完. 教程官网:CMake Tutorial - CMake 3.27.0-rc1 Docu ...

  7. git创建分支 解决git网速太慢

                所谓的分支,就是每个人负责的不同的模块             整个项目有一个主干 master             所有的分支都是 从主干 maser 上 分支而来的   ...

  8. NCNN的内存显存分配器ncnn::Allocator & ncnn::VkAllocator翻译及其差异对比的学习笔记(nihui亲审过滴)

    NCNN的内存分配器 ncnn::Allocator 通用内存分配器   ncnn::PoolAllocator 内存池分配器 可以设置池大小,减少分配内存和析构内存次数,空间换时间   ncnn:: ...

  9. LeetCode 460. LFU Cache LFU缓存 (C++/Java)

    题目: Design and implement a data structure for Least Frequently Used (LFU)cache. It should support th ...

  10. WIN8 WIN10 WIN11离线安装 .NET 3.5

    WIN8 WIN10 WIN11离线安装 .NET 3.5 以WIN10为例: 1.双击WIN10 ISO 镜像,看挂载的是哪个盘符.我这边是E:. 2.使用 WIN + X 快捷键,打开 Windo ...