关联矩阵古林法的matlab代码,[转载][原创]灰色关联分析及Matlab程序实现

灰色系统理论由我国著名学者邓聚龙教授于1982提出。灰色关联分析是灰色系统理论的一个分支,应用灰色关联分析方法对受多种因素影响的事物和现象从整体观念出发进行综合评价是一个被广为接受的方法。

一、灰色关联分析法的建模过程

灰色关联分析法的基本思想是根据各比较数列集构成的曲线族与参考数列构成的曲线之间的几何相似程度来确定比较数列集与参考数列之间的关联度,比较数列构成的曲线与参考数列构成的曲线的儿何形状越相似,其关联度越大。

参考数据列应该是一个理想的比较标准,可以以各指标的最优值 (或最劣值)构成参考数据列,也可根据评价目的选择其它参照值。例如,在某多属性综合评价问题中,可将各属性的最优值组成一个参考数列,各个评价方案(对象)构成比较数列集,若关联度越大,该方案(对象)越优,反之越劣。利用灰色关联分析进行综合评价的步骤如下。

1、根据评价目的确定评价指标体系,收集评价数据,确定原始评价矩阵及参考数列。

a4c26d1e5885305701be709a3d33442f.png

2、对指标数据进行标准化处理,并记标准化处理后的数据序列为:

a4c26d1e5885305701be709a3d33442f.png

对于不同的指标类型(如正向型、逆向型、最优值为给定区间的指标,等等),应采取不同的标准化处理策略。常用的几种标准化处理的方法见http://blog.sina.com.cn/s/blog_b3509cfd0101bsky.html,这里不赘述。

3、对标准化处理的数据序列,逐个计算每个被评价对象指标序列(比较序列)与参考数列对应元素的绝对差值,即:

a4c26d1e5885305701be709a3d33442f.png

4、确定a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

5、计算每个比较序列与参考数列对应元素的关联系数:

a4c26d1e5885305701be709a3d33442f.png

6、计算关联度。

a4c26d1e5885305701be709a3d33442f.png

7、依据各观察对象的关联度,得出综合评价结果。如果参考数列由各指标的最优值组成,则关联度越大,该评价对象与理想的比较标准越相似,评价结果越优,反之越劣。

二、灰色关联分析法的Matlab程序实现

首先声明:不失一般性,以下程序假设所有指标均为正向型指标(越大越好)进行标准化处理,在实际应用中需根据具体情况对不同类型的指标进行标准化处理。另外,这里采用熵权法求客观权重,详见:http://blog.sina.com.cn/s/blog_b3509cfd0101bm0f.html。另外,注意程序注释。

--------------------------------------------以下是程序代码-------------------------------------

function GreyRelationDegree(stats) %%

stats是一个m×n的评价矩阵,即m个评价对象、n个评价指标

%% [重要]设置参考数列,即各指标的理想最优值组成的行向量,长度必需要与stats列数一致

optArray=max(stats,[],1);

% 这里设置假设所有指标均为正向型指标,各指标的最大值组成参考数列,在实际应用中根据具体情况进行设置

%% 原始评价矩阵及样本序号

[r,c]=size(stats);

% stats的行数和列数,即评价对象的个数及评价指标的个数

samNo=1:r;

% 样本序号

%% 数据规范化处理,将各指标数据与参考数列一起规范化到0-1之间

% 这里假设全为正向指标,即假设全部指标值越大越好,在实际应用中根据具体情况分别需对不同类型的指标数据进行标准化处理,然后再这里修改相应的代码

stdMatrix=zeros(r+1,c); % 给标准化矩阵分配空间,第一行为参考数列的标准化值,第二行至最后一行为原始评价矩阵的标准化值

optArryAndStat=[optArray;stats];

maxOfCols=max(optArryAndStat);

% 包括参考数列在内的各列的最大值

minOfCols=min(optArryAndStat);

% 包括参考数列在内的各列的最小值

for j=1:c

