- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算方法-实习1.doc
实习三之实习报告
一、题目
某疾病发生率y‰和年龄段x(每五年为一段,例如0-5岁为第一段,6-10岁为第二段,……)之间有形如y=aebx的关系。试根据观测得到的如下数据表,用最小二乘法确定式中的参数a和b,并计算相应的均方误差与最大偏差。
X123456789y0.8982.383.071.842.021.942.222.774.02
X10111213141516171819y4.765.466.5310.916.522.535.750.661.681.8二、解题的主要思想
本题采用的是最小二乘法原理对一系列的数据进行拟合,但由于此题若将其化为线性方程求解会造成均方误差较大,因此采用非线性方法求解。由于所求得的非线性方程较为复杂,求导困难,可采用弦割法求解。
三、计算结果
a=0.236882,b=0.308978
s=8.655291,max=3.125623
其中s为均方误差,max为最大偏差
四、结果分析
从本次实习结果可以看出,本组数据进行指数型拟合效果并不是很好,其均方误差达8.655291,但从计算方法角度看,采用解非线性方程的方法在一定程度上提高了曲线的拟合程度。虽然如此,在求解非线性方程组是由于弦割法本身存在精度不够高的缺点,只是结果精度也不够高,但相比于将非线性方程转化为线性方程的方法,无论是均方差还是最大偏差,其都有很大的改善。因此,本次计算结果能符合要求。
五、源程序
#includestdio.h
#includestdlib.h
#includemath.h
int main(void){
double x[19],y[19],a,b,m,n,c,d,s,max,s1[19],tm,tn,m1,n1,h1,k1,l1;
int i,j;
FILE *fp1,*fp2;
double t(double g,double x[],double y[]);
if((fp1=fopen(f.txt,r+))==NULL){
printf(File open error!\n);
return 0;
}
if((fp2=fopen(f2.txt,w+))==NULL){
printf(File open error!\n);
return 0;
}
i=0;
while(!feof(fp1)){
fscanf(fp1,%lf,x[i]);
fscanf(fp1,%lf,y[i]);
i++;
}
printf(Enter two number:\n);
scanf(%lf %lf,m,n);
while(fabs(m-n)0.00001){
b=m-t(m,x,y)*(m-n)/(t(m,x,y)-t(n,x,y));
n=m;
m=b;
}
c=d=0;
for(i=0;i=18;i++){
c=c+y[i]*exp(m*x[i]);
d=d+exp(m*x[i]*2);
}
a=c/d;
fprintf(fp2,a=%f,b=%f\n,a,m);
s=0;
for(i=0;i=18;i++){
s1[i]=a*exp(m*x[i])-y[i];
s=s+s1[i]*s1[i];
}
max=s1[0];
for(i=1;i=18;i++)
if(s1[i]max)
max=s1[i];
s=sqrt(s);
fprintf(fp2,s=%f,max=%f\n,s,max);
if(fclose(fp1)){
printf(Can not close the file!\n);
return 0;
}
if(fclose(fp2)){
printf(Can not close the file!\n);
return 0;
}
return 0;
}
double t(double g,double x[],double y[])
{
int i;
double m,n,h,l,k,r;
m=h=l=k=0;
for(i=0;i=18;i++){
n=exp(g*x[i]);
m=m+n*y[i];
h=h+x[i]*n*n;
l=l+x
文档评论(0)