数学建模值TOPSIS法及代码

TOPSIS法

TOPSIS法简称为优劣距离解法,是一种常见法综合评价方法,其能充分利用原始数据的信息,其结果能精确地反映各个评价方案之间的差距。

模型介绍

上篇文章谈到的层次分析法是有局限性的。比如评价的决策层不能太多,太多的话n会很大,判断矩阵和一致性矩阵差异可能会很大。其次,其无法利用原始的数据来做精确的评价。这个时候就体现出TOPSIS法的好处了。

它在原始数据上,充分反映各个评价方案之间的差距。

统一指标类型

将所有的指标转换为极大型称为指标正向化。(最常用)

file


标准化处理

为了消去不同量纲的影响,需要对已经正向化的矩阵进行标准化处理

file


如何计算得分

file


TOPSIS的流程

第一步:原始矩阵正向化

最常见的四种指标:

指标名称指标特点例子
极大型指标越大越好成绩、GDP增速
极小型指标越小越好费用、污染程度
中间型指标越接近某个值越好水的PH值
区间型指标落在某个区间最好体温

所谓的原始矩阵正向化就是将所有的指标类型统一转换为极大型指标

极小型-->极大型

公式: $$ max(xi) - x $$ 或者都是整数的话: $$ 1/x $$

中间型-->极大型

{xi}是一组中间型序列,且最佳的值为xbest

公式: $$ M = max{(|xi - xbest|)}, xi = 1 - |xi - xbest|/M $$

区间型-->极大型

{xi}是一组区间型指标序列,且最佳的区间为[a,b]

公式: $$ M = max({a - min{(xi)},max{(xi)} - b}) $$ file


正向化矩阵标准化

如图:

file

计算得分并归一化

file

代码部分

第一步:把数据复制到工作区

clear;clc
load data_water_quality.mat
X = data_water_quality
%进行初步处理,得到行与列
[n,m]  = size(X)

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

%%topsis.m
disp['共有' num2str(n) '个评价对,象' num2str(m) '个评价指标' ]%确定哪几列需要正向化
judge = input('请输入是否需要正向化,0代表不需要,1代表需要  ')if judge == 1%记录需要正向化的列Position = input('输入需要处理的列数,比如[1,2,3]')%记录对应要处理列的指标类型Type = input('请输入对应的处理类型(1,极小型) (2,中间型) (3,区间型)')%对每一列进行正向化处理for i = 1 : size(Position,2)X(:,Position(i)) = Posivization(X(:,Position(i)),Type(i),i)enddisp('正向化的矩阵X=')disp(X)
end%%正向化矩阵标准化
stand_X = X ./ repmat(sum(X .* X) .^ 0.5,n,1)
disp('标准矩阵stand_X = ')
disp(stand_X)%%标准矩阵归一化,计算得分
D_P = sum(((stand_X - repmat(max(stand_X),n,1)).^2),2).^0.5
D_N = sum(((stand_X - repmat(min(stand_X),n,1)).^2),2).^0.5
S = D_    n ./ (D_P + D_N)
%归一化
S = S / sum(S)
%%Posivization.m
function [output] = Posivization(x,type,i)if type == 1 %极小型disp(['第' num2str(i) '列式极小型,正在正向化'])output = Min2Max(x) %调用Min2Max函数来完成正向化disp(['第' num2str(i) '列式极小型正向化完成'])elseif type == 2 %中间型disp(['第' num2str(i) '列式中间型,正在正向化'])best = input('请输入最佳的那一个值')output = Mid2Max(x,best)disp(['第' num2str(i) '列式中间型正向化完成'])elseif type == 3 %区间型disp(['第' num2str(i) '列式区间型,正在正向化'])a = input('请输入区间的下界')b = input('请输入区间的上界')output = Inter2Max(x,a,b)disp(['第' num2str(i) '列式区间型正向化完成'])elsedisp('输入的类型错误,请检查')end
end
%%Min2Max.m
function [output] = Min2Max(x)output = max(x) - x
end
%%MidMax.m
function [output] = Mid2Max(x,best)output = 1 - abs(x - best)/max(abs(x-best))
end
%%Inter2Max.m
function [output] = Inter2Max(x,a,b)M = max(a - min(x),max(x) - b)output = zeros(size(x,1),1)for i = 1 : size(x,1)if x(i) < aoutput(i) = 1 - (a - x(i))/Melseif x(i) > boutput(i) = 1 - (x(i) - b)/Melseoutput(i) = 1;endendend

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

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

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

