【数学建模】灰色关联分析的核心步骤

文章目录

步骤一:读数据

步骤一:读数据

X = xlsread('blind date.xlsx'); % 读取Excel文件中的相亲数据

详细说明:

该命令会自动读取Excel文件"blind date.xlsx"中的所有数值数据

读取的数据会存储在矩阵变量X中

如果Excel文件中包含多个工作表,默认读取第一个工作表的数据

可以指定特定工作表读取,例如:xlsread('blind date.xlsx','Sheet2')

该函数会忽略Excel文件中的文本和格式,只读取数值数据

步骤二:指标正向化

  • 三类指标转换为极大型
  1. 极小型:数值越小越好

  2. 极小型转极大型

    复制代码
     		X(:,vec(i)) = Min2Max(X(:,vec(i)));
     		   %极小型转为极大型

\[极小MinMax讲解\]

  1. 中间型:越接近某个值越好

  2. 中间型转极大型

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

\[中间MidMax讲解\]

  1. 区间型:落在某个区间越好

  2. 区间型转最大型

    复制代码
     	1. arr = input('请输入最佳区间,按照"[a,b]"的形式输入:\n');

    X(:,vec(i)) = Int2Max(X(:,vec(i)), arr(1), arr(2));

\[区间Int2Max\]

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

步骤三:数据标准化

  1. 获取规模

    复制代码
     	disp('***************正在进行标准化...***************');

    [n,m] = size(X);

  2. \[检查负数元素\]

bash 复制代码
% 检查有没有负数元素

isNeg = 0;

for i = 1 : n

	for j = 1 : m

		if(X(i,j) < 0)

		isNeg = 1;

	break;

		end

	end

end

if (isNeg == 0)%没有负数

	squere_X = (X.*X);

	sum_X = sum(squere_X,1).^0.5; %按列求和,再开方

	stand_X = X./repmat(sum_X, n, 1);

else

	max_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));

end

disp('标准化完成!')

步骤三:数据标准化

步骤四:结果处理

  1. 确定虚拟供应商
  • 最大虚拟供应商置于最后一列
  • 使用zeros(m,n-1)创建m行n-1列的0矩阵
  1. 将结果归一化

    res_topsis = S ./ sum(S)

    %xlswrite('res_topsis.xlsx',res_topsis) %写入excel文档

    %disp('已完成打分,请到当前目录下res_topsis.xlsx文件中取出结果!')