《数值分析》水塔问题_第1页
《数值分析》水塔问题_第2页
《数值分析》水塔问题_第3页
《数值分析》水塔问题_第4页
《数值分析》水塔问题_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、淮海工学院计算机工程学院实验报告书课程名: 数值分析 题 目: 水塔问题 班 级: 学 号: 姓 名: 评语:成绩: 指导教师: 批阅时间: 年 月 日一、课程设计目的:1训练学生灵活应用所学数值分析知识,独立完成问题分析,结合数值分析理论知识,编写程序求解指定问题。 2初步掌握解决实际问题过程中的对问题的分析、系统设计、程序编码、测试等基本方法和技能;3提高综合运用所学的理论知识和方法独立分析和解决问题的能力;4.训练用数值分析的思想方法和编程应用技能模拟解决实际问题,巩固、深化学生的理论知识,提高学生对数值分析的认知水平和编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风二、课程

2、设计任务与要求:课程设计题目:计算水塔的水流量【问题描述】 某居民区的民用自来水是由一个圆柱形的水塔提供,水塔高12.2米,直径17.4米。水塔是由水泵根据水塔内水位高低自动加水,一般每天水泵工作两次,现在需要了解该居民区用水规律与水泵的工作功率。按照设计,当水塔的水位降至最低水位,约8.2米时,水泵自动启动加水;当水位升高到一个最高水位,约10.8米时,水泵停止工作。可以考虑采用用水率(单位时间的用水量)来反映用水规律,并通过间隔一段时间测量水塔里的水位来估算用水率,原始数据表是某一天的测量记录数据,测量了28个时刻,但是由于其中有3个时刻遇到水泵正在向水塔供水,而无水位记录。试建立合适的数