for i=1:r+1

stdMatrix(i,j)=(optArryAndStat(i,j)-minOfCols(j))./(maxOfCols(j)-minOfCols(j));

% 计算标准化指标值

end

end

%% 计算关联系数

absValue=zeros(r,c);

% 给绝对差值序列分配空间

R_0 = stdMatrix(1,:); % 标准化处理后的参考数列

for i=2:r+1

absValue(i-1,:)=abs(stdMatrix(i,:)-R_0); % 绝对差值序列计算

end

minAbsValueOfCols=min(absValue,[],1);

% absValue每一列的最小值

maxAbsValueOfCols=max(absValue,[],1);

% absValue每一列的最大值

minAbsValue=min(minAbsValueOfCols);

% absValue的最小值

maxAbsValue=max(maxAbsValueOfCols);

% absValue的最大值

defCoeff=0.5;

% 设置分辨系数为0.5

relCoeff=(minAbsValue+defCoeff*maxAbsValue)./(absValue+defCoeff*maxAbsValue);

% 关联系数计算

%% 计算关联度

% 在实际应用中可采用不同的方法确定权重,然后再这里修改相应的代码

weights=EntropyWeight(stdMatrix(2:r,:)); % 权重

P=zeros(r,1);

% 给关联度序列分配空间

for i=1:r

for j=1:c

P(i,1)=relCoeff(i,j)*weights(j); % 关联度计算

end

end

%% 权重可视化

[sortW,IXW]=sort(weights,'descend');

% 权重降序排序,IXW确保对应的指标名称一致

indexes={};

for i=1:c

indexes(i)={strcat('指标',num2str(i))}; % 指标名称为“指标1”、指标“2”……

end

sortIndex=indexes(IXW);

% 排序后与权重对应的指标名称

figure;

subplot(1,2,1);

bar(weights);

xlim([0 c+1]);

% 设置x轴范围

xlabel('指标名称','FontSize',12,'FontWeight','bold');

set(gca,'xtick',1:c);

set(gca,'XTickLabel',indexes,'FontWeight','light');

ylabel('权重','FontSize',12,'FontWeight','bold');

set(gca,'YGrid','on');

for i=1:c

text(i-0.35,weights(i)+0.005,sprintf('%.3f',weights(i)));

end

title('指标权重可视化');

box off;

subplot(1,2,2);

bar(sortW);

xlim([0 c+1]);

% 设置x轴范围

xlabel('指标名称','FontSize',12,'FontWeight','bold');

set(gca,'xtick',1:c);

set(gca,'XTickLabel',sortIndex,'FontWeight','light');

ylabel('权重','FontSize',12,'FontWeight','bold');

set(gca,'YGrid','on');

for i=1:c

text(i-0.35,sortW(i)+0.005,sprintf('%.3f',sortW(i)));

end

title('指标权重可视化(降序排列)');

box off;

%% 关联度分析结果展示

[sortP,IX]=sort(P,'descend'); % 关联度降序排序,IX确保对应的样本序号一致

sortSamNo=samNo(IX);

% 排序后与关联度对应的样本序号

figure;

subplot(2,1,1);

plot(P,'--rs',...

'LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','g',...

'MarkerSize',10);

xlim([1 r]);

% 设置x轴范围

xlabel('样本序号','FontSize',12,'FontWeight','bold');

set(gca,'xtick',1:r);

set(gca,'XTickLabel',samNo,'FontWeight','light');

ylabel('关联度','FontSize',12,'FontWeight','bold');

title('XXX事物灰色关联度综合评价结果');

grid on;

subplot(2,1,2);

plot(sortP,'--rs',...

'LineWidth',2,...

'MarkerEdgeColor','k',...

'MarkerFaceColor','g',...

'MarkerSize',10);

xlim([1 r]);

% 设置x轴范围

xlabel('样本序号','FontSize',10,'FontWeight','bold');

set(gca,'xtick',1:r);

