《数值计算方法》实验 (6)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学《数值计算方法》
实
验
报
告
s1+=(*f)(temp1);/*公式(22)*/
s2+=(*f)(temp2);/*公式(22)*/ }
s=h/6.f*((*f)(a)+4*s1+2*s2+(*f)(b));/*复化辛卜生公式*/
printf("S(%d)=%11.10f\n",n,s);
fprintf(fp,"S(%d)=%11.10f\n",n,s);
deta=s-s0; /*前后两值的间距*/
if(fabs(deta)>eps)/*判断前后所求值的间距是否已满足精度*/
{ n++;/*区间等分数加1*/
s1=0;
s2=0;
s0=s; }
else
break;
}
○3数据处理与分析
当a=0,b=1,eps=1e-6;时
S(1)=0.7833333333,S(2)=0.7853921569
S(3)=0.7853979452,S(4)=0.7853981256
从计算结果看n=4时满足精度要求,即n=4时达到6为有效数字。
当a=0,b=1,eps=5e-10时
S(1)=0.7833333333,S(2)=0.7853921569,S(3)=0.7853979452
S(4)=0.7853981256,S(5)=0.7853981535,S(6)=0.7853981601
S(7)=0.7853981621,S(8)=0.7853981628,S(9)=0.7853981631
从计算结果看n=9时满足精度要求。在n=7时有9位有效数字,而同时可知n=4时也已达到7位有效数字。MATLAB绘图
temp2=a+h/2.;
c2=(*f)(temp2);/*公式(25)在k=0下的值*/
temp3=a+3*h/4.;
c3=(*f)(temp3);/*公式(26)在k=0下的值*/
for(k=1;k!=n;k++)
temp1=a+k*h+h/4.;
{
temp2=a+k*h+h/2;
temp3=a+k*h+3*h/4;
temp4=a+k*h;
c1+=(*f)(temp1);/*公式(24)*/
c2+=(*f)(temp2);/*公式(25)*/
c3+=(*f)(temp3);/*公式(26)*/
c4+=(*f)(temp4);/*公式(27)*/ }
c=h/90.f*(7*(*f)(a)+32*c1+12*c2+32*c3+14*c4+7*(*f)(b));/*复化复化柯特斯公式*/ printf("C(%d)=%11.10f\n",n,c);
fprintf(fp,"C(%d)=%11.10f\n",n,c);
deta=c-c0;/*前后两值的间距*/
if(fabs(deta)>eps)/*判断前后所求值的间距是否已满足精度*/
{ n++;/*区间等分数加1*/
c1=0;
c2=0;
c3=0;
c4=0;
c0=c; }
else
break;
}
○3数据处理与分析
当a=0,b=1,eps=1e-6;时
t1=t2;
h/=2.0;/*把区间n等分,每个区间的长度*/
}
else
break;
}
○3数据处理与分析
当a=0,b=1,eps=1e-6;时
T(2)=0.7750000000,T(4)=0.7827941176,T(8)=0.7847471236
T(16)=0.7852354030,T(32)=0.7853574733,T(64)=0.7853879909
T(128)=0.7853956203,T(256)=0.7853975276,T(512)=0.7853980045
从计算结果看n=512时满足精度要求,即n=512时达到6位有效数字。
当a=0,b=1,eps=5e-10时
T(2)=0.7750000000,T(4)=0.7827941176,T(8)=0.7847471236
T(16)=0.7852354030,T(32)=0.7853574733,T(64)=0.7853879909
T(128)=0.7853956203,T(256)=0.7853975276,T(512)=0.7853980045
T(1024)=0.7853981237,T(2048)=0.7853981535,T(4096)=0.7853981609
T(8192)=0.7853981628,T(16384)=0.7853981632
从计算结果看n=16384,满足精度要求,在n=4096时达到8位有效数字。
f 12121212,,,,/2,*2r r c c s s t t h n ======
○
2主要程序代码 while(1)
{
temp=0;
for(k=0;k!=n;k++)
{
x=a+k*h+h/2.;/*公式(31)*/
temp+=(*f)(x);/*公式(32)*/
}
t2=(t1+temp*h)/2.f;/*公式(33)*/
s2=t2+(t2-t1)/3;/*公式(34)*/
/*核心算法中c 步*/
if(n>=2)
{
c2=s2+(s2-s1)/15; }
/*核心算法中d 步*/
if(n>=4)
{
r2=c2+(c2-c1)/63;
/*核心算法中e 步*/
printf("R(%d)=%11.10f\n",n/4,r2);
fprintf(fp,"R(%d)=%11.10f\n",n/4,r2);
deta1=r2-r1;
if(fabs(deta1) } r1=r2;c1=c2;s1=s2;t1=t2;h/=2.0;n*=2;/*核心算法中f 步*/ }