当前位置:文档之家› 水塔流量问题

水塔流量问题

本科生课程设计报告实习课程数值分析学院名称管理科学学院专业名称学生姓名学生学号指导教师实验地点实验成绩二〇一六年六月二〇一六年六月估计水塔的水流量摘要水塔流量的估计是一个较为经典的数学建模问题,本问题最大的困难在于不知泵启动时水位的变化和向外水流的速度.解决该问题,先确定近似流速,利用中点数值求导公式计算出每个时间点出的流速,再利用插值与拟合计算出流速与时间的函数,对0到24小时积分可得总用水量,这是第一种方法.第二种方法,水泵没有开动时利用高度差计算用水量,水泵开动时利用积分,这样计算出的结果较为准确,2种方法比较,可得出误差.关键词:中点数值求导;插值与拟合;积分目录第1章前言 (1)内容及要求 (1)研究思路及结构安排 (2)第2章模型建立与求解 (3)模型假设 (3)确定近似流速 (3)确定水泵启动时的流量及总流量曲线 (4)确定总用水量 (4)第3章算法步骤 (6)中点数值求导函数步骤及流程图 (6)三次样条插值函数步骤及流程图 (7)第4章算法实现 (7)程序总体结构 (7)源程序清单 (8)程序运行 (9)第5章误差分析 (12)第6章模型的评价和改进 (13)优点 (13)缺点 (13)模型的改进方向 (13)参考文献 (13)第1章前言内容及要求某地的用水管理机构要求各社区提供各个时刻的用水率以及每天所用的总用水量。

但许多社区并没有测量流入或流出当地水塔的水量的设备,他们只能代之以每小时测量水塔中的水位,其误差不超过%。

更为重要的是,无论什么时候,只要水塔中的水位下降到最低水位L时,水泵就自动启动向水塔重新充水直到最高水位H时水泵自动停止,但也无法得到水泵的供水量的测量数据。

因此,在水泵正在工作时,人们不容易建立水塔中水位与水泵工作时的用水量之间的关系。

水泵每天向水塔充水一次或两次,每次约二小时。

下表为某地一天中的真实的数据。

表1某天水塔水位测量记录时刻t(秒)0 3316 6635 10619 13937 17921 21240 水位(0.01英尺)3175 3110 3054 2994 2947 2892 2850 时刻t(秒)25223 28543 32284 35932 39332 39435 43318 水位(0.01英尺)2795 2752 2697 水泵启动水泵启3550 3445动时刻t(秒)46636 49953 53936 57254 60574 64554 68535 水位(0.01英尺)3350 3260 3167 3087 3012 2927 2842 时刻t(秒)71854 75021 79254 82649 85968 89953 93270 水位(0.01英尺)2767 2697 水泵启动水泵启动3475 3397 3340水塔是一个高40英尺、直径57英尺的圆柱。

按照设计,水塔水位降至约L=27英尺时,水泵自动启动加水;当水位升高到约H=35.5英尺米时,水泵自动停止工作。

试估计在任何时刻(包括水泵正在供水时)水从水塔流出的流量f(t),并估计一天的总用水量。

研究思路及结构安排本问题最大的困难在于不知道水泵启动时水位的变化和向外水流的速度。

用水量等于向外水流速度乘以时间。

因此,如何确定流速是解决该问题的关键。

第2章 模型建立与求解模型假设(1)除了问题中特别说明的数据以外,其他给定的数据其测量误差不超过%; (2)一天之中,任意从一个开始时刻,如从t=0起到t=24小时结束,一天开始时刻的不同不影响一天总水量;(3)管理部门不考虑水流速度的瞬间值,感兴趣的是整个一天中的用水总趋势;(4)水泵抽水的速度是均匀的;(5)假设水流的速度是连续变化的,流速可以用一条光滑的曲线近似表示,即在给定的数据点上有连续的二阶导数。

确定近似流速水泵不供水时,水流速度不难用数值方法描述,但如何描述清楚水泵向水塔供水期间的流速?我们首先估计水泵不启动时,每个已知数据点上的流速。

流速等于水量的变化除以时间的变化。

假设()y f t =为t 时刻水塔中水的容量,(,)i i t f 表示i t 时刻水塔中水的容量为i f 。

使用中点数值求导公式,求i t 处的导数()i f t '的近似值。

水泵不启动时段共有3段,对于每段的前两个点对于每段的后两个点1123311()(34)f t f f f t t '=-+--231311()()f t f f t t '=--1()()f t f f '=-对于每段的其余点如此,可得各时刻点上的流速。

(负号保证流速为正数) 确定水泵启动时的流量及总流量曲线在中已经得到了已知数据点(水泵不启动时)上的近似流速,根据假设(5),水流的速度可以表示为一条光滑的曲线。

