数学建模初等模型应用
一、目的
掌握初等模型的建模方法,对简单的初等模型能借助Matlab工具软件进行辅助建模、求解和检验。
二、实验内容与设计思想(设计思路、主要代码分析)
1、预测鱼的质量
(1)设计思路:使用线性回归模型预测鱼的质量,基于其身长和胸围作为输入特征。通过最小二乘法拟合模型,推导出一个线性方程,用于对未知样本的质量进行预测。
(2)代码实现数据准备:将鱼的身长、胸围和质量数据这些数据以向量的形式存储,以便后续的计算。
设计矩阵构建:构建设计矩阵,包含输入特征(身长和胸围)及一个常数项,用于线性回归分析。
N = numel(length); X = [ones(N, 1), length, girth];
这里,N表示样本数量,通过numel函数获取。X是设计矩阵,它的第一列为常数1(表示截距项),第二列为身长,第三列为胸围。这种构建方式是线性回归中常见的形式,使得模型可以通过线性组合来表示。
线性回归模型拟合:利用最小二乘法公式b = (X’ * X)(X’ * weight);进行参数估计,以得到最佳的线性回归系数。这些系数能够帮助我们构建预测模型。
模型预测:使用拟合得到的模型对新的身长和胸围数据进行质量预测。
2、录像机
(1)设计思路:
数据收集与处理:收集录像机在不同时间点的计数器读数,形成一组时间与读数的数据对。这些数据将用作分析录像带的使用情况。
插值法:由于原始数据点有限,为了获得更平滑的曲线,使用插值法(在这里使用的是样条插值’spline’),可以在给定时间点估算出相应的计数器读数。
时间计算:基于当前计数器读数计算已经用掉的时间,然后与录像带的总时间进行对比,得到剩余时间。利用插值的结果进一步估算在剩余时间内计数器的读数。
最后,通过比较剩余读数和当前读数,判断剩余时间是否足够录制一小时的节目。
(2)原始数据表示:使用两个数组t和n分别表示时间(分钟)和对应的计数器读数。
插值计算:使用linspace生成细分时间点tt,并通过spline插值方法获取对应的计数器读数nn。
绘图:使用MATLAB的绘图功能,将原始数据点和插值结果绘制在同一图形中,以便直观展示读数变化。
剩余时间计算:通过当前计数器读数计算已经用掉的时间,并求出录像带的剩余时间。
通过插值法获取在剩余时间内的读数,并与当前读数进行比较,给出是否足够录制一小时节目的结论。
三、实验使用环境(本次实验所使用的平台和相关软件)
Matlab
四、实验步骤和调试过程
1、预测鱼的质量
N = numel(length);:计算数据点的数量,这里为8。
X = [ones(N, 1), length, girth]:构造设计矩阵 X。在这个矩阵中,第一列全为1(用于线性回归中的截距项),第二列是鱼的身长,第三列是鱼的胸围。最终的矩阵 X 的维度为 8x3,每一行代表一个样本,每一列代表一个变量。
b = (X’ * X)(X’ * weight);:这是最小二乘法的标准计算方式。首先计算 X 的转置 X’,然后计算 X’ * X 和 X’ * weight。接着使用‘ \’ 进行矩阵左除,从而解得参数 b。b 是一个包含线性回归系数的向量,具体包括截距和斜率。
a0:截距项,即当身长和胸围为0时的预测质量。
a1:身长的回归系数,表示身长每增加一单位cm,预测质量的增加量g。
a2:胸围的回归系数,表示胸围每增加一单位cm,预测质量的增加量g。
y = a0+a1mlength+a2mgirth;根据建立的回归模型,用 mlength 和 mgirth 计算预测的质量 y。
更改几个身长和胸围的数据,不难看出与表格质量数据近似。
2、录像机
tt:使用 linspace 创建了一个从0到184分钟的等间距的1000个点的数组,方便绘图和插值。
nn:使用 interp1 进行样条插值(‘spline’),生成在 tt 这些时间点对应的计数器读数。这一步使得拟合曲线更加平滑。
plot(tt, nn, ‘r-’, ‘DisplayName’, ‘拟合曲线’):用红色线绘制拟合的插值曲线。
current_reading = 4450:假设当前计数器的读数为4450。
elapsed_time = 184 * (current_reading / 6061):计算已经用掉的时间。根据比例关系,将当前读数与最大读数6061进行比较,得出已用掉的时间。
remaining_time = 180 - elapsed_time;:计算录像带的剩余时间。
if remaining_time < 0:检查剩余时间是否小于0,如果是,输出“录像带已用完!”。
remaining_reading = interp1(t, n, elapsed_time + remaining_time, ‘linear’);:如果还有剩余时间,使用线性插值计算在已用时间加剩余时间的情况下,计数器的读数。
if (remaining_reading - current_reading) >= 1000:检查剩余的读数是否能支持录制1小时的节目(即至少增加1000的计数器读数),如果条件成立,输出“剩余时间足够录制1小时节目。否则,输出“剩余时间不足以录制1小时节目。”。
结合图像和计算结果可得出结论。
五、小结
实验中遇到的问题及解决过程:
1、在进行线性回归时,发现部分身长和胸围值超出了原数据范围,导致预测结果不合理。
解决过程:添加数据有效性检查,确保输入值在合理范围内,并使用数据过滤技术剔除异常值。
2、在选择插值方法时,初步使用线性插值,发现拟合曲线不够光滑,存在明显的跳变。
解决过程:更改为样条插值方法,得到更平滑的拟合结果。
实验体会和收获:
通过本次实验,我认识到数据预处理在分析中的重要性,尤其是格式和范围的有效性直接影响模型的预测结果。同时,实验让我深刻体会到理论知识与实际操作的结合,实际操作中遇到的各种问题促使我不断调整和完善分析方法。此外,我在问题解决过程中锻炼了逻辑思维能力,学会了如何系统地分析问题并提出解决方案。这些经验为我今后的数据分析和模型建立奠定了良好的基础。