当前位置:文档之家› 复化梯形公式求积分-推荐下载

复化梯形公式求积分-推荐下载

武汉工程大学
计算机科学与工程学院
《计算方法》实验报告
实验项目复化梯形公式求积分实验类别综合实验
实验目的及要求实验目的:学会用复化梯形公式求函数的积分,并应用该算法于实际问题。

实验要求:要求能随意输入被积函数,进行算法设计,打印出误差限例题:求被积函数在0<x<1上的积分
)
)
(sin
1
/(
12
x
+
公式:复化梯形公式:
设,(i=0,1,…,n-1)
n
a
b
h
-
=h
x
x i
i
=
-
+1
])
(
2
)
(
)
(
[
2
1
1
∑-
=
+
+
+
=
n
i
ih
a
f
b
f
a
f
h
I
误差限:)
(
12
)
(//
1
3
i
n
i
n
n
f
h
T
I
f

∑-
=
-
=
-
=
成绩评定表
类别评分标准分值得分合计
上机表现积极出勤、遵守纪律
主动完成设计任务
30分
程序代码比较规范、基本正确
功能达到实验要求
30分
实验报告及时递交、填写规范
内容完整、体现收获
40分
说明:
评阅教师:
日 期: 年 月 日
实 验 内 容
设计分析
复化数值积分:将区间[a,b]n 等分,取等距节点
n a
b h n i ih a x i -=
=+=,,...,2,1,0,由定积分的区间可加性,有
()()dx
x f dx x f b
a
n
i x x i
i ⎰∑⎰
=-=1
1
在每一个小区间上利用梯形积分公式有
()()()[]i i x x x f x f h
dx x f i
i +≈
-⎰
-11
2
一般记()()()⎥

⎤⎢⎣⎡++=∑-=1122n i i n x f b f a f h T 称做n+1点复化梯形积分公式。

数学公式:
()()()()⎥


⎢⎣⎡++≈∑⎰
-=1
122n i i b
a
x f b f a f h dx x f 算法描述:
Step1:输入a,b 和正整数n ;Step2:置h=(b-a)/n;Step3:F=f(a)+f(b);l=0;
Step4:对j=1,2,…,n 循环执行5;Step5:置x=a+jh; l+=f(x);Step6:置T=h(F+2l)/2Step7:输出T;
程序源代码:
#include<iostream>#include<math.h>using namespace std;
double f(double x)//求函数的值;
{
return1/(1+pow(sin(x),2.0));
}
void EchelonIntegral(int n)//梯形积分
{
double y=0;
double h=(1.0-0.0)/n;
for(int i=0;i<=n;i++)
{
double a=0.0+i*h,b=0.0+(i+1)*h;
y=y+h*(f(a)+f(b))/2.0;
}
cout<<"对应所求的梯形求积分为"<<y<<endl;
double En=0.0;
double mid=(0.0+1.0)/2.0;
double x=mid,p=2*sin(2*x)*sin(2*x)*(1+sin(x)*sin(x))-2*cos(2*x)*pow(1+sin(x)*sin(x),2);
double f2d=p/pow(1+sin(x)*sin(x),2);
for(i=0;i<n;i++)
{
En=En+pow(h,3)/12.0*f2d;
}
cout<<"误差为"<<En<<endl;
}
/*void ParabolicIntegral(int n)//抛物线积分
{
double y=0;
double t=(1.0-0.0)/n;
for(int i=0;i<n;i++)
{
double a=0.0+i*t,b=0.0+(i+1)*t;
y=y+t*(f(a)+f(b)+4*f((a+b)/2.0))/6.0;
}
cout<<"对应所求的抛物线求积分为"<<y<<endl;
}*/
void main()
{
cout<<"*********************用梯形积分公式求积分1/(1+pow(sin(x),2))的值****************"<<endl;
cout<<"请输入把0到1的范围几等分?"<<"\t";
int m1;
cin>>m1;
EchelonIntegral(m1);
cout<<endl;
char answer1;
cout<<"是否要继续求该算法?(y/n)"<<"\t";
cin>>answer1;
while(answer1=='y')
{
cout<<"请输入把0到1的范围几等分?"<<"\t";
cin>>m1;
EchelonIntegral(m1);//3.直线求积分;
cout<<endl;
cout<<"是否要继续求该算法?(y/n)"<<"\t";
cin>>answer1;
}
cout<<endl;
}
计算机科学与工程学院测试用例
计算机科学与工程学院
实验总结
复化数值积分就是为了减少数值积分的误差,可以把积分区间分成若干小区间,在每个小区间上采取低阶数值积分公式,然后把这些小区间上的数值积分结果加起来作为函数在整个区间上的近似,类似于分段差值。

在此次实验中,我学会了怎样以专业的知识,从专业的角度来考虑所遇见的问题或者与专业相关的问题,并以自己的看法,给予实现。

同时,在此次实验中,也有一些不近人意的地方,也需要我不断改进和练习。

比如误差怎样取值,保证其最小。

相关主题