相关文章

PPT基础:合并形状

目录 合并形状功能详解合并形状使用文字转形状图表转形状 合并形状功能详解 形状&#xff1a;并不局限于ppt内给定的图形&#xff0c;也并不全是图形 &#xff08;1&#xff09;所在位置&#xff1a;选中图形后>>>形状格式>>>最左边 &#xff08;2&#x…

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook&#xff1a; defineProperty var people {age: 19, }; var count20; console.log(people.age) // 参数&#xff1a;对象 属性名字 函数 Object.defineProperty(people, age, {get: function () {console.log(获取值&#xff01;);return count;},// set: …

通信原理板块——纠错编码最小码距与纠错能力的计算

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 对纠错编码的最小码距d0与编码的检…

【C++】:模板的使用

目录 1、泛型编程 2、函数模板 2.1、函数模板概念 2.2、函数模板格式 2.3、函数模板的原理 2.4、函数模板的实例化 2.6、模板参数的匹配原则 3、类模板 3.1、 类模板的定义格式 3.2、 类模板的实例化 4、非类型模板参数 5、模板的特化 5.1、函数模板特化 5.2、类模…

网络运维与网络安全 学习笔记2023.11.19

网络运维与网络安全 学习笔记 第二十天 今日目标 STP工作原理、STP高级配置、MSTP工作原理 MSTP配置案例、MSTP负载均衡 STP工作原理 单点故障 PC之间的互通链路仅仅存在1个 任何一个设备或链路出现问题&#xff0c;PC之间都会无法通信 解决方案 增加冗余/备份设备 增加冗…

Pulumi才是未来基础设施的赢家

文章目录 一、前言二、什么是Pulumi三、Pulumi Vs Terraform3.1、两者渊源3.2、两者区别 四、快速入门Pulumi4.1、Pulumi支持的Provider4.2、使用建议4.3、使用示例&#xff08;TypeScript&#xff09;4.3.1、安装 Pulumi4.3.2、项目管理方式4.3.3、创建新项目&#xff08;Kube…

开发知识点-uniapp微信小程序-开发指南

uniapp uni.chooseLocationgetCurrentPages美团外卖微信小程序开发uniapp-美团外卖微信小程序开发P1 成果展示P2外卖小程序后端&#xff0c;学习给小程序写http接口P3 主界面配置P4 首页组件拆分P13 外卖列表布局筛选组件商家 布局测试数据创建样式 请求商家外卖数据封装请求并…

如何在el-tree懒加载并且包含下级的情况下进行数据回显-02

上一篇文章如何在el-tree懒加载并且包含下级的情况下进行数据回显-01对于el-tree懒加载&#xff0c;包含下级的情况下&#xff0c;对于回显提出两种方案&#xff0c;第一种方案有一些难题无法解决&#xff0c;我们重点来说说第二种方案。 第二种方案是使用这个变量对其是否全选…

JAVA for 循环训练 Pattern

import java.util.Scanner;public class Pattern {public static void main(String[] args) {int[] arr {0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0};Scanner in new Scanner(System.in);System.out.print("请输入n:");int n in.nextInt();in.close();for …

从多表连接视图对比人大金仓和Oracle

KING BASE 信息时代&#xff0c;数据是驱动业务决策和创新的核心资源。然而&#xff0c;随着数据量的不断增加&#xff0c;有效地处理和整合数据的过程变得愈发复杂。这时&#xff0c;多表连接视图悄然走进数据库世界&#xff0c;不仅能够将多个表中的数据整合在一起&#xff0…

memset和bzero性能分析

首先&#xff0c;我们需要了解bzero和memset的功能。bzero是一个非标准函数&#xff0c;用于将一块内存区域的内容设置为0。它的原型如下&#xff1a;void *bzero(void *s, size_t n);其中&#xff0c;s是要设置的内存区域的起始地址&#xff0c;n是要设置的字节数。memset是一…