选用复合梯形公式-复合Simpson公式-计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析实验 三

班级:10信计2班 学号:59 姓名:王志桃 分数

一·问题提出:

选用复合梯形公式,复合Simpson 公式,计算

(1) I =dx x ⎰-4

10

2sin 4 ()5343916.1≈I

(2) I = dx x x

⎰1

sin ()9460831.0,1)0(≈=I f

(3) I = dx x

e x

⎰+1

024

(4) I = ()

dx x x ⎰++1

021

1ln

二·实验要求:

1.编制数值积分算法的程序

2.分别用两种算法计算同一个积分,并比较计算结果

3.分别取不同步长()/ a b h -=n ,试比较计算结果(如n = 10, 20

等)

4.给定精度要求ε,试用变步长算法,确定最佳步长

三·实验流程图:

复化梯形公式:

输入 端点 a , b 正整数 n

直接计算TN=h/2*[f(a)+2∑f(x k )+f(b)] k=1,2…,n-1

输出 定积分近似值TN

复化Simpson 公式

输入 端点 a , b 正整数 n

输出 定积分近似值SN

(1) 置h=(b-a)/(2n)

(2) F0=f(a)+f(b) , F1=0 , F2=0

(3) 对j=1,2,…,2n-1循环执行步4到步5

(4) 置x=a+jh

(5) 如果j 是偶数,则F2=F2+f(x),否则F1=F1+f(x)

(6) 置SN=h(F0+4F1+2F2)/3

(7) 输出SN,停机

四·源程序:

#include

#include

using namespace std;

#define n 20//此为步长

double f1(double x)

{

double y;

y=sqrt(4-sin(x)*sin(x));

return y;

}

double f2(double x)

{

if(x==0)

return 1;

double y;

y=sin(x)/x;

return y;

}

double f3(double x)

{

double y;

y=exp(x)/(4+x*x);

return y;

}

double f4(double x)

{

double y;

y=log(1+x)/(1+x*x);

return y;

}

int main()

{

int j;

double e=0.000001,h,F0,F1,F2,a,b,x,S;

cout<<"利用复化Simpson公式求积分"<

//1

a=0;

b=0.25*3.141592;

h=(b-a)/(2*n);

F0=f1(a)+f1(b);

F1=F2=0;

for(j=1;j<2*n;j++)

{

x=a+j*h;

if(j%2==0)

F2=F2+f1(x);

else

F1=F1+f1(x);

}

S=((F0+F1*4+F2*2)*h)/3;

cout<<"第一个积分公式:端点a为"<

//2

a=0;

b=1;

h=(b-a)/(2*n);

F0=f2(a)+f2(b);

F1=F2=0;

for(j=1;j<2*n;j++)

{

x=a+j*h;

if(j%2==0)

F2=F2+f2(x);

else

F1=F1+f2(x);

}

S=(F0+F1*4+F2*2)*h/3;

cout<<"第二个积分公式:端点a为"<

//3

a=0;

b=1;

h=(b-a)/(2*n);

F0=f3(a)+f3(b);

F1=F2=0;

for(j=1;j<2*n;j++)

{

x=a+j*h;

if(j%2==0)

F2=F2+f3(x);

else

F1=F1+f3(x);

}

S=(F0+F1*4+F2*2)*h/3;

cout<<"第三个积分公式:端点a为"<

//4

a=0;

b=1;

h=(b-a)/(2*n);

F0=f4(a)+f4(b);

F1=F2=0;

for(j=1;j<2*n;j++)

{

x=a+j*h;

if(j%2==0)

F2=F2+f4(x);

else

F1=F1+f4(x);

}

S=(F0+F1*4+F2*2)*h/3;

cout<<"第四个积分公式:端点a为"<

cout<<"利用复化梯形公式求积分"<

//1

a=0;

b=0.25*3.141592;

h=(b-a)/n;

F0=f1(a)+f1(b);

F1=0;

for(j=1;j

{

x=a+j*h;

F1=F1+f1(x);

}

S=((F0+F1*2)*h)/2;

cout<<"第一个积分公式:端点a为"<

//2

a=0;

b=1;

h=(b-a)/n;

F0=f2(a)+f2(b);

F1=0;

for(j=1;j

{

x=a+j*h;

F1=F1+f2(x);

}

S=((F0+F1*2)*h)/2;

cout<<"第二个积分公式:端点a为"<

相关文档
最新文档