logo资料库

居民区供水问题-数学建模.doc

第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
资料共10页,剩余部分请下载后查看
2010 年上数学建模期末考试试卷 题目:居民区供水问题 姓名: 学号: 班级: 联系方式: (伍) (周) (曹) 分工: 摘要、问题分析、模型假设: 编 MATLAB 程序部分,符号说明: 结果分析,检验及改进: 模型的优缺点及文字录入: 完善阶段:
摘 要: 居民供水问题是贴近生活的实际问题。为了有效的利用和节约水资源,我们应该采取 积极有效的办法,用所采集数据信息通过建立数学模型,来切实的解决居民的用水率、总用 水量以及水泵工作的效率等问题。例如:某居民区的民用自来水是由圆柱形水塔提供,已知 水塔高 12.2 米,直径 17.4 米.水塔是由水泵根据水塔内水位高低自动加水,一般每天水泵工 作两次..按照设计,当水塔的水位降至最低水位,约 8.2 米,水泵自动启动加水;当水位升高 到一个最高水位, 约 10.8 米,水泵停止工作。 现在需要了解居民区用水规律与水泵的工作功率。 可以考虑采用用水率(单位时间的用水量)来反映用水规律,并通过间隔一段时间测量水 塔里的水位来估算用水率。 为了解决此类问题,我们主要采用 matlab 中的数据插值以及数据拟合等方法。 因此我们在生产实践和科学研究中,如果遇到这样的问题:由实验或测量得到的一批离 散样点,需要确定满足特定要求的曲线或曲面(即变量之间的函数关系或预测样点之外的数 据)。如果要求曲线(面)通过所给的所有数据点(即确定一个初等函数通过已知各数据, 一般用多项式或分段多项式),这就是数据插值。在数据较少的情况下,这样做能够取得好 的效果。 但是,如果数据较多,那么插值函数是一个次数很高的函数,比较复杂。如果不要求曲 线(面)通过所有的数据点,而是要求它反映对象整体的变化趋势,可得到更简单实用的近 似函数,这就是数据拟合。 函数插值和曲线拟合都是要根据一组数据构造一个函数作为近似,由于近似的要求不 同,二者在数学方法上是完全不同的。 获得的基本结果:(1)任意时刻的用水率; 第 一 段 时 间 :0.2211 0.1467 第 二 段 时 间 :0.3311 0.2392 0.1437 0.1426 0.2508 0.2435 0.1547 0.2377 0.1977 0.1784 0.1607 0.1505 0.1686 0.3092 0.2902 0.2742 0.2610 0.2392 (2)一天的用水总量; 1.2578e+003 (3)水泵的工作功率(m³/h) 第一段:1.5614 第二段:1.1851 关键字:插值、拟合、用水率、总用水量、工作功率。 (一)、问题分析 居民区的民用自来水是由圆柱形水塔提供,水塔高 12.2 米,直径 17.4 米.水塔是由水泵 根据水塔内水位高低自动加水,一般每天水泵工作两次.现在需要了解居民区用水规律与水 泵的工作功率.按照设计,当水塔的水位降至最低水位,约 8.2 米,水泵自动启动加水;当水位 升高到一个最高水位, 约 10.8 米,水泵停止工作。 可以考虑采用用水率(单位时间的用水量)来反映用水规律,并通过间隔一段时间测量水 塔里的水位来估算用水率,表 1 是某一天的测量记录数据,测量了 28 个时刻,但是由于其中有
3 个时刻遇到水泵正在向水塔供水,而无水位记录(表 1 中用//表示)。 表 1 原始数据(单位:时刻(小时),水塔中水位(米)) 时刻 t 水位 时刻 t 水位 时刻 t 水位 时刻 t 水位 0 9.677 7.006 8.525 12.954 10.210 19.959 8.433 0.921 9.479 7.928 8.388 1.843 9.308 8.967 8.220 2.949 9.125 3.871 8.982 9.9811 10.925 // // 13.875 14.982 15.903 16.826 9.936 9.653 20.839 22.015 8.220 // 9.409 22.958 10.820 9.180 23.880 10.597 4.978 8.814 10.954 10.820 17.931 8.921 24.986 10.354 5.900 8.686 12.032 10.500 19.037 8.662 25.908 10.180 流量是时间的连续函数,只取决于水位差,与水位本身无关,与水泵是否工作无关。按 照 Torricelli 定律从小孔流出的液体的速度正比于水面高度的平方根,题目给出水塔的最高 和最低水位分别为 10.8 米和 8.2 米(设出水口的水位为 0),因为 2.8/8.10 =1.15,可以 忽略水位对流速的影响。 要推算任意时刻的用水率,只要推算出任意时刻的水流量即可。而流量只要知道水流出 来的体积与时间即可,水塔是圆柱形,横截面积是常数,在不供水阶段很容易求出。因此关 键是如何估计供水时段的流量。在水泵工作时段的流量我们只能用不供水时段的拟合得出, 首先用表中数据拟合水位~时间函数,然后对之求导即可得到任意时段的流量。 求出了任意时段的用水率,一天的总用水量也迎刃而解。水泵的工作效率在供水时段 求出,而居民每天的总供水都是由水泵供水,所以水泵工作效率就是一天总供水量与水泵工 作时间的商。 (二)、模型假设 1.假设忽略水位对流速的影响; 2.假设每次水泵供水时水流量都是均匀的; 3.假设忽略采集数据元素的误差; 4.假设水泵工作的时候对居民的供水流量无影响。 (三)、符号说明 t1——第一阶段水流量的时间段; t2——第二阶段水流量的时间段; t3——第三阶段水流量的时间段; t4——第二时段 19.959,20.839 两点和第 3 时段 23.880,24.986 两点; h1——第一阶段水位高度变化段; h2——第二阶段水位高度变化段; h3——第三阶段水位高度变化段; a1——第一时段的流量; x1——第一时刻各时刻的流量; x12——第一供水时段各时刻的流量; x3——第二供水时段各时刻的流量; xx3——第 2 时段 20,20.8 两点和第 3 时段 23.88,24.99 两点的流量;
y1——第一时段用水量; y2——第二时段用水量; y12——第一水泵供水时段用水量; y3——第二水泵供水时段用水量; y——总用水量; p1——第一时段水泵功率; p2——第二时段水泵功率; dt3——两点时刻差分值; dh3——两点水位差分值; (四)、相关知识 1.数据插值的基本方法 拉格朗日插值 若知道函数 y = )(xf 在互异的两个点 0x 和 1x 处的函数值 0y 和 1y ,而想估计该函数在 )(1 xL 另一点处的函数值,最自然的想法是作过点( 0x , 0y )和点( 1x , 1y )的直线 y = , 作为准确值的近似值,如果得到的结果误差太大,还可增加一点 )(xf 的函数值, 用 即已知 y = )(xf 在互异的三个点 0x , 1x 和 2x 处的函数值 0y , 1y 和 2y ,可以构造过这三 点的二次曲线 y = )(f 的近似值。 作为准确值 )(1 L ,用 )(2 L )(2 xL 一般的,若已知 y = )(xf 在互异的 n +1 个点 0x , 1x ,…, nx 处的函数值 0y , 1y ,…, ny ,则可以考虑构造一个过这 n +1 个点的次数不超过 n 的多项式 am 1 + ma )(xLn = mxa0 + 1 mxa 1 +…+ x 通过所有 n +1 个点,即满足 ( k n xL )(f 的近似值。这样构造出来的多项式 = ky ,k =0,1,…,n 作为准确值 然后用 ) )(nL )(xLn (1) (2) )(xLn 称为 )(xf 的 n 次 拉格朗日插值多项式或插值函数。 分段插值 多项式历来都被认为是最好的逼近工具之一,它插值光滑,但不具有收敛性,会随着节 点数目增多而次数升高,一般不宜采用高次多项式(如 m >7)插值,否则逼近的效果往往 )(xLn 在区间中部趋于 )(xf , 是不理想的,甚至发生龙格振荡(当节点数目 n 不断增大时, 但对于区间两端的 x , )(xLn 并不趋于 )(xf ,也称龙格现象)。 在插值范围较小,用低次插值往往就能奏效。最直观的办法就是将各数据点用折线连接 起来,这种增加节点,用分段低次多项式插值的化整为零的处理方法称作分段插值法,即不 去寻求整个插值区间上的一个高次多项式,而是把区间划分为若干个小区间。如果 a = 0x < 1x <…< nx =b (3) 那么分段线性插值公式为 )(xP = x x    1 i i x i x y i 1  + x x i   x i x 1  i 1  y i , 1ix < x ≤ ix ,i =0,1,…, n (4) 分段线性插值通常有较好的收敛性和稳定性,算法简单,克服了龙格现象,其缺点是不如拉 格朗日插值多项式光滑。 样条插值 分段线性插值函数在节点的一阶导数一般不存在,且不光滑,这就导致了样条插值函数 的提出。在机械制造、航海、航空工业中,经常需要解决下列问题:已知一些数据点( 0x ,
0y ),( 1x , 1y ),( nx , ny ),如何全部通过这些数据点作一条比较光滑的曲线呢? 绘图员解决了这一问题,首先把数据描绘在平面上,再把一根富有弹性的细直条(称为 样条)弯曲,使其一边通过这些数据点,用压铁固定其形状,沿样条边绘出一条光滑的曲线, 往往要用几根样条,分段完成上述工作,同时也应让连接点处保持光滑。对绘图员用样条画 出的曲线,进行数学模拟,就导出了样条函数的概念。如今已经成为了一个应用极为广泛的 数学分支。现在数学上所说的样条,实质上指分段多项式的光滑连接。 设有区间[ a ,b ]的一个划分如(3)式,称分段函数 )(xS 为 k 次样条函数,若它有: (1) )(xS 在每个小区间上的次数不超过 k 多项式; (2) (3) )(xS 在区间[ a ,b ]上有 k -1 阶连续的导数; )(xS i = iy 用样条函数作出的插值称为样条插值,工程上广泛采用三次样条插值。 2.曲线拟合的基本方法 曲线拟合问题是指:已知平面上 n 个点( ix , iy ),i =0,1,…, n , ix 互不相同, 寻求函数 y = )(xf ,使 )(xf 在某种准则下与所有数据点最为接近,即曲线拟合得最好。 线性最小二乘法是解决曲线拟合最常用的方法,其基本思路是,令 (5) )(xrk 是事先选定的一组函数,系数 ka ( k =0,1,…, m , m < n )待定。寻求 ka , +…+ + )(22 xra ra mm )(x )(xf = )(11 xra 其中 使得残差平方和 n Q = i 1  ( ( ixf )  2 i )y (6) 达到最小。这里的建模原理实质上与实验七中的回归分析是一致的。 3.数据插值与拟合的 MATLAB 命令 对于多项式插值和拟合,有一个方便的方法 p = polyfit( x , y , m ) 用 m 次多项式拟合向量数据(x,y),返回多项式(1)的降 冥系数。当 m≥n-1 时,polyfit 实现多项式插值,p 返回多项式的系数向量; y = polyval( p , x ) 求 polyfit 所得的多项式在 x 处的插值 y,它是准确值 f(x)的 近似值; 对于一维和二维插值,其命令格式如下 yi = interp1( x , y , xi , method ) 求解一维插值问题,x,y 分别表示数据点的横、 纵坐标向量,且 x 要单调。xi 为插值点,它不能走出 x 的范围。method 为可选参数, 对应四种插值方法: 线性插值:'linear';(是缺省值) 分段三次插值:'cubic' 最近邻点插值:'nearest'; 三次样条插值:'spline'; ZI = interp2( X , Y , Z , XI , YI , method ) 求解二维插值,X ,Y 分别是 m、n 维族 自变量,均单调递增;Z 是 m×n 维矩阵,标明相应于所给数据的函数值。向量 XI , YI 给定网格点的横、纵坐标,ZI 返回函数在网格坐标(XI,YI)处的函数值。XI,YI 应 是方向不同的向量,即一个是行向量,一个是列向量。method 的定义与 interp1 命令中 的定义是一致的; ZI = griddata( x , y , z , XI , YI , method ) 插值基点为散乱的节点,各参数定义与二 维插值中一致,只不过向量 x,y 散乱无序,同时 method 方法中多了一种 MATLAB 提 供的网格插值方法 V4; 有关上述命令的详细内容可在 MATLAB 帮助文件中查阅。
对于线性最小二乘拟合,用得较多的是多项式拟合,使用前面所讲的 polyfit 命令;若 要寻求 f(x)任意的非线性函数,则称为非线性最小二乘拟合,MATLAB 提供了两个求解 命令:curfit 和 leastsq。二者都要事先定义 M-函数文件,但定义方式稍有不同: c = curvefit( 'fun' , c0 , xdata , ydata,options) 求含参量非线性函数 fun 中的参变量 c,使残差平方和(6)最小,xdata,ydata 为数据点的横、纵坐标向量,c0 为参变量的 迭代初始值,options 见实验一表 1(它可以缺省);非线性函数 fun 的 M-函数文件定 义方式为:fun( c , xdata); c = leastsq( 'fun' , c0 , options) 求含参量非线性函数 fun 中的参变量 c,使得各数 据点函数值 fun 的平方和最小,命令中各参数定义与 curvefit 命令中一致,非线性函数 fun 的 M-函数文件定义方式为:fun( c , xdata , ydata),这里的 fun 已经与数据点的函 数值向量 ydata 作差; (五)、模型的建立与求解 首先考虑拟合水位~时间函数,从表 1 测量记录看,一天有两个供水时段(以下称第 1 供水时段和第 2 供水时段),和三个水泵不工作时段(简称第 1 时段t =0 到t =8.967,第 2 时段 t =10.954 到t =20.839,第 3 时段 t =22.958 以后)。对第 1、2 时段的测量数据可直接 分别作多项式拟合,得到水位函数。为使拟合曲线比较光滑,多项式次数不要太高,一般在 3~6 次。由于第 3 时段只有 3 个测量记录,无法对这一时段的水位作出较好的拟合。 接着确定流量~时间函数,对于第 1、2 时段只需将水位函数求导数即可,对于两个供 水时段的流量,则用供水时段前后(水泵不工作时段)的流量拟合得到,并将拟合得到的第 2 供水时段流量外推,将第 3 时段流量包含在第 2 供水时段内。 最后一天总用水量等于两个水泵不工作时段和两个供水时段(将第 3 时段包含在第 2 供水时段内)用水量之和,它们都可以由流量对时间的积分再乘以水塔截面积得到。 利用 MATLAB 命令求解如下: 拟合第 1、2 时段的水位,并导出流量,t,h 为时刻和水位测量记录(水泵启动的 4 个 时刻不输入),程度代码如下: >> t1=[0 0.921 1.843 2.949 3.871 4.978 5.900 7.006 7.928 8.967]; >> h1=[9.677 9.479 9.308 9.125 8.982 8.814 8.686 8.525 8.388 8.220]; >> c1=polyfit(t1,h1,3); % 用 3 次多项式拟合第 1 时段的水位 >> a1=polyder(c1); % 对拟合的多项式求导数得到第 1 时段流量 >> t1=0:0.1:9; % 对第 1 时段的时刻进行划分 >> x1=abs(polyval(a1,t1)); % 计算第 1 时段各时刻的流量 类似地,可计算第 2 时段各时刻的流量。 >> t2=[10.954 12.032 12.954 13.875 14.982 15.903 16.826 17.931 19.037 19.959 20.839]; >> h2=[10.820 10.500 10.210 9.936 9.653 9.409 9.180 8.921 8.662 8.433 8.220]; >> c2=polyfit(t2,h2,3); >> a2=polyder(c2); >> t2=11:1:20.8;
>> x2=abs(polyval(a2,t2)); 在第 1 供水时段(t=8~9)之前(即第 1 时段)和之后(即第 2 时段)各取几点,其 流量已经得到,用它们拟合水泵第 1 供水时段的流量。为使流量函数在 t=8 和 t=9 连续, 我们简单地只取 4 个点,拟合 3 次多项式(即曲线必过这 4 个点),实现如下: >> xx1=abs(polyval(a1,[8 9])); >> xx2=abs(polyval(a2,[1 2])); >> xx12=[xx1,xx2]; >> c12=polyfit([8 9 1 2],xx12,3); % 拟合水泵供水时段的流量函数 >> t12=9:0.1:11; >> x12=polyval(c12,t12); % 计算第 1 供水时段各时刻的流量 在第 2 供水时段之前取 t=20,20.8 两点的流水量,第 3 时段仅有 4 个水位记录,我们 用差分得到流量,然后用这 4 个数值拟合第 2 供水时段的流量: >>t3=[22.958 23.880 24.986 25.908]; >> h3=[10.820 10.597 10.354 10.180]; >> dt3=diff(t3(1:4)); % 最后 3 个时刻的两两之差 >> dh3=diff(h3(1:4)); % 最后 3 个水位的两两之差 >> dht3=-dh3./dt3; % 用差分计算 t3(1)和 t3(2)的流量 >> t4=[19.959 20.839 23.880 24.986]; % 取第 2 时段 19.959,20.839 两点和第 3 时段 23.880,24.986 两点 >> xx3=[abs(polyval(a2,t4(1:2))),dht3]; % 取第 2 时段 20,20.8 两点和第 3 时段 23.88,24.99 两点的流量 >> [X Y]=meshgrid(t4,xx3); >> c3=polyfit(X,Y,3); % 拟合出第 2 水泵供水时段的流量函数 >> t3=20.8:0.1:24; >> x3=polyval(c3,tp3); % 输出第 2 供水时段(外推到 t=24)各时刻的流量 求第 1、2 时段和第 1、2 供水时段流量的积分之和,就是一天总用水量。虽然诸时段的 流量已表示为多项式函数,积分可以解析地算出,这里仍可用数值积分计算: 水塔截面积是常数: S =(17.4/2)2=237.8(m2)) >> y1=0.1*trapz(x1) % 第 1 时段用水量,0.1 为积分步长 y1 = 1.4606 >> y2=0.1*trapz(x2) % 第 2 时段用水量 y2 =
2.5815 >> y12=0.1*trapz(x12) % 第 1 水泵供水时段用水量 y12 = 0.5228 >> y3=0.1*trapz(x3) % 第 2 水泵供水时段用水量 y3 = 0.7246 >> y=(y1+y2+y12+y3)*237.8 % 总用水量为水位差乘以水塔截面积 y = 1.2578e+003 p1=(y12+2.6)/2 >> % p1 为第一时段水泵的功率 p1 = 1.5614 >> t2=20.8:0.1:23; >>x2=polyval(c3,t2); >>p2=(0.1*trapz(x3)+2.6)/2.2 %为第二时段水泵的功率 p2 = 1.185 (五)、结果分析、检验及改进 某一时段水位下降量乘以水塔的截面积(水塔截面积是常数 S =(17.4/2)2=237.8 (m2))就得到这一时段的用水量。这个数值可以还可以用来检验拟合效果。 计算出来的各时段用水量可以用测量记录来检验,y1 可用第 1 时段水位测量下降高度 为 9.68-8.220=1.46 来检验,类似地,y2 用 10.820-8.22=2.6 来检验。 依据第一、第二两段时间内的流量情况绘出流量与时间的点关系图(流量曲线图):
分享到:
收藏