因此考虑使用已经求出的水泵未启动时的流速来近似模拟水泵启动时的流速,这种模拟有两种方式:插值和拟合。

由于假设流速具有连续的二阶导数,因此采用三次样条插值多项式来模拟任意时刻的流速。

用()v t 表示时刻t 的流速。

确定总用水量前面已经求出水流的流速曲线,如何求总用水量呢? 如果画出流速曲线,就可以从流速曲线图看出,流速在0时刻和24时的流速近似相等,因此流速是近似地以一天为周期的。

可以考虑以下两种方式:1)一种方式是使用流速在时刻0至24小时上积分2)直接根据高度的变化求出水泵不启动时的用水量用积分求出水泵启动时的用水量近似值,然后相加。

选择024小时内的范围,小时内,高度从下降至英尺,用水量为1221()(34)n n n n n n f t f f f t t ---'=-+-2112221()(88)3()i i i i i i i f t f f f f t t --+++-'=-+--()()i i v t f t '=-240()Q v t dx=⎰21q r h π=∆257(31.7526.97)2π⎛⎫=- ⎪⎝⎭在小时内,高度从降至2697英尺,用水量为然后用数值积分求出两次水泵启动期间的用水量总用水量为 22q r h π=∆257(35.5026.97)2π⎛⎫=- ⎪⎝⎭10.954218.9678()q v t dx∆=⎰24220.8392()q v t dx∆=⎰21212Q q q q q =++∆+∆第3章算法步骤中点数值求导函数步骤及流程图开始对于每段前2点,f’(t1)=(-3f1+4f2-f3)/(t3-t1)f’(t2)=(f3-f1)/(t3-t1)对于每段后2点,f’(tn-1)=(fn-fn-2)/(tn-tn-2)f’(tn)=(3fn-4fn-1+fn-2)/(tn-tn-2)对于每段其余点,F’(ti)=(fi-2-8fi-1+8fi+1-fi+2)/(3ti+2-3ti-2)结束图 1 中点数值求导函数流程图三次样条插值函数步骤及流程图开始计算h,a,c,d追赶法求解m输出函数结束图2 三次样条插值函数流程图第4章算法实现main1 median 2chazhi2zhuigan23 Intergral4way25CountError6end源程序清单#include<>#include<>#define N 24double Q1=0,Q2=0,q1=0,q2=0,n[N]={0},m[N]={0};f\n",i,m[i]);DIA=57;q1=fabs(PI*(DIA/*(DIA/*(f[9]-f[0]))*;q2=fabs(PI*(DIA/*(DIA/*(f[19]-f[10]))*;Q2+=q1+q2+n[9]+n[20]+n[21];printf("\t\t方法2:积分与高度变化结合求用水量");printf("\n第1次水泵启动时用水量为:%f\n",n[9]);printf("第2次水泵启动时用水量为:%f\n",n[20]);printf("\n%f~%f用水量为:%f\n",t[0],t[9],q1);printf("%f~%f用水量为:%f\n",t[10],t[20],q2);printf("总用水量为:%f\n",Q2);printf("******************************************************************** ***********\n");}void CountError() //计算误差{double w;w=((Q1-n[9]-n[20]-n[21])-(Q2-n[9]-n[20]-n[21]))/(Q2-n[9]-n[20]-n[21]);printf("用水量误差为:%f%%\n",w*100);}void main(){double t[N]={0,,,,,,,,,,,,,,,,,,,,,,,};doublef[N]={3175,3110,3054,2994,2947,2892,2850,2795,2752,2697,3550,3445,3350,3260,3167,3087, 3012,2927,2842,2767,2697,3475,3397,3340};double v[N]={0};double S=**;for(int i=0;i<N;i++)f[i]=f[i]*S*;printf("数据已录入,现在计算\n");median(t,f,v);//计算导数for(i=0;i<N;i++)v[i]=-v[i];printf("中值求导计算完毕,各时间点流量导数为:\n");for(i=0;i<N;i++)printf("%",v[i]);printf("现在开始三次样条插值近似出导数函数\n");double s[2]={0};chazhi2(t,v,s);//计算拟合函数for(i=0;i<N;i++)f[i]=f[i]/S/;Integral(f,t,v);way2(t,f); //方法2计算总水量CountError(); //计算误差}程序运行图4 水塔流量程序运行结果图5 水塔流量程序运行结果运行结果说明:通过积分的方法算出的用水量为37879,通过综合计算的方法计算出的用水量为36363,两次结果都与实验说明相差8000,原因应该是计算过程中,曲线的拟合处出现了较大误差;而两次计算的相对误差为%,结果相对比较接近实验说明的要求。

相关主题