set(gca,'XTickLabel',sortSamNo,'FontWeight','light');

ylabel('关联度','FontSize',10,'FontWeight','bold');

title('XXX事物灰色关联度综合评价结果(降序排列)');

grid on;

hold off;

end

三、程序演示

1、随机生成一个20×5的评价矩阵,即20个评价对象、5个评价指标,matlab命令窗口中输入:test=80+12*randn(20,8);

2、调用灰色关联度函数,命令窗口中输入:GreyRelationDegree(test)

3、程序运行结果如下:

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

四、参考文献

[1] 刘思峰,党耀国,等. 灰色系统理论及其应用(第5版) [M]. 北京:科学出版社:2010.

[2] 穆瑞,张家泰. 基于灰色关联分析的层次综合评价[J]. 系统工程理论与实践,2008,28(10):125-130.

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

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

相关文章

C语言排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)

参考:C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示 作者:一只青木呀 发布时间: 2020-09-09 20:18:43 网址:https://blog.csdn.net/we…

FIFO分枝_限界算法

问题: 检索4-皇后问题的状态空间树如下图的基本过程。(4-皇后问题解空间的树结构,结点按深度优先检索编号) 如果按序扩展这些结点,则下一个E-结点就是结点2。扩展结点2后生成结点3,8和13。利用限界函数(同行…

C语言中__attribute__ ((at())绝对定位的应用

__attribute__( at(绝对地址) )的作用分两个,一个是绝对定位到Flash,另个一是绝对定位到RAM。 1、定位到flash中,一般用于固化的信息,如出厂设置的参数,上位机配置的参数,ID卡的ID号,flash标记等…

php重写地址,php url地址重写

地址重写:urlRewrite: 就是: 1. 将php的地址index.php不写只写Action模块和function方法, 或者 2. php地址转变成html地址, 就是一种假的html,所以叫伪静态.(除了伪静态外, 还有真的静态化, 就是真的将原来php的页面静态为html, 然后客户请求的就是这个html)伪静态: 就是只是…

智能家居APP使用指南

参考:智能家居APP使用指南 作者:图触靓 发布时间: 2021-04-14 14:11:40 网址:https://blog.csdn.net/bhbhhyg/article/details/115694774 目录一、如何修改IP,端口号,以及发送的指令二、如何增加或者删除一…

python zlib字符串压缩

2019独角兽企业重金招聘Python工程师标准>>> 在做网络程序时,可以对字符串进行压缩来节省带宽 项目中用到 {"compress": <压缩标记>, "result":[[设备类型.设备ID, 设备名称, 单位ID, 设备功能], ...]} 只做了简单的压缩解压缩,也没crc3…

Laravel的初始化安装

Laravel的初始化安装 composer 安装 composer中国镜像laravel文档 curl -sS https://getcomposer.org/installer | php # 修改 composer 的全局配置文件,修改为中国源 composer config -g repo.packagist composer https://packagist.phpcomposer.com 安装 Laravel Laravel 利用…

cstring和string的区别

<cstring>是包含一些C字符串的操作函数&#xff0c;包含一些常用的C字符串处理函数&#xff0c;比如strcmp、strlen、strcpy之类的函数与原来的<string.h>对应。但头文件的内容在名字空间std 中。 <string>包含的是C的string类。 下面是C头文件的现状&#x…

linux做一个客户端与WemosD1作为服务器的无线通信(局域网通信)

参考&#xff1a;linux做一个客户端与WemosD1作为服务器的无线通信&#xff08;局域网通信&#xff09; 作者&#xff1a;枕上 发布时间&#xff1a;2021-07-19 23:33:44 网址&#xff1a;https://blog.csdn.net/jinchi_boke/article/details/118916896?utm_sourceapp&app…

C语言学习书籍推荐《C语言程序设计 现代方法(第2版)》下载

下载地址&#xff1a;点我 C语言仍然是计算机领域的通用语言之一&#xff0c;但现在的C语言已经和当初的时候大不相同了。本书主要的一个目的就是通过一种“现代方法”来介绍C语言&#xff0c;书中强调标准C&#xff0c;强调软件工程&#xff0c;不再强调“手工优化”。这一版中…

matlab入门之旅,MATLAB 入门之旅学习笔记

MATLAB 入门之旅学习笔记https://matlabacademy.mathworks.com/R2019a/cn/portal.html?coursegettingstarted1.概述2.1输入命令1. 您可以通过在命令行窗口中MATLAB 提示符 (>>) 后输入命令&#xff0c;然后按Enter 键来执行命令。2. 除非另有指定&#xff0c;否则 MATLA…

wemosD1_WIFI模块 与 arduino

参考&#xff1a;wemosD1_WIFI模块 与 arduino 作者&#xff1a;枕上 发布时间&#xff1a;2021-07-19 21:49:55 网址&#xff1a;https://blog.csdn.net/jinchi_boke/article/details/118915142 目录作为设备接入wifi&#xff08;STA模式&#xff09;架设Wemos为ftp服务器ardu…

本机在合成图片经常提示内存不足

转载于:https://www.cnblogs.com/niyl/p/9988614.html

tp5 php7 报500,记一次TP单元测试报500错误的问题

记一次TP单元测试报500错误的问题一直听说好的单元测试能提高代码质量&#xff0c;昨天终于在下定决心弄懂单元测试&#xff0c;但第一步就把我干趴下了&#xff0c;我的问题在下面开始都没有什么问题&#xff0c;tp5单元测试的手册就那一点&#xff0c;通过看云上一位仁兄写的…

# 和 ## 的区别

参考&#xff1a;# 和 ## 的区别 作者&#xff1a;枕上 发布时间&#xff1a;2021-07-25 08:23:40 网址&#xff1a;https://blog.csdn.net/jinchi_boke/article/details/119076280?utm_sourceapp&app_version4.11.0&codeapp_1562916241&uLinkIdusr1mkqgl919blen …

H3C配置

H3C交换机配置 1.查看设备版本,确定是否需要升级 <H3C>dis version 2.vlan及接口配置 注&#xff1a;正式配置前可以查看下现有的VLAN。命令如下 <H3C>dis vlan <H3C>sys                          //进入系统视图模式 [H3C]vlan …

创建自己的共用js库

直至昨晚为止&#xff0c;学习了一个多月的MVC与jQuery&#xff0c;从所做的练习中&#xff0c;发觉jQuery的代码也有跟C#语言一样可以重构&#xff0c;多页面有相同使用的方法函数&#xff0c;均可以放置于一个单独立的js文件或是自定义的js库中。在使用时&#xff0c;引用此库…

php封装公共方法,TP框架下封装公共函数详解

本篇文章讲述了如何在TP框架下封装公共函数&#xff0c;大家对TP框架下封装公共函数不了解的话或者对TP框架下封装公共函数感兴趣的话那么我们就一起来看看本篇文章吧&#xff0c; 好了废话少说进入正题吧当我们需要在控制层调用相同的封装函数时&#xff0c;写多次相同的函数&…

多级指针和静动态内存的跨函数访问

参考&#xff1a;多级指针&#xff08;静动态内存的跨函数访问&#xff09; 作者&#xff1a;枕上 发布时间&#xff1a;2021-07-15 00:27:17 网址&#xff1a;https://blog.csdn.net/jinchi_boke/article/details/118724993?spm1001.2014.3001.5501 目录多指针初认识&#xf…

视频专辑:JAVA语言入门视频教程

为什么80%的码农都做不了架构师&#xff1f;>>> 专辑&#xff1a;JAVA语言入门视频教程 简介:该视频专辑是java的入门教程&#xff0c;适合初学者学习java&#xff0c;讲的也非常容易懂&#xff0c;希望能给想学习java的朋友一些帮助。 1 JAVASE 01 简介 2013-10…