当前位置: 首页 > news >正文

4步用代码拆解数学建模中的TOPSIS评价决策! ! !

文章目录

  • 步骤一:数据输入
  • 步骤二:正向化
  • 步骤三:[[标准化处理]]
  • 步骤四:[[标准化处理]]
  • 步骤四:打分

步骤一:数据输入

导入数据

X = xlsread('工作簿1.xlsx');

步骤二:正向化

三类指标转换为极大型

1. 极小型:数值越小越好1. 极小型转极大型
			X(:,vec(i)) = Min2Max(X(:,vec(i)));%极小型转为极大型

[[极小MinMax讲解]]
1. 中间型:越接近某个值越好
1. 中间型转极大型

	best = input('请输入中间型的最好值:\n');%用户需要最好的数值temp = X(:,vec(i));X(:,vec(i)) = Mid2Max(X(:,vec(i)), best);

[[中间MidMax讲解]]
1. 区间型:落在某个区间越好
1. 区间型转最大型

		1. arr = input('请输入最佳区间,按照“[a,b]”的形式输入:\n');X(:,vec(i)) = Int2Max(X(:,vec(i)), arr(1), arr(2));

[[区间Int2Max]]

输入:[[TOPSIS正向化输入]]

步骤三:[[标准化处理]]

  1. 获取规模
		disp('***************正在进行标准化...***************');[n,m] = size(X);
  1. [[检查负数元素]]
    1.

% 检查有没有负数元素isNeg = 0;for i = 1 : nfor j = 1 : mif(X(i,j) < 0)isNeg = 1;break;endendendif (isNeg == 0)%没有负数squere_X = (X.*X);sum_X = sum(squere_X,1).^0.5; %按列求和,再开方stand_X = X./repmat(sum_X, n, 1);elsemax_X = max(X,[],1); %按照列找出最大元素min_X = min(X,[],1); %按照列找出最小元素stand_X = X - repmat(min_X,n,1) ./ (repmat(max_X,n,1) - repmat(min_X,n,1));enddisp('标准化完成!')

步骤四:[[标准化处理]]

  1. 获取规模
		disp('***************正在进行标准化...***************');[n,m] = size(X);
  1. [[检查负数元素]]
    1.

% 检查有没有负数元素isNeg = 0;for i = 1 : nfor j = 1 : mif(X(i,j) < 0)isNeg = 1;break;endendendif (isNeg == 0)%没有负数squere_X = (X.*X);sum_X = sum(squere_X,1).^0.5; %按列求和,再开方stand_X = X./repmat(sum_X, n, 1);elsemax_X = max(X,[],1); %按照列找出最大元素min_X = min(X,[],1); %按照列找出最小元素stand_X = X - repmat(min_X,n,1) ./ (repmat(max_X,n,1) - repmat(min_X,n,1));enddisp('标准化完成!')

步骤四:打分

  1. (方法一)用[[距离法]]打分
	1. disp('***************正在用距离法打分...***************');max_x = max(stand_X,[], 1) %按照列找出最大元素min_x = min(stand_X,[], 1) %按照列找出最小元素(stand_X - repmat(min_x,n,1)) ./ (max_x - min_x)%距离法公式

【】的作用: [[max(stand_X,[], 1)]]

  1. (方法二)用[[优劣法]]打分(优先级高)
1. disp('***************正在用优劣解打分...***************');tmp = ones(m);% 这个矩阵很有用,要掌握哦tmp=ones(n):生成n行n列的1

默认权值

w_j = tmp(:,1);%tmp的第一列作为默认权值

是否需要指定权值

is_need_w = input('是否需要指定权值,如需要请输入1,否则请输入0:\n');if (is_need_w == 1)w_j = input('请按列输入各指标的权值:(如[0.1;0.2;0.3;0.4])')end
  • 过程变量求解
%最大向量Z+(成矩阵为了方便相减)
Z_plus = repmat(max_x,n,1);%最小向量Z-
Z_sub = repmat(min_x,n,1);%每个指标相当于最大值的距离D+
D_plus = sum(((stand_X - Z_plus).^2) * w_j, 2).^0.5 %注意是按行求和%每个指标相当于最小值的距离D-
D_sub = sum(((stand_X - Z_sub)).^2 * w_j, 2).^0.5

数学化公式


S = D_sub ./ (D_sub + D_plus)

【大师兄数学建模】第5讲 Topsis上机篇_哔哩哔哩_bilibili14分钟中有例题(很重要)
补充知识点:
![[../../../attchment/Pasted image 20250821222827.png]]

http://www.dtcms.com/a/352809.html

相关文章:

  • 树的常见算法及Java实现
  • LeetCode算法日记 - Day 23: 外观数列、数青蛙
  • 欧洲数字化养殖平台 Herdwatch 借力 Iceberg + StarRocks 提升分析能力
  • 【Matplotlib学习】驾驭画布:Matplotlib 布局方式从入门到精通完全指南
  • 【RabbitWQ】基于 Java 实现轻量级消息队列(二)
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(一)
  • 【重学 MySQL】九十、Linux下MySQL的安装与卸载指南
  • 如何保证DDC楼宇自控系统与IBMS集成管理系统的稳定性和可靠性?
  • 深入解析 Flink Function
  • 【Datawhale之Happy-LLM】Encoder-only模型篇 task05精华~
  • 【雅思021】I’m sorry, I love you Ⅱ
  • 如何使用PyTorch搭建一个基础的神经网络并进行训练?
  • skywalking 原理
  • H20 性能表现之 gpt-oss-120b
  • 软考-系统架构设计师 管理信息系统(MIS)详细讲解
  • React内网开发代理配置详解
  • C++ 力扣 704.二分查找 基础二分查找 题解 每日一题
  • Https之(四)国密GMTLS
  • 【Redis#8】Redis 数据结构 -- Zset 类型
  • 改造thinkphp6的命令行工具和分批次导出大量数据
  • GTCB:引领金融革命,打造数字经济时代标杆
  • 【js】加密库sha.js 严重漏洞速查
  • UTXO 模型及扩展模型
  • 香港数字资产交易市场蓬勃发展,监管与创新并驾齐驱
  • 完整实验命令解析:从集群搭建到负载均衡配置(2)
  • 记录使用ruoyi-flowable开发部署中出现的问题以及解决方法(二)
  • 电脑开机显示器不亮
  • 智能安防:以AI重塑安全新边界
  • 欧盟《人工智能法案》生效一年主要实施进展概览(一)
  • docker-runc not installed on system