【数学建模】灰色关联分析的核心步骤
文章目录
- 步骤一:读数据
- 步骤二:指标正向化
- 步骤三:数据标准化
- 步骤三:数据标准化
- 步骤四:结果处理
步骤一:读数据
步骤一:读数据
X = xlsread(‘blind date.xlsx’); % 读取Excel文件中的相亲数据
详细说明:
该命令会自动读取Excel文件"blind date.xlsx"中的所有数值数据
读取的数据会存储在矩阵变量X中
如果Excel文件中包含多个工作表,默认读取第一个工作表的数据
可以指定特定工作表读取,例如:xlsread(‘blind date.xlsx’,‘Sheet2’)
该函数会忽略Excel文件中的文本和格式,只读取数值数据
步骤二:指标正向化
- 三类指标转换为极大型
- 极小型:数值越小越好
- 极小型转极大型
X(:,vec(i)) = Min2Max(X(:,vec(i)));%极小型转为极大型
[[极小MinMax讲解]]
2. 中间型:越接近某个值越好
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]]
输入:[[正向化输入]]
步骤三:数据标准化
- 获取规模
disp('***************正在进行标准化...***************');[n,m] = size(X);
- [[检查负数元素]]
% 检查有没有负数元素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('标准化完成!')
步骤三:数据标准化
步骤四:结果处理
- 确定虚拟供应商
- 最大虚拟供应商置于最后一列
- 使用zeros(m,n-1)创建m行n-1列的0矩阵
- 将结果归一化
res_topsis = S ./ sum(S)%xlswrite('res_topsis.xlsx',res_topsis) %写入excel文档%disp('已完成打分,请到当前目录下res_topsis.xlsx文件中取出结果!')