计算方法-实习1.docx

上传人:wj 文档编号:4869860 上传时间:2023-05-07 格式:DOCX 页数:3 大小:23.97KB
下载 相关 举报
计算方法-实习1.docx_第1页
第1页 / 共3页
计算方法-实习1.docx_第2页
第2页 / 共3页
计算方法-实习1.docx_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算方法-实习1.docx

《计算方法-实习1.docx》由会员分享,可在线阅读,更多相关《计算方法-实习1.docx(3页珍藏版)》请在冰点文库上搜索。

计算方法-实习1.docx

实习三之实习报告

一、题目

某疾病发生率y‰和年龄段x(每五年为一段,例如0-5岁为第一段,6-10岁为第二段,……)之间有形如y=aebx的关系。

试根据观测得到的如下数据表,用最小二乘法确定式中的参数a和b,并计算相应的均方误差与最大偏差。

X

1

2

3

4

5

6

7

8

9

y

0.898

2.38

3.07

1.84

2.02

1.94

2.22

2.77

4.02

X

10

11

12

13

14

15

16

17

18

19

y

4.76

5.46

6.53

10.9

16.5

22.5

35.7

50.6

61.6

81.8

二、解题的主要思想

本题采用的是最小二乘法原理对一系列的数据进行拟合,但由于此题若将其化为线性方程求解会造成均方误差较大,因此采用非线性方法求解。

由于所求得的非线性方程较为复杂,求导困难,可采用弦割法求解。

三、计算结果

a=0.236882,b=0.308978

s=8.655291,max=3.125623

其中s为均方误差,max为最大偏差

四、结果分析

从本次实习结果可以看出,本组数据进行指数型拟合效果并不是很好,其均方误差达8.655291,但从计算方法角度看,采用解非线性方程的方法在一定程度上提高了曲线的拟合程度。

虽然如此,在求解非线性方程组是由于弦割法本身存在精度不够高的缺点,只是结果精度也不够高,但相比于将非线性方程转化为线性方程的方法,无论是均方差还是最大偏差,其都有很大的改善。

因此,本次计算结果能符合要求。

五、源程序

#include

#include

#include

intmain(void){

doublex[19],y[19],a,b,m,n,c,d,s,max,s1[19],tm,tn,m1,n1,h1,k1,l1;

inti,j;

FILE*fp1,*fp2;

doublet(doubleg,doublex[],doubley[]);

if((fp1=fopen("f.txt","r+"))==NULL){

printf("Fileopenerror!

\n");

return0;

}

if((fp2=fopen("f2.txt","w+"))==NULL){

printf("Fileopenerror!

\n");

return0;

}

i=0;

while(!

feof(fp1)){

fscanf(fp1,"%lf",&x[i]);

fscanf(fp1,"%lf",&y[i]);

i++;

}

printf("Entertwonumber:

\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("Cannotclosethefile!

\n");

return0;

}

if(fclose(fp2)){

printf("Cannotclosethefile!

\n");

return0;

}

return0;

}

doublet(doubleg,doublex[],doubley[])

{

inti;

doublem,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[i]*y[i]*n;

k=k+n*n;

}

r=m*h/k-l;

returnr;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2