灰色系统理论在数学建模中的实战应用:关联度分析与GM(1,1)预测 📅 发布时间:2026/8/28 5:30:41 👁 浏览次数: 1. 项目概述从“小白”到“灰”的第一次数模实战刚上大一面对“数学建模”这四个字你是不是既兴奋又有点发怵兴奋的是这听起来就是那种能写在简历上、证明自己能力的硬核比赛发怵的是感觉它需要高深的数学、编程和论文写作能力自己好像啥都不会。别慌我当年也是这么过来的。今天我就以一个过来人的身份跟你聊聊如何用“灰色系统理论”这把看似简单却威力不小的钥匙敲开数模比赛的大门特别是针对那些数据量少、信息不完全的题目。这次我们聚焦的核心就是灰色关联度分析和灰色预测模型并且会附上可以直接运行的Matlab代码。你不用被“灰色”吓到它不是什么玄学而是一套处理“小样本”、“贫信息”问题的实用数学方法特别适合我们这些数据积累不多、但又需要做出分析和预测的新手。简单来说灰色关联度帮你从一堆影响因素里快速找出谁跟结果“关系最铁”而灰色预测则能在你只有寥寥几个数据点的情况下预测未来的趋势。这两个工具组合起来足以让你应对很多评价类、预测类的赛题。我会把原理讲得通俗易懂把操作步骤拆解得明明白白你只需要一台安装了Matlab的电脑跟着做就能复现出一个完整的数模解题流程。这篇文章就是为你这样的大一同学准备的“实战手册”我们不讲空泛的理论只讲怎么用、为什么这么用、以及怎么避开我当年踩过的坑。2. 灰色系统理论为什么是数模小白的“首选武器”在深入代码之前我们得先搞清楚为什么我强烈推荐你在第一次参加数模比赛时优先考虑灰色系统理论。这关乎到策略选择能让你在有限的时间里把劲儿使在刀刃上。2.1 核心优势以“少”胜“多”以“简”驭“繁”数模赛题五花八门但很多题目给的数据并不完美。你可能只拿到某地区过去5年的GDP数据就要预测未来3年的趋势或者只有十几个样本却要分析七八个因素对某个结果的影响。这时候传统统计学方法比如多元回归、时间序列分析往往会“巧妇难为无米之炊”因为它们通常要求大样本且数据分布规律。而灰色系统理论正是为这种“小样本”、“贫信息”的不确定性系统量身定做的。它的核心思想很巧妙承认信息不足但不放弃研究。通过对已知的、有限的“白色信息”进行生成、处理挖掘出数据背后隐藏的规律从而将系统从“灰”变“白”。对你来说这意味着数据要求低不需要庞大的样本量通常有4个以上数据就能建模。计算相对简单核心是累加生成和微分方程计算过程规整易于编程实现。适用性广无论数据是否有典型分布是否平稳都可以尝试。结果直观关联度结果是一个介于0和1之间的数预测结果是一条平滑曲线非常容易理解和解释。注意灰色模型不是万能的。它的强项是短期预测和趋势分析。对于长期预测、或者数据本身波动非常剧烈且无规律的情况精度会下降。但在数模比赛中能快速建立一个逻辑自洽、结果合理的模型远比追求理论上最优但实现复杂的模型要实际得多。2.2 两大核心工具关联度与预测灰色系统理论包含很多模型但对于入门级数模比赛掌握以下两个就足以解决一大类问题灰色关联度分析 (Grey Relational Analysis)它是什么一种衡量因素间关联程度的方法。比如分析影响房价的因素地理位置、学区、面积、楼层...关联度分析可以量化每个因素与房价的“紧密程度”排出优先级。它解决什么问题多因素影响下的主要矛盾识别、系统行为因子的排序、指标体系的筛选。常用于评价类、诊断类赛题。灰色预测模型 (Grey Prediction Model)它是什么主要是GM(1,1)模型即一阶一元灰色模型。它通过累加原始数据构造指数增长规律再进行预测。它解决什么问题数据量少的时序预测问题。比如预测下个月的销量、明年的客流量、未来几年的能源需求等。这两个工具经常联用先用关联度分析找出关键影响因子再对这些关键因子或它们影响的指标进行灰色预测。接下来我们就进入实战环节。3. 灰色关联度分析一步步找出“关键先生”理论懂了我们直接上手。假设我们有一个赛题分析某城市空气质量指数AQI与多个潜在因素如工业排放量、汽车保有量、绿化面积、平均风速之间的关联关系以确定治理重点。3.1 数据准备与初始化首先我们需要收集数据。假设我们收集了该城市连续6年的数据构成一个5行5个指标6列6年的矩阵。在Matlab中我们这样初始化% 原始数据矩阵每行代表一个指标序列每列代表一个年份 % 行1AQI (参考序列我们想知道其他因素和它的关系) % 行2工业排放量万吨 % 行3汽车保有量万辆 % 行4绿化面积平方公里 % 行5平均风速米/秒 original_data [ 78, 75, 80, 85, 82, 79; % AQI 120, 125, 130, 135, 140, 138; % 工业排放 90, 95, 100, 110, 115, 120; % 汽车保有量 350, 355, 360, 365, 370, 375; % 绿化面积 2.5, 2.3, 2.4, 2.2, 2.6, 2.5; % 平均风速 ];这里第一行AQI被称为“参考序列”母序列其他行被称为“比较序列”子序列。我们的目标是计算第2到第5行每个序列与第一行的关联度。3.2 核心计算步骤详解与Matlab实现灰色关联度分析的计算有标准的四步法。我将其封装成一个Matlab函数grey_relation并逐行解释。function [relation_degree, sorted_idx] grey_relation(data, ref_idx, rho) % 灰色关联度分析函数 % 输入 % data: m*n 矩阵m个指标n个时间点/样本 % ref_idx: 参考序列所在的行索引 % rho: 分辨系数通常取0.5范围(0,1)越小区分度越大 % 输出 % relation_degree: 各比较序列与参考序列的关联度 % sorted_idx: 关联度从大到小排序的序列索引 [m, n] size(data); if ref_idx m || ref_idx 1 error(参考序列索引超出范围); end % 1. 无量纲化处理均值化法 % 由于各指标量纲和数量级不同必须消除其影响。 mean_val mean(data, 2); % 计算每个指标在所有时间点的均值 normalized_data data ./ repmat(mean_val, 1, n); % 提取参考序列和比较序列 ref_seq normalized_data(ref_idx, :); % 参考序列 comp_seq normalized_data; % 先复制全部 comp_seq(ref_idx, :) []; % 删除参考序列行得到纯比较序列矩阵 % 2. 计算差序列 % 求各比较序列与参考序列在每个时刻的绝对差 diff_matrix abs(comp_seq - ref_seq); % 3. 计算关联系数 % 找出全局最大差和最小差 min_diff min(min(diff_matrix)); max_diff max(max(diff_matrix)); % 关联系数公式: epsilon_i(k) (min_diff rho * max_diff) / (diff_i(k) rho * max_diff) % rho是分辨系数我一般取0.5这是一个经验值。rho越小关联系数间的差异越明显。 if nargin 3 rho 0.5; % 默认分辨系数 end correlation_coef (min_diff rho * max_diff) ./ (diff_matrix rho * max_diff); % 4. 计算关联度 % 关联度是关联系数在整个时间序列上的平均值 relation_degree mean(correlation_coeff, 2); % 对每一行每个比较序列求平均 % 对关联度进行排序方便查看最重要的因素 [~, sorted_idx] sort(relation_degree, descend); % 打印结果 fprintf(灰色关联度分析结果\n); fprintf(分辨系数 rho %.2f\n, rho); for i 1:length(relation_degree) orig_idx i; % 注意这里i是在comp_seq中的索引 fprintf(比较序列 %d (原数据行%d) 与参考序列的关联度: %.4f\n, ... i, find_original_index(orig_idx, ref_idx), relation_degree(i)); end fprintf(\n关联度排序从高到低\n); for i 1:length(sorted_idx) fprintf(第%d位: 比较序列 %d (原数据行%d)关联度 %.4f\n, ... i, sorted_idx(i), find_original_index(sorted_idx(i), ref_idx), ... relation_degree(sorted_idx(i))); end end % 一个小辅助函数用于映射回原始数据行的索引跳过参考序列行 function orig_idx find_original_index(comp_idx, ref_idx) if comp_idx ref_idx orig_idx comp_idx; else orig_idx comp_idx 1; end end关键步骤解读与注意事项无量纲化这是至关重要的一步。工业排放量是百万吨级风速是个位数直接计算差值没有意义。我们采用“均值化法”即每个序列除以自身的平均值。这能保留数据间的比例关系是灰色关联分析中最常用的方法之一。差序列与极值计算绝对差是为了衡量每个时刻两个序列的“距离”。全局最小差通常是0或接近0全局最大差决定了计算的尺度。分辨系数 ρ这是一个经验参数ρ 越小关联系数之间的差异越明显区分能力越强但稳定性可能稍差。绝大多数文献和实际应用中都取0.5这是一个平衡了区分度和稳定性的值。除非赛题有特殊要求否则不要轻易改动它。关联系数这个公式的本质是进行了一种“归一化”和“反比”处理。差值越小关联系数越接近1关联越强差值越大关联系数越接近0关联越弱。公式中的rho * max_diff是为了防止分母为零同时也控制了关联系数的整体范围。实操心得运行上面的函数后你可能会得到类似“汽车保有量关联度0.75工业排放关联度0.68绿化面积0.62平均风速0.55”的结果。这意味着在该城市AQI的影响因素中汽车保有量的关联性最强其次是工业排放。这可以为政策建议提供直接依据——优先治理机动车尾气可能比单纯限制工业排放见效更快。在论文中你需要清晰地展示这个计算过程和结果表格。4. 灰色预测GM(1,1)模型用过去几个点画出未来曲线找到了关键因素接下来我们可能需要对它进行预测。假设我们认为汽车保有量是关键想预测未来两年的数据。我们只有6年的历史数据这正是GM(1,1)的用武之地。4.1 模型原理与建模步骤GM(1,1)模型虽然名字唬人但步骤是程式化的。它的核心思想是任何杂乱无章的原始数据经过一次累加生成后都会呈现出近似指数增长的规律。然后我们用微分方程去拟合这个生成后的新序列最后再通过累减还原得到预测值。建模五步走数据检验与处理确保数据非负GM(1,1)要求否则要做平移处理。累加生成将原始序列逐项累加得到一个新序列。这个新序列单调递增平滑了随机波动。建立微分方程对累加序列建立一阶常微分方程dx/dt ax b。其中a是发展系数b是灰色作用量。求解参数利用最小二乘法估计参数a和b。模型求解与预测求解微分方程的时间响应式得到累加序列的预测值再通过累减还原得到原始序列的预测值。模型检验这是决定你的预测能否被写在论文里的关键必须进行残差检验和后验差检验。4.2 完整的Matlab实现与逐行解析下面是一个功能完整的GM(1,1)预测函数包含了建模、预测和检验。function [predict, a, b, C, P, relative_errors] gm11(x0, predict_num) % GM(1,1)灰色预测模型 % 输入 % x0: 原始数据行向量例如 [x0(1), x0(2), ..., x0(n)] % predict_num: 需要预测的后续点数 % 输出 % predict: 预测值包括历史拟合值和未来预测值长度 length(x0)predict_num % a: 发展系数 % b: 灰色作用量 % C: 后验差比值 % P: 小误差概率 % relative_errors: 相对误差序列 n length(x0); if n 4 error(数据量过少至少需要4个数据点才能建立GM(1,1)模型。); end % 1. 数据检验与处理确保非负 if min(x0) 0 fprintf(警告原始数据包含负数正在进行非负化平移处理。\n); x0 x0 - min(x0) 1; % 平移使最小值为1 end % 2. 累加生成(1-AGO) x1 cumsum(x0); % 3. 构造数据矩阵B和数据向量Y % B [ -z1(2), 1; -z1(3), 1; ...; -z1(n), 1]其中z1是x1的紧邻均值生成序列 % Y [ x0(2); x0(3); ...; x0(n) ] z1 (x1(1:end-1) x1(2:end)) / 2; % 紧邻均值生成 B [-z1, ones(n-1, 1)]; Y x0(2:end); % 4. 最小二乘法求解参数 a, b % 求解方程Y B * [a; b] parameters (B * B) \ (B * Y); % 使用左除运算更稳定 a parameters(1); b parameters(2); fprintf(GM(1,1)模型参数发展系数 a %.6f灰色作用量 b %.6f\n, a, b); % 5. 模型的时间响应式累加序列预测公式 % x1_hat(k1) (x0(1) - b/a) * exp(-a*k) b/a x1_hat zeros(1, n predict_num); x1_hat(1) x1(1); % 第一个累加值等于原始第一个值 for k 1:(n predict_num - 1) x1_hat(k1) (x0(1) - b/a) * exp(-a * k) b/a; end % 6. 累减还原(IAGO)得到原始序列的预测值 % x0_hat(k) x1_hat(k) - x1_hat(k-1), 其中 k2 x0_hat zeros(1, n predict_num); x0_hat(1) x0(1); % 第一个预测值等于原始第一个值 for k 2:(n predict_num) x0_hat(k) x1_hat(k) - x1_hat(k-1); end predict x0_hat; % 7. 模型检验核心 % 7.1 计算历史拟合值及误差 fitted_values predict(1:n); % 前n个是历史拟合值 errors x0 - fitted_values; % 残差 relative_errors abs(errors) ./ x0; % 相对误差 % 7.2 计算原始序列均值、方差 mean_x0 mean(x0); S1 std(x0); % 原始序列的标准差 % 7.3 计算残差序列均值、方差 mean_error mean(errors); S2 std(errors); % 残差序列的标准差 % 7.4 后验差比值 C 和小误差概率 P C S2 / S1; % 计算小误差概率|误差(k)-平均误差| 0.6745*S1 的比例 P sum(abs(errors - mean_error) 0.6745 * S1) / n; % 输出检验结果 fprintf(\n 模型精度检验 \n); fprintf(原始数据标准差 S1: %.4f\n, S1); fprintf(残差标准差 S2: %.4f\n, S2); fprintf(后验差比值 C: %.4f\n, C); fprintf(小误差概率 P: %.4f\n, P); % 精度等级判定参考 if (P 0.95) (C 0.35) grade 优秀 (精度等级好); elseif (P 0.80) (C 0.50) grade 合格 (精度等级合格); elseif (P 0.70) (C 0.65) grade 勉强合格 (精度等级勉强); else grade 不合格 (精度等级不合格); end fprintf(模型精度等级: %s\n, grade); fprintf(平均相对误差: %.2f%%\n, mean(relative_errors)*100); % 打印拟合对比表 fprintf(\n 历史数据拟合对比 \n); fprintf(序号\t原始值\t\t拟合值\t\t残差\t\t相对误差(%%)\n); for i 1:n fprintf(%d\t%.4f\t\t%.4f\t\t%.4f\t\t%.2f\n, ... i, x0(i), fitted_values(i), errors(i), relative_errors(i)*100); end % 打印预测结果 if predict_num 0 fprintf(\n 未来预测结果 \n); for i 1:predict_num fprintf(第%d个预测点: %.4f\n, i, predict(ni)); end end end4.3 模型应用示例与结果解读让我们用之前汽车保有量的数据来预测一下。% 使用之前数据中的汽车保有量序列第3行 car_data original_data(3, :); % [90, 95, 100, 110, 115, 120] predict_years 2; % 预测未来2年 [predict_values, a, b, C, P, rel_err] gm11(car_data, predict_years); % 绘制对比图 figure; hold on; years 1:length(car_data); plot(years, car_data, bo-, LineWidth, 2, MarkerSize, 8, DisplayName, 原始数据); plot(years, predict_values(1:length(car_data)), rs--, LineWidth, 1.5, MarkerSize, 6, DisplayName, 模型拟合); future_years length(car_data)1 : length(car_data)predict_years; plot(future_years, predict_values(length(car_data)1:end), g^--, LineWidth, 1.5, MarkerSize, 8, DisplayName, 未来预测); xlabel(年份序号); ylabel(汽车保有量万辆); title(GM(1,1)模型拟合与预测); legend(Location, best); grid on; hold off;运行结果关键解读参数意义a是发展系数通常为负。a的绝对值大小反映了序列的增长速度。b是灰色作用量与背景值有关。精度检验这是论文的生命线评委一定会看。后验差比值 CC S2 / S1。S1是原始数据标准差S2是残差标准差。C越小说明模型预测误差的波动相对于原始数据波动越小精度越高。一般C 0.35为好C 0.5为合格C 0.65则模型不合格。小误差概率 PP P(|e(k)-ē| 0.6745S1)。它表示残差与残差均值之差落在指定范围内的概率。P越大越好通常P 0.95为优秀P 0.8为合格。精度等级表根据(C, P)对照标准表判定模型等级好、合格、勉强、不合格。你的模型至少要达到“合格”等级得出的预测结论才具有说服力。预测结果函数会输出未来两年的预测值比如[125.3, 131.1]。在论文中你需要明确说明这是基于GM(1,1)模型的预测结果并附上精度检验指标作为支撑。踩坑提醒GM(1,1)模型预测的是指数增长趋势。如果你的原始数据是近似指数增长的比如经济增长、某些技术的发展初期它会拟合得很好。但如果你的数据是摆动的、有饱和趋势的或者下降的直接用GM(1,1)效果会很差甚至出现荒谬的预测。这时需要考虑数据预处理如取对数、使用其他灰色模型如GM(2,1)、DGM模型等或完全换用其他方法。务必先画图观察原始数据的趋势5. 数模比赛实战整合从问题到论文的一站式指南掌握了两个核心工具我们来看看如何在一次完整的数模比赛中应用它们。假设赛题是“基于历史数据分析影响某景区客流量Y的关键因素X1: 营销投入 X2: 高铁班次 X3: 平均气温 X4: 节假日天数并预测未来两年客流变化为景区管理提供建议。”5.1 解题流程设计一个清晰、逻辑自洽的建模流程是论文的骨架。问题重述与分析将赛题口语化描述转化为数学问题。明确输入多因素时间序列数据、输出关键因素排序、未来客流预测和目标为管理决策提供量化依据。模型假设列出合理的假设以简化问题。例如“假设数据真实可靠”、“假设未来两年无重大突发事件影响旅游业”、“假设各因素对客流的影响是独立的”这是一个强假设在关联度分析中可放宽。数据预处理检查数据完整性有无缺失值、异常值。对于缺失值可采用插值法如线性插值补充。将数据整理成Matlab可读的矩阵格式。模型建立与求解步骤一关联分析以客流量为参考序列其他因素为比较序列调用grey_relation函数计算关联度。根据结果排序确定关键影响因素比如发现X2高铁班次和X1营销投入关联度最高。步骤二预测建模对客流量历史数据Y直接建立GM(1,1)模型进行预测。进阶可选对关联度最高的1-2个关键因素如X2也进行预测然后可以尝试建立Y与X2的简单回归模型用预测的X2去预测Y与直接灰色预测的结果进行对比或融合这能体现你的思考深度。模型检验与结果分析对GM(1,1)模型必须展示后验差检验C和P值和拟合对比表、图。分析预测结果的合理性。例如预测客流增长是否与高铁新线路规划、营销计划相匹配模型评价与推广优点指出灰色模型在小样本、贫信息情况下的独特优势以及方法简单、计算快的特性。缺点坦诚说明模型的局限性如对长期预测精度下降、对波动剧烈数据适应性差等。推广可以提一句本模型框架也可应用于其他类似领域如能源需求预测、金融市场分析需谨慎等。政策建议或结论根据关联度分析结果提出“应优先增加高铁班次、优化营销策略”等具体建议。根据预测结果提出“预计客流将增长X%需提前规划停车场、餐饮等配套设施”。5.2 论文写作核心要点与避坑指南对于大一同学论文写作可能比编程更头疼。记住这几个要点摘要重中之重评委可能只看摘要。用一段话概括针对什么问题、用了什么方法灰色关联灰色预测、建立了什么模型、得到了什么关键结论因素排序、预测数值、提出了什么建议。逻辑要极其清晰。模型建立部分不要只贴公式和代码。要用文字描述你的建模思想。例如“由于样本数据仅有6年属于小样本问题且各因素量纲不同故首先采用均值化法进行无量纲化处理以消除量纲影响...”。图表并茂必须有一张关联度排序的柱状图直观展示哪个因素最重要。必须有一张GM(1,1)模型拟合与预测效果图包含历史数据点、拟合曲线和未来预测延伸线。表格用于展示关联度计算结果、模型检验指标C, P值表、拟合误差表。代码附录将核心的、自己编写的Matlab代码如上面的两个函数放在附录里。切忌把一整屏的运行日志或所有代码都堆上去。只放最能体现你工作的、结构清晰的函数。常见错误忘记检验只做预测不做模型精度检验论文一票否决。数据未处理直接对量纲不同的数据算关联度结果毫无意义。滥用预测对明显不符合指数增长规律的数据如上下波动的销售额强行用GM(1,1)预测结果离谱。表述口语化论文是科技文体避免“我觉得”、“应该可能”等词语使用“结果表明”、“数据显示”、“模型预测”等客观表述。6. 进阶技巧与常见问题排查当你掌握了基础操作后这些进阶技巧和问题排查经验能让你的模型更稳健论文更出彩。6.1 提升模型精度的技巧数据预处理平滑处理如果原始数据波动很大可以先进行移动平均或指数平滑处理再送入灰色模型能有效提高预测精度。对数变换对于增长趋势特别快的数据可以先取对数对对数序列建立GM(1,1)模型预测后再指数还原。这相当于拟合了一个指数增长模型。模型优化背景值优化标准GM(1,1)使用紧邻均值生成背景值z1。你可以尝试其他背景值构造方法如加权均值看是否能降低误差。这可以作为你模型的“创新点”。残差修正如果模型拟合后存在规律性的残差如始终偏大或偏小可以对残差序列再建立一个GM(1,1)模型用这个残差模型去修正原模型的预测值。结果融合不要只依赖单一模型。可以将GM(1,1)的预测结果与简单的时间序列方法如移动平均的结果进行加权平均作为最终预测。在论文中讨论这种融合策略能体现你的综合思考能力。6.2 常见问题与解决方案速查表下表列出了你在实操中几乎一定会遇到的问题及解决办法。问题现象可能原因解决方案与排查步骤关联度计算结果全部接近1或全部接近0没有区分度。1. 数据未进行无量纲化处理。2. 分辨系数rho取值过大如接近1。1.首要检查确认是否执行了均值化或初值化处理。2. 尝试调小rho值如从0.5调到0.3观察关联度分布是否拉开。GM(1,1)模型预测值出现负数。原始数据中包含负数或零。GM(1,1)要求非负序列。对原始数据进行“非负化平移”。在代码中已有处理x0 x0 - min(x0) 1。注意预测结果需要反向平移回去。模型精度检验不合格C值过大P值过小。1. 原始数据不适合用GM(1,1)建模如波动大、非单调。2. 数据量确实太少如只有4个点。3. 存在异常值。1.画图观察首先绘制原始数据折线图看是否大致呈指数增长趋势。如果不是考虑换模型或数据预处理。2. 尝试对数据进行平滑或对数变换后重新建模。3. 检查并处理异常数据点。Matlab报错“矩阵接近奇异或缩放错误”。在最小二乘法求解(B*B) \ (B*Y)时矩阵B*B病态。1. 检查数据是否所有值都相同方差为零。2. 尝试使用更稳定的求解方式如pinv伪逆parameters pinv(B) * Y;。预测未来多期后数值趋向于一个常数或无限大。这是GM(1,1)的数学特性。当发展系数a为很小的正数或负数时指数项exp(-a*k)会随k增大而趋于0或无穷。1.短期预测GM(1,1)主要适用于短期预测通常预测步数不超过数据长度的1/2。2. 在论文中明确说明模型的这一局限性强调其短期预测的适用性。关联度分析中某个因素的关联度异常高或低与常识不符。1. 数据本身存在异常或量纲影响未完全消除。2. 该因素与结果可能确实存在非线性或延迟关系而灰色关联是线性近似。1. 复查数据清洗和预处理步骤。2. 可以尝试使用其他无量纲化方法如初值化对比结果。3. 在论文中作为“异常发现”进行讨论分析其可能原因数据问题、特殊因果关系等这反而可能成为亮点。6.3 代码调试与优化心得模块化编程就像我上面做的那样把关联度分析和灰色预测写成独立的函数.m文件。这样主脚本清晰简洁便于调试和复用。在论文附录中也只需要贴这几个函数。善用Matlab调试器设置断点查看运行过程中关键变量如normalized_data,diff_matrix,a, b的值是否符合预期。这是定位逻辑错误最快的方法。可视化是王道每完成一步都尝试画个图。比如无量纲化前后数据的对比图、关联度排序图、预测拟合图。图形能帮你最直观地判断模型效果和发现问题。参数敏感性分析加分项在论文中你可以简单讨论一下分辨系数rho对关联度排序的影响。写一个循环让rho从0.1到0.9变化观察关联度顺序是否稳定。如果顺序基本不变说明你的结论是稳健的。最后我想说数模比赛对大一同学而言最大的价值不在于做出多么完美的模型而在于完整地体验一次“发现问题-抽象建模-求解验证-报告呈现”的全过程。灰色系统理论为你提供了一个起点较低但框架完整的工具箱。通过这次实践你不仅学会了两个模型和Matlab编程更关键的是掌握了解决一类实际问题的思维路径。当你看到自己写的代码跑出结果并把它转化成一份结构清晰的论文时那种成就感是无可替代的。大胆去用细心去调严谨去写你的第一次数模之旅一定会收获满满。