3、学模型,推算任意时刻的用水率、一天的总用水量。进一步:可自己增加一些新的计算功能。 【问题假设】 1. 水塔中水流量是时间的连续光滑函数,与水泵工作与否无关,并忽略水位高度对水流速度的影响。2. 水泵工作与否完全取决于水塔内水位的高度。3. 水塔为标准的圆柱体。体积V=PI*D*D*h/4 其中D为底面直径,h为水位高。4. 水泵第一次供水时间段为8.967,10.954,第二次供水时间段为20.839,22.958。 【实验数据】 原始数据(单位:时刻(小时),水塔中水位(米)时刻t00.9211.8432.9493.8714.9785.900水位h9.6779.4799.3089.1258

4、.9828.8148.686时刻t7.0067.9288.9679.981110.92510.95412.032水位h8.5258.3888.220泵水泵水10.82010.500时刻t12.95413.87514.98215.90316.82617.93119.037水位h10.2109.9369.6539.4099.1808.9218.662时刻t19.95920.83922.01522.95823.88024.98625.908水位h8.4338.220泵水10.82010.59110.35410.180【实现提示】 由问题的要求,关键在于确定用水率函数,即单位时间内用水体积,记为f(t

5、),又称水流速度。如果能够通过测量数据,产生若干个时刻的用水率,也就是f(t)在若干个点的函数值,则f(t)的计算问题就可以转化为插值或拟合问题。【实现要求】1、在处理每个题目时,要求分别从数据处理阶段和程序设计阶段两个主要阶段实现课程设计,详细的通过文字以及插图等形式,按需求分析、数据处理、算法设计、代码、计算结果和程序执行的截图等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、设计的题目要求达到一定工作量,并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源

6、程序需加必要的注释;4、每位同学需提交可独立运行的程序;5、每位同学需独立提交设计报告书(每人一份),要求编排格式统一、规范、内容充实;6、课程设计实践作为培养学生动手能力的一种手段,单独考核。三、课程设计说明书【需求分析】根据一组关于若干个时刻的水塔内水位高度的数据,经过必要的处理,得到一组若干个时刻的用水率的数据,然后根据这一组数据提出假设,建立合适的数学模型,通过C语言程序将该模型的一些参数求出来,最后得到一条能够拟合这一组若干个时刻的用水率的光滑的函数,进而推算出任意一个时刻的用水率,并计算出一天的总用水量。如果还有余力可以增加更多的实际计算要求。【数据处理概要】1. 关于原始数据中有

7、三个时刻水泵是在泵水的处理:由问题假设可以知道水塔中水流量是时间的连续光滑函数,与水泵工作与否无关,如果将这三个时刻的数据忽略不计,是不影响设计结果的。所以设计中忽略这三个时刻的数据。2. 关于确定求解哪些时刻的用水率问题:我采用每两个时刻的中间时刻和这两个时刻之间的时间段内的平均用水率作为最后的若干时刻的用水率。3. 关于数据处理过程中三个无数据时刻的处理:按照处理需要,适当的舍弃边缘的数据和错误的结尾数据(比如要计算两个值的差,最后一项后面已经没有数据了,系统会在该数据后产生一个零,所以是错误的数据)。【详细设计】本设计报告按照我的设计步骤完成:1、将所给的数据中的时刻输入到Excel表格

8、中,如下图所示:2、计算出每两个相邻的时刻之间的时间差(表格列B(n)= A(n+1)- A(n)),然后除以2(表格列C(n)=A(n)+B(n)/2)得到相邻两个时刻的中间时刻:3、将原始数据中的水位数据输入到该表格中:4、根据公式:V=PI*D*D*h/4计算各个时刻水塔中水的体积(表格列E(n)=PI*D*D* D(n)/4),然后求出各个时间段内用水的体积(表格列F(n)=D(n)-D(n+1)):5、求中间时刻的用水率,即求该时间段(时刻差)内的平均用水量(表格列G(n)=F(n)/B(n)):6、将中间时刻和中间时刻的用水率复制到另一张表中,以便处理(这时共产生22组数据):到这

9、里所有的数据处理已经结束。接下来是研究数据所包含的规律,根据数据提出适当的数学模型,拟合一条光滑的连续的曲线。7、在Excel中有拟合曲线的工具,所以我先用Excel中的工具对这组数据进行了拟合画出散点图:通过添加趋势线,来拟合光滑曲线:对数据拟合如图像上图,使用多项式趋势线可以较合理的描述出数据的走向,用Excel很容易得出单位时间内用水体积的表达式为y = -0.0001x5 + 0.0104x4 - 0.3254x3 + 4.3588x2 - 21.169x + 64.71用Excel对该系列数据拟合之后,尝试用程序对该数据进行计算,通过最小二乘法,最高次为5次,得出的各项系数如下经过比

10、较,发现通过程序算得的数据与excel所得的表达式在可接受的误差范围之内。将该系数替换原先表达式的系数,即:y = -0.00015x5 + 0.012193x4 - 0.366317x3 +4.760591x222.665987x + 66.025230并在excel中生成相应图像:与之前的图像进行对比,发现两张图的趋势相差无几,如此可以得到任意时刻的用水率的表达式为f(x) = -0.00015x5 + 0.012193x4 - 0.366317x3 +4.760591x222.665987x + 66.025230,要求一天的用水量,则对f(x)进行积分:V=024f(t)dt=-0.0

11、00025t6+0.0024386t5-0.09157925t4+1.58686367t3-11.3329935t2+66.02523t+C|024即可求的一天的用水总量.程序源代码:#include<stdio.h>#include<math.h>#include<iostream.h>void yongShuiLv();void yongShuiLiang();void gongLv();void Approx(float,float,int,int,float); void main()int i;float a6;/多项式的待定系数个数float x

12、22=0.4605,1.382,2.396,3.41,4.4245,5.439,6.453,7.467,8.4475,11.493,12.493,13.4145,14.4285,15.4425,16.3645,17.3785,18.484,19.498,20.399,23.419,24.433,25.447;/22个时刻的值float y22=51.12036405,44.10152093,39.3445281,36.88021926,36.08693844,33.01166479,34.61458483,35.33279747,38.44874,70.58616637,74.79205304

13、,70.74232197,60.78930702,62.99681227,58.99594462,55.73472518,55.68433211,59.05993154,57.55529831,59.05993154,50.95438885,44.87523183;/22个时刻所对应的用水率Approx(x,y,22,5,a);for(i=0;i<=5;i+)printf("a%d=%fn",i,ai);printf("拟合多项式为:nf(t)=(%f)*t*t*t*t*t+(%f)*t*t*t*t+(%f)*t*t*t+(%f)*t*t+(%f)*t+(%

14、f)n",a5,a4,a3,a2,a1,a0);yongShuiLiang();gongLv();char s;while(1)/通过判断用户输入的字符是Y/N,来控制是否继续求某一时刻的用水率cout<<"您是否还要查询某时刻的用水率(Y/N):"<<endl;cin>>s;switch(s)case 'Y':yongShuiLv();break;case 'N':break;if(s='N')break;void Approx(float x,float y,int m,int

15、 n,float a)int i,j,t;float *c=new float(n+1)*(n+2);float power(int,float);void ColPivot(float *,int,float);for(i=0;i<=n;i+)for(j=0;j<=n;j+)*(c+i*(n+2)+j)=0;for(t=0;t<=m-1;t+)*(c+i*(n+2)+j)+=power(i+j,xt);*(c+i*(n+2)+n+1)=0;for(j=0;j<=m-1;j+)*(c+i*(n+2)+n+1)+=yj*power(i,xj);ColPivot(c,n+1

16、,a);delete c;void ColPivot(float *c,int n,float x)int i,j,t,k;float p;for(i=0;i<=n-2;i+)k=i;for(j=i+1;j<=n-1;j+)if(fabs(*(c+j*(n+1)+i)>(fabs(*(c+k*(n+1)+i)k=j;if(k!=i)for(j=i;j<=n;j+)p=*(c+i*(n+1)+j);*(c+i*(n+1)+j)=*(c+k*(n+1)+j);*(c+k*(n+1)+j)=p;for(j=i+1;j<=n-1;j+)p=(*(c+j*(n+1)+i)/

17、(*(c+i*(n+1)+i);for(t=i;t<=n;t+)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t);for(i=n-1;i>=0;i-)for(j=n-1;j>=i+1;j-)(*(c+i*(n+1)+n)-=xj*(*(c+i*(n+1)+j);xi=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i);float power(int i,float v)float a=1;while(i-)a*=v;return a;void yongShuiLv()/计算某时刻的用水率函数float t;cout<<"请输入

18、任意一个时刻,程序将就算出该时刻的用水率"<<endl;cin>>t;float f=-0.00015*t*t*t*t*t+0.012193*t*t*t*t-0.366317*t*t*t+4.760591*t*t-22.665987*t+66.025230;cout<<t<<"时刻的用水率是:"<<f<<"立方米/小时"<<endl;void yongShuiLiang()/计算一天居民总的用水量float v;v=-0.000025*24*24*24*24*24*24+0.0024386*24*24*24*24*24-0.09157925*24*24*24*24+1.58686367*24*24*24-11.3329935*24*24+66.02523*24;cout<<"这个居民区的居民一天的用水量约为:"<<v<<"立方米"<

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论