灰色关联分析Matlab代码

1.系统分析

%%灰色关联分析用F系统分析例题的讲解

clear,clc

load gdp.mat %导入数据一个64的矩阵I

%不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量并把Excel的数据粘贴过来

%注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内

Mean = mean(gdp);

%求出每一列的均值以供后续的数据预处理

gdp = gdp ./ repmat(Mean,size(gdp,1),1); %size(gdp.1)=6, repmat(Mean,6,1)可以将矩阵进行复制,复制为gdp同等大小,然后使用点除(对应元素相除)

disp('预处理后的矩阵为: ');

disp(gdp)

Y = gdp(:,1); %母序列

X = gdp(,2:end); %子序列

absX0_Xi = abs(X - repmat(Y,1,size(X2)) %计算|X0-X|矩阵

a = min(min(absX0_Xi)) % 计算两级最小差a

b三max(max(absX0_Xi)) %计算两级最大差b

rho= 0.5; %分辨系数取0.5

gamma = (a +rho*b) ./ (absX0_Xi + rho*b) %计算子序列中各个指标与母序列的关联系数

disp(子序列中各个指标的灰色关联度分别为: )

disp(mean(gamma))

2.综合评价

%%灰色关联分析用于综合评价模型例题的讲解

clear;clc;

load data water quality.mat

%不会导入数据的同学可以有有第二讲topsis模型, 我们也可以自己在工作区新建变量,并把Excel的数据粘贴过米

%注意Matlab的当前文件央- -定要切换到有数据文件的这个文件夹内

%%判断是否需要正向化

[n,m] = size(X);

disp(['共有' num2str(n) '个评价对象,' num2str(m) '个评价指标'])

Judge = input(['这' num2str(m) '个指标足否需要经过正向化处理,需要请输入1。不需要输入0: '): %1

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(Positin,2) %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数

X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));

% Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数

%第一个参数是要正向化处理的那一列向量X(:,Position(i)),回顾上一讲的知识,X(,:n)表示取第n列的全部元素

%第二个参数只对应的这一列的指标类型(1: 极小型,2: 中间型,3: 区间型)

%第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列

%该函数有一个返回值,它返回止向化之后的指标,我们可以将其白按赋值给我们凉始要处理的那一列向量

end

disp('正向化后的矩阵X = ')

disp(X)

end

%%对正向化后的矩阵进行预处理

Mean = mean(X): %求出每列的均值以供后续的数据预处理

z = X ./ repmat(Mean,size(X.1)1);

disp('预处理后的矩阵为: '); disp(Z)

%%构造母序列和子序列

Y = max(Z,[],2); %母序列为虚拟的,用每一行的最大值构成的列向量表示母序列

X= Z; %子序列就足预处理后的数据矩阵

%%计算得分

absX0_Xi = abs(X - repmat(Y,1,size(X,2)) % i计算|X0-Xi|矩阵

a = min(min(absX0_Xi) % 计算两级最小差a

b = max(max(absX0_Xi)) %计算两级最大差b

rho = 0.5; %分析系数取0.5

gamma = (a+ rho*b) ./ (absX0_Xi + rho*b) %计算子序列中各个指标与母序列的关联系数

weight = mean(gamma) / sum(mean(gamma); %利用子序列中各个指标的灰色关联度计算权出

score = sum(X , repmatweight,size(X,1),1),2); % 末归一化的得分

stand_S = score / sum(score); % 归一化后的得分

[sorted_S,index] = sort(stand_S , 'descend') %进行排序

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值