1、 青岛农业大学数值分析论文(设计)题 目: 湖水温度变化模型 姓 名: 庞云杰 学 院: 理学与信息科学学院 专 业: 信息与计算科学 班 级: 201502 学 号: 20155653 指导教师: 王述香 2017 年 12 月 18 日目录湖水温度变化模型 I摘要 IChange model of lake water temperatureIIAbstract:.II1 模型的背景问题描述 12 模型假设 13 分析与建立模型 13.1 引入相关变量符号如下: 23.2 MABLAB 基本语句: .24 模型求解及检验 35 应用与推广 86 心得与体会 97 参考文献 98 附录 10
2、I湖水温度变化模型信息与计算科学 2 班 庞云杰指导教师 王述香摘要:影响湖水温度变化的因素有很多,光照,地形等。其中秋季因湖区多风而发生湖水搅动,使水温分层温度现象基本消失,冬季湖面结冰,湖水温度出现逆温层现象,同时,由于地形走势,地理位置湖水成分及太阳照射都会使不同深度的湖水有不同的温度。论文利用数学建模理念和 MATLAB 软件对水温的变化与分布进行了分析和评论,围绕着湖水温度变化问题,分析并建立了湖水变化问题的数学模型,同时应用多项式拟合的方法来解决未知问题,得出了湖水温度变化最大的范围是在 25.7500m 处。关键词:深度、分层、温度、数学建模、多项式拟合IIChange mode
3、l of lake water temperatureStudent majoring in Information and Computing Science class 2 Pang Yunjie Tutor Wang ShunxiangAbstract: There are many factors affecting the change of lake water temperature, such as light, terrain, etc. The autumn wind and water due to the lake more stirring, the water te
4、mperature stratification temperature phenomenon disappeared, frozen lake in winter, lake water temperature inversion phenomenon, at the same time, due to the trend of the terrain, water composition and sun location will make the different depth of the lake is not the same temperature. The change and
5、 distribution of temperature using mathematical modeling theory and MATLAB software are analyzed and commented, around the lake temperature change, analysis and establish a mathematical model of water change, at the same time the application of polynomial fitting method to solve the problem of unkno
6、wn, the range of temperatures in the lake is the biggest change in 25.7500m.Keywords: Depth, stratification, temperature, mathematical modeling, polynomial fitting11 模型的背景问题描述湖水在夏天会出现分层现象,其特点为接近湖面的水温度较高,越往下温度越低。这种上热下冷的现象影响了水的对流和混合过程,使得下层水域缺氧,导致水生鱼类的死亡。下表 1-1 是对某个湖的观测数据。表 1-1 湖水观测数据深度/m 0 2.3 4.9 9.1
7、 13.7 18.3 22.9 27.2温度/ 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 分析与建立模型这道湖水温度变化模型问题主要研究的是湖水温度会随着深度的不同而呈现出一定的规律。但模型中只给出了
8、温度与深度相关的有限实验数据,由此想到可能要用到插值和多项式拟合的方法来求解该模型。假设湖水深度是温度的连续函数,其中一组统计数据为表 3-1 所示:2表 3-1 湖水观测数据深度/m 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.13.1 引入相关变量符号如下:x:湖水深度,单位为 m;y:湖水温度,单位为 C,它是湖水深度的函数:y=f(x);这里要应用数学中多项式拟合的方法,并且在 MATLAB 中实现编程,先求出湖水温度的函数 y,然后再针对求出来的拟合函数进行求导,取极值。这样就可
9、以方便地求解湖水模型中未知的问题了。3.2 MABLAB 基本语句: 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)34 模型求解及检验将湖水模型中所给的已知数据运用 MATLAB 数学软件
10、进行编程作图,横轴代表湖水深度 x,纵轴代表湖水温度 y,并用 MATLAB 数学软件画出散点图,其中绘图( 如图 4-1)操作的编程操作命令为: 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*)0 5 10 15 20 25 301012141618202224图 4-1观察散点图像的特点,由散点图像可知,图形中的散点随不同的深度变化,间距大体适中,但是发现其中有明显的拐点,说明散点分布在一条曲线附近。由此得知湖水深度 x 与湖水温度之间存在着一种线性关系,
11、因此采用二阶拟合是不合适的,于是对模型相关数据进行四阶拟合并通过实验选取不同的基函数类进行。其中进行四次拟合的编程操作命令为: 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;4 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.01
12、03*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)0 5 10 15 20 25 301416182022242628303234图 4-2观察图像可以发现,采用四阶拟合得到的曲线图像明显要比二阶拟合得到的散点图像效果要好很多。首先,曲线图像显示出比散点图像更加直观的效果,这样便于进一步地进行分析模型;其次,曲线的图像是连续并且可导的,这样5就便于使用导数进行相关极值问题的
13、求解。于是,可得水深在 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*x3+309/10000*x2-2279/5000*x+9977/100
14、00;显示出导数图像(如图 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)60 5 10 15 20 25 30-1-0.500.511.522.533.5图 4-3求出三阶导数的编程操作命令为: syms x; y=-1/2500*x.3+309/10000*x.2-2279/5000*x+9977/10000; diff(y,x)ans =-3/2500*x2+309/5000*x-2279/5000;显示出三阶导数(如图 4-4)的编程操作命令为: x=0:
15、0.1:27.2;y=-3/2500*x.2+309/5000*x-2279/5000; plot(x,y)70 5 10 15 20 25 30-0.5-0.4-0.3-0.2-0.100.10.20.30.4图 4-4求出二阶导数的编程操作命令为: syms x; y=-3/2500*x.2+309/5000*x-2279/5000; diff(y,x)ans =-3/1250*x+309/5000;显示出二阶导数(如图 4-5)的编程操作命令为: x=0:0.1:27.2;y=-3/1250*x+309/5000; plot(x,y)80 5 10 15 20 25 30-0.0100.
16、010.020.030.040.050.060.07图 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 处时,湖水温度的变化是最大的。5 应用与推广对湖水温度变化模型的建立,可以更加的了解由于湖水温度变化而形成的规律,从而更加有利于水产业的经济收入。根据数学模
17、型可以确定出在不同的9水深环境下饲养相应的鱼类,并且可以通过了解水温的变化,可以了解水中生物的生长情况和生长环境。为水中生物的生长和繁殖提供了至关重要的保证,进一步更好的带动了经济的发展和更有利于环保工作。为中国梦实现做一定的贡献。6 心得与体会通过本次数值分析课程设计,我了解到数值分析的重要性,数值分析如何去建立数学模型来解决研究现实问题。同时,我 MATLAB 的使用方法又进一步的掌握。数学建模不像是解一道应用题那样简单,需要自己仔细去发现问题解决问题,真的需要一定的能力,一定的耐心,一定的动手能力。也发现了自身的许多不足,没有持之以恒的耐心,不认真,缺乏动手能力。多亏了现在如此发达的网络
18、,给我们提供了丰富的资料供我们借鉴,经过本次对湖水温度变化的数学建模,我掌握了其基本的工作步骤,要求,我相信在今后的学习中我会更加熟练的运用此项知识。最后感谢我数值分析老师王老师的教导,这是课程设计的成功的基础就是我们日常的数值分析的学习。7 参考文献1 基础教学部数学系 .数学建模;2 姜启源,谢金星 ,等.数学模型.北京:高等教育出版社,2005;3 Pelzer H. Ingeniervermessung M. Stuttgart:Konrad Wittwer,2001;4 高隆昌,杨元 ,等.数学建模理论基础.北京:科学出版社, 2007;5 MATLAB 7.0 版教程.网站;6 (
19、第五版)岩石 主编.高等教育出版社;108 附录其中求解该模型的全部 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.
20、1,4)ans =-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*x3+309/10000*x2-2279/5000*x+9977/10000; x=0:0.
21、1:27.2; y=-1/2500*x.3+309/10000*x.2-2279/5000*x+9977/10000; plot(x,y) syms x;11 y=-1/2500*x.3+309/10000*x.2-2279/5000*x+9977/10000; diff(y,x)ans =-3/2500*x2+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