熵权法用matlab怎么,熵权法求权重原理详细步骤附matlab代码
clc;clear;
% 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个样本, 每列对应一个指标
% s返回各行得分, w返回各列权重
load('data_water_quality.mat')%载入数据
x=X; %X为工作表中的样本数据
%% 数据的正向化处理
[n,m]=size(x); % X中有n个样本, m个指标
disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标'])
Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0: ']);
if Judge == 1
Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]
disp('请输入需要处理的这些列的指标类型(1:极小型, 2:中间型, 3:区间型) ')
Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]: '); %[2,1,3]
% 注意,Position和Type是两个同维度的行向量
for i = 1 : size(Position,2) %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数
X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
% Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数
% 第一个参数是要正向化处理的那一列向量 B(:,Position(i)) X(:,n)表示取第n列的全部元素
% 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)
% 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
% 该函数有一个返回值,它返回正向化之后的指标,我们可以将其直接赋值给我们原始要处理的那一列向量
end
disp('正向化后的矩阵 X = ')
disp(X)
end
%% 数据的归一化处理
% Matlab2010b,2011a,b版本都有bug,需如下处理. 其它版本直接用[X,ps]=mapminmax(x',0,1);即可
[B,ps]=mapminmax(X');
ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
B=mapminmax(X',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
B=B'; % B为归一化后的数据
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=B(i,j)/sum(X(:,j));
end
end
%% 计算第j个指标的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d./sum(d); % 求权值w
s=w*p'; % 求综合得分[\code]
disp("信息冗余度为");disp(d)
disp("各样本综合得分s为");disp(s);
disp("各指标权重w为");disp(w);
正向化函数代码
(1)Positivization
% function [输出变量] = 函数名称(输入变量)
% 函数的中间部分都是函数体
% 函数的最后要用end结尾
% 输出变量和输入变量可以有多个,用逗号隔开
% function [a,b,c]=test(d,e,f)
% a=d+e;
% b=e+f;
% c=f+d;
% end
% 自定义的函数要单独放在一个m文件中,不可以直接放在主函数里面(和其他大多数语言不同)
function [posit_x] = Positivization(x,type,i)
% 输入变量有三个:
% x:需要正向化处理的指标对应的原始列向量
% type: 指标的类型(1:极小型, 2:中间型, 3:区间型)
% i: 正在处理的是原始矩阵中的哪一列
% 输出变量posit_x表示:正向化后的列向量
if type == 1 %极小型
disp(['第' num2str(i) '列是极小型,正在正向化'] )
posit_x = Min2Max(x); %调用Min2Max函数来正向化
disp(['第' num2str(i) '列极小型正向化处理完成'] )
disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
elseif type == 2 %中间型
disp(['第' num2str(i) '列是中间型'] )
best = input('请输入最佳的那一个值: ');
posit_x = Mid2Max(x,best);
disp(['第' num2str(i) '列中间型正向化处理完成'] )
disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
elseif type == 3 %区间型
disp(['第' num2str(i) '列是区间型'] )
a = input('请输入区间的下界: ');
b = input('请输入区间的上界: ');
posit_x = Inter2Max(x,a,b);
disp(['第' num2str(i) '列区间型正向化处理完成'] )
disp('~~~~~~~~~~~~~~~~~~~~分界线~~~~~~~~~~~~~~~~~~~~')
else
disp('没有这种类型的指标,请检查Type向量中是否有除了1、2、3之外的其他值')
end
end
(2)Inter2Max
function [posit_x] = Inter2Max(x,a,b)
r_x = size(x,1); % row of x
M = max([a-min(x),max(x)-b]);
posit_x = zeros(r_x,1); %zeros函数用法: zeros(3) zeros(3,1) ones(3)
% 初始化posit_x全为0 初始化的目的是节省处理时间
for i = 1: r_x
if x(i) < a
posit_x(i) = 1-(a-x(i))/M;
elseif x(i) > b
posit_x(i) = 1-(x(i)-b)/M;
else
posit_x(i) = 1;
end
end
end
(3)Mid2Max
function [posit_x] = Mid2Max(x,best)
M = max(abs(x-best));
posit_x = 1 - abs(x-best) / M;
end
(4)Min2Max
function [posit_x] = Min2Max(x)
posit_x = max(x) - x;
%posit_x = 1 ./ x; %如果x全部都大于0,也可以这样正向化
end
运行结果如下图所示:
熵权法用matlab怎么,熵权法求权重原理详细步骤附matlab代码相关推荐
- matlab写的单纯形法二阶段法 大m法,线性规划中的单纯形法与内点法(原理、步骤以及matlab实现)(二)...
在线性规划中的单纯形法与内点法(原理.步骤以及matlab实现)(一)中,我们讨论了单纯形法的原理和普通单纯形法的应用,本文接着讨论大M法.两阶段法和对偶单纯形法 2.2 Big M Method ( ...
- 【模糊综合评价的运用】——《基于模糊评价法的高校户外公共活动空间研究》论文笔记(内附MATLAB程序)
基于模糊评价法的高校户外公共活动空间研究 - 中国知网 (cnki.net) [模糊综合评价的运用]--<基于模糊评价法的高校户外公共活动空间研究>论文笔记(内附MATLAB程序) 文章目 ...
- matlab、carsim、prescan联合仿真从零开始详细步骤
matlab.carsim.prescan联合仿真详细步骤 在matlab.carsim.prescan联合仿真中,prescan提供测试场景和传感器模型,但prescan也提供车辆动力学2D和3D模 ...
- 【无人机编队】基于动态窗口法实现的无人机编队目标分配及路径规划问题研究附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信.
- MATLAB实现睡眠脑电分期--sleep-EDF(详细步骤和代码)
把毕设的部分内容写一写,复习一下,并且也给有需要的人一些参考(文章最下面还有一些处理好的数据可供下载使用) 目录 0.项目简介 1.数据库和数据导入 数据库简介 AASM标准 2.信号去噪 3.计算信 ...
- matlab程序4名商人,商人们怎样安全过河附MATLAB程序完整.doc
商人们怎样安全过河附MATLAB程序完整.doc *** 商人们怎样安全过河 随从们密约, 在河的任一岸, 一旦随从的人数比商人多, 就杀人越货. 但是乘船渡河的方案由商人决定. 商人们怎样才能安全过 ...
- 基于MATLAB的拼图游戏设计(图文详解,附完整代码)
基于MATLAB的拼图游戏设计 内容摘要:MATL ...
- matlab仿真点目标,sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx
sar合成孔径雷达图像点目标仿真报告(附matlab代码).docx SAR图像点目标仿真报告徐一凡1SAR原理简介合成孔径雷达(SyntheticApertureRadar,简称SAR)是一种高分辨 ...
- 基于MATLAB的二维与三维插值拟合运算(附完整代码)
· 一. 一维插值 interp1函数在上个博客中(如下链接)已经更新了,此处再补充两个相关例题. 基于MATLAB的数据插值运算:Lagrange与Hermite算法(附完整代码)_唠嗑!的博客-C ...
- matlab 滤波窗函数,FIR滤波器窗函数设计法详细步骤以及Matlab代码
采用窗函数法设计理想低通,高通滤波器,参考北京交通大学陈后金主编的[数字信号处理]5.2节 窗函数法设计线性相位FIR数字滤波器P164,和P188. 设计步骤如下: 1) 确定滤波器类型,不同的FI ...
最新文章
- 数据分析之全国热门景点分析
- dubbo-go 白话文 | 从零搭建 dubbogo 和 dubbo 的简单用例
- rx ajax,ajax_RxJS 中文文档_w3cschool
- PowerBI从Exchange跟踪日志中分析数据和KPI展现
- vc6.0 debug 比 release 快??_快速入门快应用——quickapp构建与发布
- 大学计算机二级的试题,大学计算机二级考试试题及其答案_..doc
- Qt之多线程编程初识
- python怎么读取excel-Python|读、写Excel文件(三种模块三种方式)
- JS调用摄像头屏幕截图
- uni-ap开发开发小程序 怎么使用阿里云播放器
- 基于SSH的在线问卷调查系统的设计与实现
- 在 vmware ESXi上安装mac系统虚拟机
- 电脑游戏业编年史之十二──叛逆
- 大数据学习路线(包含全套视频教程)
- java布局FlowLayout
- 3D游戏建模师的工资和发展前景到底怎么样?
- 【福利季】《手机历史漫谈》
- pandas中根据列的值选取多行数据
- 遭遇PegeFile.pif,IEXPLORE32.Sys,WinSys64.Sys,NewTemp.dll,avpdj.dll等1
- 思维导图在项目管理中的应用
热门文章
- python爬虫之数据提取Xpath(爬取起点中文网案例)
- 码支付系统源码免挂版_免挂码支付系统源码,码支付系统源码,码支付源码全新版
- 初级学电脑计算机的入门知识,电脑基础知识入门学习(小白学好电脑从哪里开始)...
- Bi系统 :poli部署
- 课设题目:哈希表实现电话号码查找系统
- 年金计算机在线,年金终值复利计算器在线(企业年金计算方法)
- 太牛X了,大四学生自创文言文编程语言,Hello World竟然这样写!?
- springboot内置浏览器_SpringBoot启动后启动内嵌浏览器的方法
- 《JavaScript权威指南第7版》第4章 表达式和运算符
- c语言各种头文件函数解释,c语言头文件及其函数