选用复合梯形公式-复合Simpson公式-计算
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;