数值分析家乡温度
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淮海工学院计算机工程学院实验报告书
课程名:《数值分析》
题目:计算水塔水流量
数值拟合问题
班级:软件112
学号:
姓名:
课程设计题目1
计算水塔的水流量
一.题目描述
某居民区的民用自来水是由一个圆柱形的水塔提供,水塔高12.2米,直径17.4米,水塔是由水泵根据水塔内水位高低自动加水,一般每天水泵工作两次,现在需要了解该居民区用水规律也水泵的工作功率。按照设计,当水塔的水位降至最低水位,约为8.2米时,水泵自动启动加水;当水位升高到一个最高水位,约10.8米时,水泵停止工作。
可以考虑采用用水率(单位时间的用水量)来反映用水规律,并通过间隔一段时间测量水塔里的水位来估算用水率,原始数据表式某一天的测量记录数据,测量了28个时刻,但是由于其中有3个时刻遇到水泵正在向水塔供水,而无水位记录。
试建立合适的数学模型,推算任意时刻的用水率、一天的总用水量。
进一步:可自己增加一些新的计算功能。
由问题的要求,关键在于确定用水函数,即单位时间内用水体积,记为f(t),又称水流速度。如果能够通过测量数据,产生若干个时刻的用水率,也就是f(t)在若干个点的函数值,则f(t)的计算问题就可以转化为插值或拟合问题。
本问题假设:
1)水塔中水流量是时间的连续光滑函数,与水泵工作与否无关,并忽略水位高度对水流的影响。
2)水泵工作与否完全取决于水塔内水位高度。
3)水塔为标准圆柱体。体积V=π/4*D^2*h,其中D为底面直径,h为水位高。
4)水泵第一次供水时间段为[8.967,10.954],第二次供水时间段为[20.839,22.958]。
二.在Excel中做表格
求出各时刻用水率
用Excel所做的曲线
#include
#include
using namespace std;
void main()
{
int i;
float a[6],t=0.0,s,S=0,p;
float x[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};
float
y[22]={51.12,44.10,39.34,36.88,36.09,33.01,34.61,35.33,38.45,70.59,74.79,70.74,60.79, 63.00,59.00,55.73,55.68, 59.06,57.56,59.06,50.95,44.88};
void Approx(float[],float[],int,int,float[]);
Approx(x,y,22,5,a);
printf("**********************计算水塔的水流量
********************************\n");
printf("求得的各时刻用水率分别
为:\nf(t)=%ft^5+%ft^4%ft^3+%ft^2%ft+%f\n",a[5],a[4],a[3],a[2],a[1],a [0]);
printf("各时刻用水量如下表\n");
printf("时间(h)\t\t用水量(m^3)\n");
for(i=0;i<24;i++)
{
s=a[5]*t*t*t*t*t+a[4]*t*t*t*t+a[3]*t*t*t+a[2]*t*t+a[1]*t+a[0];
S=s+S;
printf("%f\t%f\n",t,s);
t=t+1.0;
}
printf("************************该程序其他功能*************************\n");
printf("1.请输入你要查询的时刻:");
scanf("%f",&p);
s=a[5]*p*p*p*p*p+a[4]*p*p*p*p+a[3]*p*p*p+a[2]*p*p+a[1]*p+a[0];
printf("%f时的用水率为:%f(m^3)\n",p,s);
printf("2.总用水量为:%f(m^3)\n",S);
system ("pause");
}
void Approx(float x[],float y[],int m,int 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,x[t]);
}
*(c+i*(n+2)+n+1)=0;
for(j=0;j<=m-1;j++)
*(c+i*(n+2)+n+1)+=y[j]*power(i,x[j]);
}
ColPivot(c,n+1,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-2;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))
k=j;
if(k!=i)