数值计算方法实验3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学院(系)名称:
附录(源程序及运行结果):
一.变步长梯形法
#include
#include
double f(double x){return 4/(1+x*x);}
void main(){
double a,b,h,T1,T2,e,S,x;
printf("请输入区间a和b:");
scanf("%lf,%lf",&a,&b);
printf("精度:");
scanf("%lf",&e);
h=b-a;
T2=h/2*(f(a)+f(b));
do{ T1=T2;
S=0;
x=a+h/2;
do{ S=S+f(x);
x=x+h;
}while(x
T2=T1/2+h*S/2;
h=h/2;
}while(fabs(T2-T1)>=e);
printf("用变步长梯形法输出T2:%lf\n",T2);
}
运行结果:
二.龙贝格积分法
#include
#include
double f(double x){return sin(x);}
void main(){
double a,b,h,T1,T2=1,e,S,S1,S2=1,x,C1,C2,R1=0,R2=1; printf("请输入区间a和b:");
scanf("%lf,%lf",&a,&b);
printf("精度:");
scanf("%lf",&e);
h=2*(b-a);
T2=(b-a)/2*(f(a)+f(b));
int k=0;
while(fabs(R2-R1)>=e){
k=k+1;
h=h/2;
T1=T2;
S1=S2;
S=0;
x=a+h/2;
do{S=S+f(x);
x=x+h;
}while(x
T2=T1/2+h/2*S;
S2=T2+(T2-T1)/3;
if(k==1){continue;}
C2=S2+(S2-S1)/15;
if(k==2){C1=C2;continue;}
R2=C2+(C2-C1)/63;
if(k==3){R1=R2;C1=C2;continue;}
C1=C2;
R1=R2;
}
printf("%lf",R2);
}
运行结果: