网站大量收购独家精品文档,联系QQ:2885784924

计算方法-实习1.doc.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档