1.用变步长梯形法求下列积分,使精确度达到10-4。
要求:
(1) 精度ε和区间端点a,b的信息从键盘终端输入;
(2) 打印输出每一步的计算结果。
源代码:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x,a,s,b,e,h,T1,T2;
cout<<"请输入区间端点a,b和精度e:"<<endl;
cin>>a>>b>>e;
cout<<endl;
h = b-a;
T1 = (h/2)*(4/(1+pow(a,2))+4/(1+(pow(b,2))));
int count=0;
cout<<"K "<<" T1 "<<" T2 "<<endl;
do{
if(count!=0){
h = h/2;
T1 = T2;
}
count++;
s = 0;
x = a + h/2;
do{
s = s + (4/(1+pow(x,2)));
x = x + h;
}while(x<b);
T2 = (T1/2)+h*s/2;
printf("%d: %.6lf %.6lf\n",count,T1,T2);
}while(abs(T2-T1)>=e);
cout<<endl;
printf("最后结果为:%.4lf",T2);
return 0;
}
2. 用龙贝格算法计算下列积分值,使精确度达到10-4。
要求:
(1) 绘制龙贝格算法的实现框图;
(2) 精度ε和区间端点a,b的信息从键盘终端输入;
(3) 按照龙贝格算法的计算顺序按列依次打印输出梯形序列、辛普森序列、柯特斯序列和龙贝格序列的计算结果,如下所示;
扫描二维码关注公众号,回复:
6745415 查看本文章
k |
区间等分数 n=2k |
梯形序列 T2k |
辛普森序列 S2k-1 |
柯特斯序列 C2k-2 |
龙贝格序列 R2k-3 |
0 |
1 |
T1 |
|
|
|
1 |
2 |
T2 |
S1 |
|
|
2 |
4 |
T4 |
S2 |
C1 |
|
3 |
8 |
T8 |
S4 |
C2 |
R1 |
4 |
16 |
T16 |
S8 |
C4 |
R2 |
5 |
32 |
T32 |
S16 |
C8 |
R4 |
(4) 输出最终满足精度要求的积分近似值。
算法框图
#include<iostream>
#include<cmath>
using namespace std;
int main(){
double x,a,s,b,e,h,T1,T2;
cin>>a>>b>>e;
double q[7][7];
double T[100] = {0};
h = b-a;
int d=0;
int i,j;
for(i=0;i<7;i++){
for(j=0;j<7;j++){
if(j == 0){
q[i][j] = pow(2,i);
}
else{
q[i][j] = 0;
}
}
}
T1 = (h/2)*(sin(b)+sin(a));
int count=-1,k=0;
do{
if(count!=-1){
h = h/2;
T1 = T2;
}
count = pow(2,k);
k++;
s = 0;
x = a + h/2;
do{
s = s + sin(x);
x = x + h;
}while(x<b);
T2 = (T1/2)+h*s/2;
T[count] = T1;
q[d++][1] = T[count];
}while(abs(T2-T1)>=e);
cout<<endl;
double S[100] = {0};
double C[100] = {0};
double R[100] = {0};
d = 1;
for(int i=1;i<=count/2;i=i*2){
S[i] = (4.00/3)*T[2*i]-(1.00/3)*T[i];
q[d++][2] = S[i];
}
cout<<endl;
d = 2;
for(int i=1;i<=count/4;i=i*2){
C[i] = (16.00/15)*S[2*i]-(1.00/15)*S[i];
q[d++][3] = C[i];
}
cout<<endl;
d = 3;
for(int i=1;i<=count/8;i=i*2){
R[i] = (64.00/63)*C[2*i]-(1.00/63)*C[i];
q[d++][4] = R[i];
}
cout<<"n"<<" 梯形序列 "<<" 辛普森序列 "<<" 科特斯序列 "<<" 龙贝格序列 "<<endl;
for(i=0;i<6;i++){
for(j=0;j<5;j++){
if(q[i][j] == 0){
printf(" ");
}
else{
if(j==0){
printf("%.0lf ",q[i][j]);
if(q[i][j]<=8) printf(" ");
}
else{
printf("%.8lf ",q[i][j]);
}
}
}
printf("\n");
}
printf("\n最后结果为: %.4lf",q[3][4]);
return 0;
}