变步长的梯形积分方法的应用
- 格式:doc
- 大小:440.00 KB
- 文档页数:4
陕西科技大学机械教改班用C++的积分其实积分的思想就是,微分—>求和—>取极限,如果是用纯手工法那就是先对一个函数微分,再求出它的面积,在取极限,因为我们的计算速度和计算量有限,现在有了计算机这个速度很快的机器,我们可以把微分后的每个小的面积加起来,为了满足精度,我们可以加大分区,即使实现不了微分出无限小的极限情况,我们也至少可以用有限次去接近他,下面我分析了四种不同的积分方法,和一个综合通用程序。
一.积分的基本思想1、思路:微分—>求和—>取极限。
2、Newton —Leibniz 公式 ⎰-=ba a Fb F dx x f )()()( 其中,)(x F 被积函数)(x f的原函数。
3、用计算机积分的思路在积分区间内“微分—>求和—>控制精度”。
因为计算机求和不可以取极限,也就是不可以无限次的加下去,所以要控制精度。
二.现有的理论1、一阶求积公式---梯形公式⎰=+-=b a T b f a f a b dx x f )]()([2)( 他只能精确计算被积函数为0、1次多项式时的积分。
2、二阶求积分公式——牛顿、科特斯公式 ⎰=+++-=ba Sb f a b f a f a b dx x f )]()2(4)([6)(他只能精确计算被积函数为0、1、2、3次多项式时的积分。
三.四种实现方法1.复化矩形法将积分区间[a,b]等分成n 个子区间:],[],[],[],[],[112322110n n n n x x x x x x x x x x ---、、、 则h=(b-a)/n,区间端点值k x =a+kh)hf(x ))f(x x (x I 11121=-=)()()x (22232x hf x f x I =-=............................)()()(111n ---=-=n n n n x hf x f x x I∑==ni i x hf T 1n )(源程序:#include <iostream.h>#include<math.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段cout<<Tn(a,b,n)<<endl; //输出积分结果}执行结果:2.复化梯形法方法和复化矩形法类似,只是把原来的矩形小面积变成了梯形小面积,但是精确度明显提高了,也就是说达到同样的精度需要的时间少了。
c.2数值积分中复化simpson公式和变步长梯形法内容1. 引言1.1 概述数值积分是数学领域中重要的计算方法之一,广泛应用于工程、物理、经济学等多个学科。
它通过近似求解定积分来解决无法进行解析求解的复杂函数问题。
在数值积分方法中,复化Simpson公式和变步长梯形法都是常见且有效的技术手段。
1.2 文章结构本文将围绕复化Simpson公式和变步长梯形法展开讨论,并对它们进行比较与选择。
文章主要分为引言、复化Simpson公式、变步长梯形法、两者比较与选择以及结论部分。
1.3 目的本文旨在介绍复化Simpson公式和变步长梯形法这两种数值积分方法,探讨它们的基本原理、方法步骤以及在实际应用中的优势和适用场景。
通过对比与选择这两种方法,可以为读者提供更好地理解和运用数值积分技术的指导,并为未来研究方向和改进空间提供一定参考。
2. 复化Simpson公式:2.1 基本原理:复化Simpson公式是一种数值积分方法,用于近似计算定积分的值。
它基于简单的Simpson公式,并将区间等分为若干子区间,在每个子区间上应用Simpson公式来进行积分计算。
2.2 方法步骤:下面是复化Simpson公式的具体步骤:1. 将要积分的区间[a, b]等分为n个子区间,每个子区间宽度为h。
2. 根据Simpson公式,计算每个子区间的积分值。
3. 将所有子区间的积分值相加,得到整个区间[a, b]上的近似积分值。
具体而言,对于每个子区间[x(i-1), x(i)], i从1到n,使用Simpson公式进行积分近似。
即将该子区间均匀地划分为两部分,并以梯形面积和抛物线面积来逼近曲线下面积。
然后将所有n个子区间的近似积分值相加,得到最终的数值积分结果。
2.3 应用和优势:复化Simpson公式在数学和工程领域中广泛应用于需要进行定积分计算的问题。
它的优势包括:1. 相比于简单的Simpson公式,复化Simpson公式可以更准确地近似计算定积分的值。
变步长梯形求积法计算定积分1.原理:变步长求积法的思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项主要公式:T2n=T n/2+(h/2)*Σf(x k+0.5);2.源程序如下:#include"math.h"#include"iostream.h"double f(double x){double s;s=log(x*x);return(s);}double ffts(double a,double b,double eps){int n,k;double fa,fb,h,t1,p,s,x,t;fa=f(a);fb=f(b);n=1;h=b-a;t1=h*(fa+fb)/2;p=eps+1;while(p>=eps){s=0;for(k=0;k<=n-1;k++){x=a+(k+0.5)*h;s=s+f(x);}t=t1/2+h*s/2;p=fabs(t1-t);cout<<"步长n为:"<<n<<"时的"<<"Tn="<<t1<<'\t'<<"T2n="<<t<<'\t'<<"误差变化:"<<p<<endl;t1=t;n=n*2;h=h/2;}return(t);}void main(){double result,a,b,eps;cout<<"需要求解的积分式为f(x)=log(x^2)"<<endl;cout<<"输入边界值a="<<'\t';cin>>a;cout<<"输入边界值b="<<'\t';cin>>b;cout<<"输入误差限"<<'\t';cin>>eps;result=ffts(a,b,eps);cout<<"经过变步长梯形求积法得方程结果为:"<<result<<endl;}3.运行结果:根据程序提示依次输入积分上限和积分下限,然后输入误差限;本程序需要预先在程序中输入需要积分方程的表达式。
变步长梯形公式变步长梯形公式是数值积分中一种用于近似计算定积分的方法。
在数学中,定积分是一个数学概念,代表了曲线与坐标轴之间的面积。
然而,有些曲线的积分无法通过解析方法进行求解,因此需要使用数值积分方法进行近似计算。
变步长梯形公式是一种数值积分方法,它通过将被积函数的曲线分割成多个小梯形来近似计算定积分的值。
这个方法的核心思想是将整个积分区间分割成多个小区间,然后在每个小区间内使用梯形公式来计算面积,并将这些面积相加得到最终的近似值。
变步长梯形公式的具体实现步骤如下:1. 将积分区间[a, b]等分为n个小区间,每个小区间的长度为h=(b-a)/n。
2. 在每个小区间内,使用梯形公式来计算面积。
梯形公式可以表示为:S = (f(x[i])+f(x[i+1]))*h/2,其中x[i]和x[i+1]分别表示小区间的左边界和右边界,f(x)表示被积函数。
3. 将每个小区间的面积相加得到整个积分区间的近似值:I ≈(f(a)+2f(x1)+2f(x2)+.+2f(x[n-1])+f(b))*h/2。
4. 如果需要提高计算精度,可以通过增加小区间的数量n来减小步长h,进而得到更精确的近似值。
变步长梯形公式的优点是简单易懂、易于实现,适用于一般的函数。
然而,它也存在一些缺点。
首先,当被积函数在积分区间上的变化较大时,梯形公式可能会产生较大的误差。
其次,该方法对积分区间的分割方式较为敏感,不同的分割方式可能会得到不同的近似值。
因此,在实际应用中,需要根据具体问题选择合适的分割方式和步长。
尽管变步长梯形公式存在一些局限性,但它仍然是一种常用的数值积分方法,广泛应用于科学计算、工程计算等领域。
在实际问题中,可以根据需要选择合适的数值积分方法,以获得更精确的结果。
变步长梯形求积法计算定积分1.原理:变步长求积法的思想是利用若干小梯形的面积代替原方程的积分,当精度达不到要求时,可以通过增加点数对已有的区间再次划分,达到所需精度时即可;其中由于新的式子中有原来n点中的部分项主要公式:T2n=T n/2+(h/2)*Σf(x k+0.5);2.源程序如下:#include"math.h"#include"iostream.h"double f(double x){double s;s=log(x*x);return(s);}double ffts(double a,double b,double eps){int n,k;double fa,fb,h,t1,p,s,x,t;fa=f(a);fb=f(b);n=1;h=b-a;t1=h*(fa+fb)/2;p=eps+1;while(p>=eps){s=0;for(k=0;k<=n-1;k++){x=a+(k+0.5)*h;s=s+f(x);}t=t1/2+h*s/2;p=fabs(t1-t);cout<<"步长n为:"<<n<<"时的"<<"Tn="<<t1<<'\t'<<"T2n="<<t<<'\t'<<"误差变化:"<<p<<endl;t1=t;n=n*2;h=h/2;}return(t);}void main(){double result,a,b,eps;cout<<"需要求解的积分式为f(x)=log(x^2)"<<endl;cout<<"输入边界值a="<<'\t';cin>>a;cout<<"输入边界值b="<<'\t';cin>>b;cout<<"输入误差限"<<'\t';cin>>eps;result=ffts(a,b,eps);cout<<"经过变步长梯形求积法得方程结果为:"<<result<<endl;}3.运行结果:根据程序提示依次输入积分上限和积分下限,然后输入误差限;本程序需要预先在程序中输入需要积分方程的表达式。
CENTRAL SOUTH UNIVERSITY 数值分析实验报告
变步长的梯形积分方法的应用
一、问题背景
实际问题当中常常需要计算积分,有些数值方法,如微分方程和积分方程的求解,也都和积分计算相关联。
依据人们所熟知的微积分基本定理,对于积分
()dx x f I a ⎰=b
, 只要找到被积分函数()x f 的原函数()x F ,便有下列牛顿-莱布尼茨(Newton-Leibniz )公式:
()()()a F b F dx x f b
-=⎰a . 但实际使用这种求积分方法往往有困难,因为大量的被积函数,诸如
()0sin ≠x x
x ,2x e -等,其原函数不能用初等函数表达,故不能用上述公式计算。
即使能求得原函数的积分,有时计算也十分困难。
例如对于被积函数
()6
11x x f +=,其原函数 ()C x x x x x x x x F ++-+++⎪⎭⎫ ⎝⎛-+=1
313ln 3411arctan 61arctan 3122, 计算()a F ,()b F 仍然很困难,另外,当()x f 是由测量或数值计算给出的一张数据表时,牛顿-莱布尼茨公式也不能直接运用。
因此有必要研究积分的数值计算问题。
二、数学模型
由于牛顿-科特斯积分公式在8≥n 时不具有稳定性,故不能通过提高阶数的方法来提高求积精度。
为了提高精度通常可以把积分区间划分成若干的子区间(通常是等分),再在每个子区间上用低阶求积公式。
这种方法称为复合求积法。
复合梯形法虽然方法简单,但是却不能估计积分精度,这有时候是很不方便的。
要想控制积分精度,可以采用如下的方法,设积分区间已经划分为n 个子区间,这时再把区间划分更细,给出新的积分结果,如果前后两次积分的差比给定的误差容限小的话,则停止细华否则继续增加积分区间。
这种方法原理很简单也 容易实现,但是实际计算中一般采用的比较少,因为这种方法比较机械效率不是太高,实际上采用比较多的通常是Romberg 方法。
三、算法及流程
给定义误差容限小量TOL ,对于()dx x f b
a ⎰,有复合梯形公式
()()()()⎥⎦
⎤⎢⎣⎡++≈∑⎰-=1122n k k b
a x f
b f a f h dx x f 如果前后两次的划分的积分计算结果大于给定的误差TOL ,则增加划分区间,如果满足精度,则停止细化,并输出结果。
MATLAB 实现过程:
%可控精度复合梯形法计算积分问题
function [jifen,num]=kong_tixing(a,b,tol)
%a,b 为积分区间
%tol 为积分精度,默认为10的-3次方
if (nargin==3)
eps=1.0e-3;
end
n=1;
h=(b-a)/2;
int_1=0;
%调用方程函数
int_2=(kong_t_f(a)+kong_t_f(b))/h;
% 如果前后两次误差小于给定的精度,则停止细化积分区间
while abs(int_2-int_1)>tol
n=n+1;
h=(b-a)/n;
int_1=int_2;
int_2=0;
for i=0:n-1
x=a+h*i;
x1=x+h;
int_2=int_2+(h/2)*(kong_t_f(x)+kong_t_f(x1));
end
end
% 积分结果
jifen=int_2;
%区间划分细度
num=n;
将文件以文件名kong_tixing.m 保存。
四、计算结果及分析
计算定积分
dx e T x ⎰-=102
要求输出精度为10-4。
打开Editor 编写如下程序,并将文件以文件名kong_t_f.m 保存。
function f=kong_t_f(x)
f=exp(-x^2);
打开Editor编写如下程序,并将文件以文件名kong_t_main.m保存。
% 可控精度的梯形积分方法
% 精度为0.1
[s_1,num_1]=kong_tixing(0,1,1e-1)
%精度为0.01
[s_2,num_2]=kong_tixing(0,1,1e-4)
% 精度为0.001
[s_1,num_3]=kong_tixing(0,1,1e-7)
% 画出积分图形
x=0:0.02:1;
y=exp(-x.^2);
area(x,y)
在MATLAB命令窗口输入输入
>>kong_t_main
点击Enter键后得到:
s_1 = 0.739986475276682
num_1 =3
s_2 =0.746398247893441
num_2 = 12
s_1 =0.746818876175303
num_3 =108
从输出的结果可以看出,要达到10-4精度,需要把区间划分为12个子区间,而要达到10-7精度,则要把区间划分为108个子区间。
事实上,函数的积分总区间跨度不是很大,所以在划分为108个子区间后已经是对函数取点很密集了。
下图给出了积分的几何意义,积分的结果即图中蓝色区域面积,从输出结果可以看出蓝色区域面积约为0.746818876175303。