- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
陕西科技大学
机械教改班
用C++的积分
其实积分的思想就是,微分—求和—取极限,如果是用纯手工法那就是先对一个函数微分,再求出它的面积,在取极限,因为我们的计算速度和计算量有限,现在有了计算机这个速度很快的机器,我们可以把微分后的每个小的面积加起来,为了满足精度,我们可以加大分区,即使实现不了微分出无限小的极限情况,我们也至少可以用有限次去接近他,下面我分析了四种不同的积分方法,和一个综合通用程序。
一.积分的基本思想
1、思路:微分—求和—取极限。
2、Newton—Leibniz公式
SKIPIF 1 0
其中, SKIPIF 1 0 被积函数 SKIPIF 1 0 的原函数。
3、用计算机积分的思路
在积分区间内“微分—求和—控制精度”。因为计算机求和不可以取极限,也就是不可以无限次的加下去,所以要控制精度。
二.现有的理论
1、一阶求积公式---梯形公式
SKIPIF 1 0
他只能精确计算被积函数为0、1次多项式时的积分。
2、二阶求积分公式——牛顿、科特斯公式
SKIPIF 1 0
他只能精确计算被积函数为0、1、2、3次多项式时的积分。
四种实现方法
复化矩形法
将积分区间[a,b]等分成n个子区间:
SKIPIF 1 0
则h=(b-a)/n,区间端点值 SKIPIF 1 0 =a+kh
SKIPIF 1 0
SKIPIF 1 0
............................
SKIPIF 1 0
SKIPIF 1 0
源程序:
#include iostream.h
#includemath.h
double f(double x) //计算被积函数
{
double y;
y=log(1+x)/(1+x*x); //被积函数
return y;
}
double Tn(double a,double b,int n) //求Tn
{
double t=0.0;
double xk; //区间端点值
double t1,t2; //用来判断精度
do
{
double h=(b-a)/n;
for(int k=1;k=n-1;k++) //每一小段的矩形叠加
{
t1=t;
xk=a+k*h;
t+=h*f(xk);
t2=t;
}
n++; //如果精度不够就对区间再次细分,直到达到精度要求
}
while(fabs(t1-t2)=1e-7); //判断计算精度
return t;
}
void main()
{
double a=0.0; //积分下线
double b=2.0; //积分上限
int n=1024; //把区间分为1024段
coutTn(a,b,n)endl; //输出积分结果
}
执行结果:
复化梯形法
方法和复化矩形法类似,只是把原来的矩形小面积变成了梯形小面积,但是精确度明显提高了,也就是说达到同样的精度需要的时间少了。
SKIPIF 1 0
变形一下:
SKIPIF 1 0
源程序:
#include iostream.h
#includemath.h
double f(double x) //计算被积函数
{
double y;
y=log(1+x)/(1+x*x); //被积函数
return y;
}
double Tn(double a,double b,int n) //求Tn
{
double t=0.0;
double xk; //区间端点值
double t1,t2,h=(b-a)/n; //用来判断精度
do
{
h=(b-a)/n;
for(int k=1;k=n-1;k++) //余项叠加,相当于每一个小梯形相加
{
t1=t;
xk=a+k*h;
t+=f(xk);
t2
文档评论(0)