数学建模
湖水温度变化模型
摘要:
影响湖水温度变化的因素有很多,光照,地形等。其中秋季因湖区多风而发生湖水搅
动,使水温分层温度现象基本消失,冬季湖面结冰,湖水温度出现逆温层现象,同时,由
于地形走势,地理位置湖水成分及太阳照射都会使不同深度的湖水有不同的温度。论文利
用数学建模理念和 MATLAB 软件对水温的变化与分布进行了分析和评论,围绕着湖水温度
变化问题,分析并建立了湖水变化问题的数学模型,同时应用多项式拟合的方法来解决未
知问题,得出了湖水温度变化最大的范围是在 25.7500m 处。
关键词:深度、温度、数学建模、多项式拟合
1.模型的背景问题描述
湖水在夏天会出现分层现象,其特点为接近湖面的水温度较高,越往下温度越低。这
种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。
下表 1-1 是对某个湖的观测数据。
深度/m
0
2.3
4.9
9.1
13.7
18.3
22.9
27.2
表 1-1 湖水观测数据
温度/℃
22.8
22.8
22.8
20.6
13.9
11.7
11.1
11.1
求解:1.1 湖水在 10cm 处的温度是多少?
1.2 湖水在什么深度温度变化最大?
2.模型假设
针对以上问题,对于湖水温度的模型可以做出如下的假设:
1. 湖水的温度与湖水内部的流动状态无关;
2. 湖水内部物质的分布不影响湖水温度的变化;
3. 湖水的温度不受地形、季节和天气等状况的影响;
4. 湖水底部平坦,无断沟、无起伏;
5. 湖水的深度决定了湖水的温度状况;
3.分析与建立模型
1
刘波:湖水温度变化模型
这道湖水温度变化模型问题主要研究的是湖水温度会随着深度的不同而呈现出一定
的规律。但模型中只给出了温度与深度相关的有限实验数据,由此想到可能要用到插值和
多项式拟合的方法来求解该模型。
假设湖水深度是温度的连续函数,其中一组统计数据为表 3-1 所示:
深度/m
0
2.3
4.9
9.1
13.7
18.3
22.9
27.2
表 3-1 湖水观测数据
温度/℃
22.8
22.8
22.8
20.6
13.9
11.7
11.1
11.1
3.1 引入相关变量符号如下:
x:湖水深度,单位为 m;
y:湖水温度,单位为C,它是湖水深度的函数:y=f(x);
这里要应用数学中多项式拟合的方法,并且在 MATLAB 中实现编程,先求出湖水温
度的函数 y,然后再针对求出来的拟合函数进行求导,取极值。这样就可以方便地求解湖
水模型中未知的问题了。
3.2 MATLAB 基本语句:
>> x=[a b c d e]
创建包含指定元素的行向量;
>> y=[a b c d e]’ 求该矩阵的转置;
>> plot(x,y,’s’) 画实线,s 为线型;
>> a=polyfit(x,y,n)
返回多项式系数从最高次系数到最底次系数,n 是多项式的阶
数;
>> polyfit([a b c d],[e f g h],n) 求其拟合曲线函数方程系数;
>> b=regress(Y,X)
MATLAB 统计工具箱;
>> [b,bint,r,rint,statas]=regress(Y,X,alpha)
4.模型求解及检验
将湖水模型中所给的已知数据运用 MATLAB 数学软件进行编程作图,横轴代表湖水
深度 x,纵轴代表湖水温度 y,并用 MATLAB 数学软件画出散点图,其中绘图(如图 4-1)
操作的编程操作命令为:
2
数学建模
>> x=[0 2.3 4.9 9.1 13.7 18.3 22.9 27.2];
>> y=[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1];
>> plot(x,y,'r*')
24
22
20
18
16
14
12
10
0
5
10
15
20
25
30
图 4-1
观察散点图像的特点,由散点图像可知,图形中的散点随不同的深度变化,间距大体
适中,但是发现其中有明显的拐点,说明散点分布在一条曲线附近。由此得知湖水深度 x
与湖水温度之间存在着一种线性关系,因此采用二阶拟合是不合适的,于是对模型相关数
据进行四阶拟合并通过实验选取不同的基函数类进行。
其中进行四次拟合的编程操作命令为:
>> x=[0 2.3 4.9 9.1 13.7 18.3 22.9 27.2];
>> y=[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1];
>> polyfit([0 2.3 4.9 9.1 13.7 18.3 22.9 27.2],[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1],4)
ans =
-0.0001
0.0103
-0.2279
0.9977
22.3743
拟合曲线的函数方程为 y=-0.0001*x.^4+0.0103*x.^3-0.2279*x.^2+0.9977*x+22.3743;
显示拟合函数图像(如图 4-2)的编程操作命令为:
>> x=[0:0.1:27.2];
>>y=-0.0001*x.^4+0.0103*x.^3-0.2279*x.^2+0.9977*x+22.3743;
>> plot(x,y)
3
刘波:湖水温度变化模型
34
32
30
28
26
24
22
20
18
16
14
0
5
10
15
20
25
30
图 4-2
观察图像可以发现,采用四阶拟合得到的曲线图像明显要比二阶拟合得到的散点图像
效果要好很多。首先,曲线图像显示出比散点图像更加直观的效果,这样便于进一步地进
行分析模型;其次,曲线的图像是连续并且可导的,这样就便于使用导数进行相关极值问
题的求解。
于是,可得水深在 10cm 处时的温度。其中编程操作命令为:
>> a=polyfit(x,y,4);
>> polyval(a,0.1)
ans =
22.4718
由此就可以求解出来当湖水深度为 x=10cm 处时的湖水温度为 22.4718℃。
(2)要求在哪个深度时湖水温度变化最大,也就是求拟合函数的拐点,即二阶导数
为零的极值点。其中求出一阶导数的编程操作命令为:
>> syms x;
>> y=-0.0001*x.^4+0.0103*x.^3-0.2279*x.^2+0.9977*x+22.3743;
>> diff(y,x)
ans =
-1/2500*x^3+309/10000*x^2-2279/5000*x+9977/10000;
显示出导数图像(如图 4-3)的编程操作命令为:
>> x=[0:0.1:27.2];
>> y=-1/2500*x.^3+309/10000*x.^2-2279/5000*x+9977/10000;
>> plot(x,y)
4
数学建模
3.5
3
2.5
2
1.5
1
0.5
0
-0.5
-1
0
5
10
15
20
25
30
图 4-3
求出三阶导数的编程操作命令为:
>> syms x;
>> y=-1/2500*x.^3+309/10000*x.^2-2279/5000*x+9977/10000;
>> diff(y,x)
ans =
-3/2500*x^2+309/5000*x-2279/5000;
显示出三阶导数(如图 4-4)的编程操作命令为:
>> x=[0:0.1:27.2];
>>y=-3/2500*x.^2+309/5000*x-2279/5000;
>> plot(x,y)
0.4
0.3
0.2
0.1
0
-0.1
-0.2
-0.3
-0.4
-0.5
0
5
10
15
20
25
30
图 4-4
求出二阶导数的编程操作命令为:
>> syms x;
>> y=-3/2500*x.^2+309/5000*x-2279/5000;
>> diff(y,x)
5
刘波:湖水温度变化模型
ans =
-3/1250*x+309/5000;
显示出二阶导数(如图 4-5)的编程操作命令为:
>> x=[0:0.1:27.2];
>>y=-3/1250*x+309/5000;
>> plot(x,y)
0.07
0.06
0.05
0.04
0.03
0.02
0.01
0
-0.01
0
5
10
15
20
25
30
图 4-5
因为当二阶导数取零时,得到的极值点就是该模型中湖水温度变化最大的地方。因此
令二阶导数等于零,有 y=-3/1250*x+309/5000=0;于是就可以求解出湖水深度 x=25.7500m。
其中求解的编程操作命令为:
>> y=0;subs(solve('y=-3/1250*x+309/5000'))
ans =
25.7500
这样就得出了所求模型的最终结果,当湖水深度在 x=25.7500m 处时,湖水温度的变
化是最大的。
其中求解该模型的全部 MATLAB 程序为:
>> x=[0 2.3 4.9 9.1 13.7 18.3 22.9 27.2];
>> y=[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1];
>> plot(x,y,'r*')
>> x=[0 2.3 4.9 9.1 13.7 18.3 22.9 27.2];
>> y=[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1];
>> polyfit([0 2.3 4.9 9.1 13.7 18.3 22.9 27.2],[22.8 22.8 22.8 20.6 13.9 11.7 11.1 11.1],4)
ans =
6
数学建模
-0.0001
0.0103
-0.2279
0.9977
22.3743
>> x=[0:0.1:27.2];
>>y=-0.0001*x.^4+0.0103*x.^3-0.2279*x.^2+0.9977*x+22.3743;
>> plot(x,y)
>> a=polyfit(x,y,4);
>> polyval(a,0.1)
ans =
22.4718
>> syms x;
>> y=-0.0001*x.^4+0.0103*x.^3-0.2279*x.^2+0.9977*x+22.3743;
>> diff(y,x)
ans =
-1/2500*x^3+309/10000*x^2-2279/5000*x+9977/10000;
>> x=[0:0.1:27.2];
>> y=-1/2500*x.^3+309/10000*x.^2-2279/5000*x+9977/10000;
>> plot(x,y)
>> syms x;
>> y=-1/2500*x.^3+309/10000*x.^2-2279/5000*x+9977/10000;
>> diff(y,x)
ans =
-3/2500*x^2+309/5000*x-2279/5000;>> x=[0:0.1:27.2];
>>y=-3/2500*x.^2+309/5000*x-2279/5000;
>> plot(x,y)
>> syms x;
>> y=-3/2500*x.^2+309/5000*x-2279/5000;
>> diff(y,x)
ans =
-3/1250*x+309/5000;
>> x=[0:0.1:27.2];
>>y=-3/1250*x+309/5000;
>> plot(x,y)>> y=0;subs(solve('y=-3/1250*x+309/5000'))
ans = 25.7500
7
刘波:湖水温度变化模型
5.应用与推广:
对湖水温度变化模型的建立,可以更加的了解由于湖水温度变化而形成的规律,从而
更加有利于水产业的经济收入。根据数学模型可以确定出在不同的水深环境下饲养相应的
鱼类,并且可以通过了解水温的变化,可以了解水中生物的生长情况和生长环境。为水中
生物的生长和繁殖提供了至关重要的保证,进一步更好的带动了经济的发展和更有利于环
保工作。
6.心得体会:
通过本次数学建模,我知道了什么是数学建模,如何去建立数学模型来解决研究现实
问题。同时,我初步了解了 MATLAB 的使用方法。本次数学建模我又重新回顾了学过的一
些物理知识,数学知识,对“温故而知新”这句古训有了更深刻的了解。
数学建模不像是解一道应用题那样简单,需要自己仔细去发现问题解决问题,真的需
要一定的能力,一定的耐心,一定的动手能力。也发现了自身的许多不足,没有持之以恒
的耐心,不认真,缺乏动手能力。
多亏了现在如此发达的网络,给我们提供了丰富的资料供我们借鉴,经过本次对湖水
温度变化的数学建模,我掌握了其基本的工作步骤,要求,我相信在今后的工作中我会更
加熟练的运用此项知识,优秀我的工作。
8