实验六数值积分数值分析实验报告Word格式.docx
《实验六数值积分数值分析实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《实验六数值积分数值分析实验报告Word格式.docx(8页珍藏版)》请在冰点文库上搜索。
式中,12i_为[1,ii__]的中点,即1212ii__h。
(3)先用梯形公式计算()/2_[()()]iTbafafb,然后,将求积区间(a,b)逐次折半的方法,令区间长度()/2(0,1,2....)ihbai。
计算211/2_
/2_
(_(1/2))nnnkTThfahk,式中2in。
于是,得到辛普生公式22()/3nnnnSTTT。
科特斯求积公式22()/15nnnnCSSS
最后,得到龙贝格求积公式22()/63nnnnRCCC
利用上述各式计算,直到相邻两次的积分结果之差满足精度要求。
三、实验内容利用复化梯形公式,复化辛普生公式和龙贝格数值积分公式计算
221__e_ed和12041_d_的近似值,要求误差为71_102,将计算结果与精度值比较,并对计算结果进行分析。
四、实验程序
#include“stdio.h”#include“math.h”#include“iostream.h”#include“iomanip.h”
double
f1(double_){
return__e_p(_);
}doublef2(double_){
return4/(1+___);
}//.............梯形公式..............................
T(doublea,doubleb,intn){
double_[20__00];
doubleh=(b-a)/n;
for(inti=0;
i<
n;
i++){
_[i]=a+i_h;
}
doublem=0;
for(i=1;
=n-1;
m=m+f1(_[i]);
returnh/2_(f1(a)+2_m+f1(b));
}voidteT
{
inta=1,o=0;
doubleq=T(1,2,a);
doublew=T(1,2,2_a);
while(fabs(w-q)>
0.00000005){
o++;
a=a_2;
q=T(1,2,a);
w=T(1,2,2_a);
printf(“%d
”,o);
printf(“T=%15.10f”,T(1,2,2_a));
}doubleT1(doublea,doubleb,intn){
double_[10000];
i++){
m=m+f2(_[i]);
returnh/2_(f2(a)+2_m+f2(b));
}voidteT1{
intb=1,p=0;
doubles=T1(0,1,b);
doubled=T1(0,1,2_b);
while(fabs(s-d)>
0.00000005){
p++;
b=b_2;
s=T1(0,1,b);
d=T1(0,1,2_b);
printf(“\n%d
”,p);
printf(“T1=%15.10f”,T1(0,1,b));
}//......................辛普生公式........................................
doubleS(doublea,doubleb,intn){
doubles=f1(a)-f1(b);
double_;
_=a;
_=_+h/2;
s=s+4_f1(_);
s=s+2_f1(_);
s=s_h/6;
returns;
}voidteS{
intc=1,l=0;
doubleg=S(1,2,c);
doubleh=S(1,2,2_c);
while(fabs(h-g)>
l++;
c=c_2;
g=S(1,2,c);
h=S(1,2,2_c);
”,l);
printf(“S=%15.10f”,S(1,2,c));
}doubleS1(doublea,doubleb,intn){
doubles=f2(a)-f2(b);
s=s+4_f2(_);
s=s+2_f2(_);
}voidteS1{
intm=1,v=0;
doublej=S1(0,1,m);
doublek=S1(0,1,2_m);
while(fabs(k-j)>
0.00000005){
v++;
m=m_2;
j=S1(0,1,m);
k=S1(0,1,2_m);
”,v);
printf(“S1=%15.10f\n”,S1(0,1,m));
}//.................龙贝格公式...........................
void
L(doublea,doubleb){
doubleh=b-a;
doublet1=(f1(a)+f1(b))_h/2,t2;
intk=1;
doubled=0;
doubler1=0,r2=1;
doublec1,c2;
doubles1=0,_,s2;
while
(1){
if(fabs(r2-r1)<
0.00000005)
break;
s1=0;
_=a+h/2;
while(_<
b){
s1=s1+f1(_);
_=_+h;
t2=t1/2+h/2_s1;
s2=t2+1/3_(t2-t1);
if(k==1){
k=k+1;
h=h/2;
t1=t2;
continue;
c2=s2+1/15_(s2-s1);
if(k==2){
c1=c2;
s1=s2;
r1=d;
r2=c2+1/63_(c2-c1);
if(k==3){
d=r2;
k=1;
printf(“
L=%15.10f\n”,r2);
}voidmain{
teT;
teT1;
teS;
teS1;
L(1,2);
}五、实验结果
六、结果分析
在对积分区间作同样分割或利用同样个数的函数值的条件下,复化辛普生公式比复化梯形公式的计算精度高。
在利用复合求积公式计算积分之前,必须给出适当的步长bahn。
步长太大,精度难以保证;
步长太小,则会导致计算量的增加。
而计算之前给出一个恰当的步长,往往非常困难,因此采用了变步长的方法&
mdash;
&
龙贝格算法。