复化梯形公式和复化辛卜生公式

合集下载

复化梯形公式,复化辛普森公式,复化柯特斯公式

复化梯形公式,复化辛普森公式,复化柯特斯公式

复化梯形公式,复化辛普森公式,复化柯特斯公式
复化梯形公式、复化辛普森公式和复化柯特斯公式都是用来计算定积分的近似值的方法。

1. 复化梯形公式:将积分区间分成若干个小区间,在每个小区间上用梯形面积近似代替该小区间的曲边梯形面积,然后将这些梯形面积相加,得到积分的近似值。

2. 复化辛普森公式:将积分区间分成若干个等分小区间,在每个小区间上用矩形面积近似代替该小区间的曲边梯形面积,然后将这些矩形面积相加,得到积分的近似值。

3. 复化柯特斯公式:将积分区间分成若干个等分小区间,在每个小区间上用切线段长度近似代替该小区间的曲边梯形面积,然后将这些切线段长度相加,得到积分的近似值。

这三种方法都是通过将积分区间分成若干个小区间,然后在每个小区间上用近似方法计算该小区间的曲边梯形面积,最后将这些近似值相加得到积分的近似值。

它们的精度和误差都与分区间的大小有关。

复化梯形公式和复化辛普生公式

复化梯形公式和复化辛普生公式
return result;
}
void simpson::integration()//实现积分
{
cout<<"输入上限和下限";
cin>>b>>a;
cout<<"输入你要使用simposn法则的数目(即等分数)";
cin>>n;
h=(b-a)/n;
sum_even_terms=0.0;
sum_odd_terms=0.0;
for(k=1;k<n;k++)
{
sum_even_terms+=sine(k*h);
}
for(k=0;k<n;k++)
{
sum_odd_terms+=sine((2*k+1)*h/2);
}
integral=(2.0*sum_even_terms+4.0*sum_odd_terms+sine(b)+1)*h/6.0;
《数值分析》实验报告
姓名
学号
日期
2012.11.20
实验室
设备编号
实验题目
用复化梯形公式和复化辛普生公式求I=∫01sinx/xdx
一实验目的
1.了解复化梯形公式和复化辛普生公式。
2.用复化梯形公式和复化辛普生公式求I=∫01sinx/xdx。
二实验内容
算法:复化梯形公式是Tn=∑h/2[f(xi)+ f(xi+1)]=(b-a)/2n[f(a)+2∑f(xi)+f(b)]记子段[xi,xi+1]的中点为xi+1/2,则复化Simpson公式为Sn=∑h/6[f(xi)+4f(xi+1/2)+ f(xi+1)]=b-a/6n[f(a)+4∑f(xi+1/2)+2f(xi)+f(b)]

龙贝格积分算法实验[1]

龙贝格积分算法实验[1]
1.准备初值,计算
且 ( 为等份次数)
2.按梯形公式的递推关系,计算
3.按龙贝格公式计算加速值
4.精度控制。对给定的精度 ,若
则终止计算,并取 作为所求结果;否则 ,重复2~4步,直到满足精度为止。
问题
(1)程序运行如下:
I = Romberginterg(inline('x.^2.*exp(x)'),0,1,25,1e-6)
function I = GaussInterg(fun, type, a, b, tol)
% GaussInterg用Gauss型求积公式求积分,具体形式由使用者选取
%
% Synopsis: I = GaussInterg(fun, type, a, b)
% I = GaussInterg(fun, type, a, b, tol)
if nargin < 4
npanel = 25;
end
if nargin < 5
tol = 5e-9;
end
if nargin < 6
flag = 0;
end
T(1,1) = TrapezoidInteg(fun, a, b, npanel); %T0(h) = T(h)
err = 1; %初始化误差值
if nargin < 4
npanel = 25;
end
nnode = npanel + 1; %节点数=段数+ 1
h = (b-a)/(nnode-1); %步长
x = a:h:b; %将积分区间分段
f = feval(fun,x);%求节点处被积函数的值
I = h * ( 0.5*f(1) + sum(f(2:nnode-1)) + 0.5*f(nnode) );

复化梯形公式、复化辛卜生公式

复化梯形公式、复化辛卜生公式

复化梯形公式、复化辛卜生公式
一、复化梯形公式及其余项
在区间不大时,用梯形公式、辛卜生公式计算定积分是简单实用的,但当区间较大时, 用梯形公式、辛卜生公式计算定积分达不到精确度要求. 为了提高计算的精确度,我们将 [a,b] 区间n等分,在每个小区间上应用梯形公式、辛卜生公式计算定积分, 然后将其结果相加,这样就得到了复化梯形公式和复化辛卜生公式。

1. 复化梯形公式
将积分区间等分,设, 则节点为
对每个小区间上应用梯形公式, 然后将其结果相加,则得
(3.14)
称(3.14)式为复化梯形公式.
当在[a,b]上有连续的二阶导数时,则复化梯形公式(3.14)的余项推导如下:
因为
所以在区间[a,b]上公式(3.14)的误差为
又因为在区间[a,b]上连续,由连续函数的性质知,在区间[a,b]上存在一点,
于是
(3.15)
称(3.15)式为复化梯形公式的余项。

例1用复化梯形公式计算得
使误差小于
解和公式(3.15), 解不等式

即时,用复化梯形公式计算可达到精度要求,则取,用公式(3.14)计算得
而积分的准确值。

复合梯形公式与复合辛普森公式对比

复合梯形公式与复合辛普森公式对比

下面利用余项公式来估计两种算法的误差。首先需要求
f (x) sin x 1cos(xt)dt ,
x
0
所以有
的高阶导数。由于
于是
f k (x)
1 0
dk dxk
(cos
xt)dt
1tk cos(xt k )dt ,
0
2
max f k (x) 1 cos(xt k )tk dt 1tk dt 1 .
输出积分值 结束
图 4-1 复合梯形公式算法流程图 4.2 复合辛普森公式算法流程图
开始 输入区间断点 a, b
及等分数 n 求出步长各h节,各点节函点数值,相邻节求点和中su点m1, 及
各相相邻应节的点函中数心值输点出函结积数束,分值值
k=1求,2,和..n-s1um2
k=1,2,..n-1
图 4-2 复合辛普5.森M公A式TL算AB法源流程程序
1. 对多个算例进行分析,保证计算量基本相同的情况下去比较计算精度,验证复合辛普森
公式具有更高精度的结论。
2. 对多个算例进行 MATLAB 编程分析,在要求相同计算精度的前提下去比较计算量的大小,
从而分析复合梯形公式与复合辛普森公式的优劣。
参考文献
[1]穆耶赛尔·艾合买提,阿布都热西提·阿布都外力. 改进复合梯形求积公式[J]. 首都师范大学学报(自然科学 版),2016,06:1-4. [2] 刘 智 颖 , 王 向 公 , 任 威龙 , 龙 耀 萍 . 辛 普 森 公 式的 推 广 形 式 及 应 用 [J]. 山 东 理 工 大 学 学 报 ( 自 然科 学 版),2014,01:29-31. [3]陈凤忠. 辛普森公式的统一美[J]. 长春理工大学学报(综合版),2005,03:59-60+80. [4]李庆扬, 王能超, 易大义. 数值分析.第 5 版[M]. 清华大学出版社, 2008,12:106-109.

复合梯形公式和复合辛普森公式

复合梯形公式和复合辛普森公式

复合梯形公式和复合辛普森公式1.复合梯形公式步骤1:将积分区间[a,b]均匀地分成n个小区间,每个小区间的长度为h=(b-a)/n,其中n为正整数。

步骤2:定义一个函数f(x),并在每个小区间上求出函数在小区间两个端点的函数值,记作f(x0), f(x1), f(x2), ..., f(xn)。

步骤3:根据梯形公式,每个小区间上的定积分近似值为(h/2) * (f(x0) + 2f(x1) + 2f(x2) + ... + 2f(xn-1) + f(xn))。

步骤4:将所有小区间上的定积分近似值相加,得到最终的近似值。

复合辛普森公式是通过将积分区间划分成若干个小区间,然后在每个小区间上应用辛普森公式来逼近定积分的值。

具体的步骤如下:步骤1:将积分区间[a,b]均匀地分成n个小区间,每个小区间的长度为h=(b-a)/n,其中n为正偶数。

步骤2:定义一个函数f(x),并在每个小区间上求出函数在小区间三个点的函数值,记作f(x0),f(x1),f(x2)。

步骤3:根据辛普森公式,每个小区间上的定积分近似值为(h/3)*(f(x0)+4f(x1)+f(x2))。

步骤4:将所有小区间上的定积分近似值相加,得到最终的近似值。

复合辛普森公式的误差主要取决于小区间的数量和函数在每个小区间上的变化情况。

与复合梯形公式相比,复合辛普森公式的精度更高,但计算复杂度也更高。

综上所述,复合梯形公式和复合辛普森公式是数值积分中常用的近似计算方法。

它们通过将积分区间划分成小区间,并在每个小区间上应用相应的公式来逼近定积分的值。

这两种方法都可以通过增加小区间的数量来提高近似的精度,但相应地也会增加计算的复杂度。

根据实际情况,我们可以选择合适的方法来计算需要求解的定积分。

复化梯形公式和复化辛普森公式的精度比较(共7页)

复化梯形公式和复化辛普森公式的精度比较(共7页)

- 让每一个人同等地提高(tí gāo)自我实验四、复化梯形(tīxíng)公式和复化Simpson 公式的精度(jīnɡ dù)比较(2 学时(xuéshí))一、实验目的(mùdì)与要求1、熟习复化 Simpson 公式和复化梯形公式的结构原理;2、熟习并掌握两者的余项表达式;3、分别求出正确值,复化梯形的近似值,复化Simpson 的近似值,并比较后两者的精度;4、从余项表达式,即偏差曲线,来察看两者的精度,看哪个更靠近于正确值。

二、实验内容:关于函数 f (x) sin x,试利用下表计算积分 I 1sin xdx 。

x x表格以下:x 0 1/8 1/4 3/8 1/2 5/8 3/4 7/8 1 f ( x)1注:分别利用复化梯形公式和复化Simpson 公式计算,比较哪个精度更好。

此中:积分的正确值I0.9460831。

三、实验步骤1、熟习理论知识,并编写相应的程序;2、上机操作,从偏差图形上察看偏差,并与正确值对比较,看哪个精度更好;3、得出结论,并整理实验报告。

四、实验注意事项11- 让每一个人同等地提高(tí gāo)自我1、复化梯形公式,程序主体(zhǔtǐ)部分:for n=2:10T(n)=*T(n-1)for i=1:2^(n-2);endend2、复化 Simpson 公式(gōngshì),程序主体部分:for i=1:10n=2.^ix=0:1/n:1f=sin(x)./xf(1)=1s=0for j=1:n/2s=s+f(2*j)endt=0for j=1:(n/2-1)t=t+f(2*j-1)endS(i)=1/3/n*(f(1)+4*s+2*t+f(n+1))end五.实验(shíyàn)内容复化梯形(tīxíng)公式和复化辛普森公式的引入22- 让每一个(yī ɡè)人同等地提高自我复化梯形(tīxíng)公式:T n n 1 h [ f (x k f ( x k 1 )] ;k 0 2复化辛普森公式:S n n 1 h4 f ( x 1 ) f (x k 1 )] ;[ f (x kk 0 6k2依据题意(tí yì)和复化梯形公式、复化辛普森公式的原理编写程序求解代码以下:Matlab 代码(dài mǎ)clcs=quad( 'sin(x)./x',0,1)p1=zeros(10,1);p2=zeros(10,1);for k=6:15s1=0;s2=0;x=linspace(0,1,k);y=sin(x)./x;z=(1/(2*(k-1))):(1/(k-1)):1;sz=sin(z)./z;y(1)=1;for i=1:(k-1)s1=s1+*(x(i+1)-x(i))*(y(i)+y(i+1));endfor j=1:(k-1)s2=s2+(1/6)*(x(j+1)-x(j))*(y(j)+y(j+1)+4*sz(j));endp1(k-5)=s1-s;p2(k-5)=s2-s;endp1;33- 让每一个人同等地提高(tí gāo)自我p2;s1=s+p1(4)s2=s+p2(4)format longfor k=1:length(p1)p1(k)=abs(p1(k));p2(k)=abs(p2(k));endp1p2plot(6:1:15,p1,'-r' )hold onplot(6:1:15,10000*(p2),'-c' )hold off部分(bù fen)程序结果输出:s=s1 =s2 =结果剖析1 sin( x);依据结果输出可知:积分 I dx 的正确值为: I=x44- 让每一个人同等(tóngděng)地提高自我经过复化梯形公式(gōngshì)和复化辛普森公式获得的积分值为:s1 =:s2 =;相对偏差为:S 1 I 100 4.15 10 4 ; 1I 100S 2 I 100 1.62 10 8 ; 2 I 100明显,从相对偏差可知经过辛普森公式获得(huòdé)的结果偏差小精度高。

09-1复化辛甫生公式

09-1复化辛甫生公式

2013-2014(1)专业课程实践论文题目:复化辛甫生公式牛顿-柯特斯公式是插值型求积公式,而多节点的高次插值有很大的误差,即有龙格现象,因而高阶牛顿-柯特斯公式误差会很大。

其次当8≥n 时,柯特斯系数会有正有负,从而也不能保证求积公式的稳定性。

此外,当区间],[b a 较大时,由误差表达式可以看出精确度较差。

一种实用的做法是将积分区间],[b a 等分成n 个小区间,对每个小区间采用低阶的牛顿-柯特斯公式,再将结果加起来作为积分的近似值,这就是复化牛顿-柯特斯公式。

(1)复化梯形公式将],[b a 区间n 等分,子区间长度na b h -=,于是有复化梯形公式 )],()(2)([2)]()([211110b f x f a f h x f x f h T n k k k k n k n ++=+=∑∑-=+-= 其余项公式为)()(12)](12[2103ηηf a b h f h R k n k T ''--=''-=∑-= 这是因为如果)(x f ''在区间],[b a 上连续,由介值定理存在],[b a ∈η使得)()(10ηηf f n nk k ''=''∑=。

复化辛甫生公式是在复化梯形公式的基础上演变而来的,设子区间1[,]k k x x +的中点为12k x +,复化辛甫生公式为: ))()(2)(4)((6))()(4)((611102112110b f x f x f a f h x f x f x f h S n k k n k k k k k n k n +++=++=∑∑∑-=-=+++-=类似于复化梯形公式余项的推导,可得其余项公式为:],[),()2(180)()4(4b a f h a b R n s ∈--=ηη复化辛甫生公式的算法如下:(1)输入区间端点a ,b 及等分数n/2(n 为偶数),半步长h=(b-a )/n ,(2)置),....,2,1)((n i ih a f f i =+=(3)置.0,1==Q f P ,(4)对2,...3,2-=n j ,置.,1Q f Q P f P j j ⇒+⇒++(5)输出S=6h )](24)([b f Q P a f +++。

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

实验三:分别用复化梯形公式和复化辛卜生公式计算f(x)=sin(x)/x的积分,并与准确值比较判断精度。

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
double Trapezoid(float,float,float,int);
double Simpson(float,float,float,int);
double Integral(float,float);
int SigDigT(double,double,int);
void Euler(float a[50],float b);
float f(float);
float Bisection(float,float);
main()
{char q;
double d1,d2;
float a,b,h1,h2;
int i,m,n;
printf("\t\t\t实验三:数值积分\n");
printf("实验题目:分别用复化梯形公式和复化辛卜生公式计算f(x)=sin(x)/x的积分,并与准确值比较判断精度。

\n\n");
printf("请输入定积分的上下限:\n");
printf("定积分下限:a=");
scanf("%f",&a);
printf("定积分上限:b=");
scanf("%f",&b);
if(a==b)
{printf("积分上下限相等,定积分的值为0。

\n");
goto sign1;}
else
printf("请输入复化梯形公式划分的份数:");
scanf("%d",&n);
printf("请输入复化辛卜生公式划分的份数:");
scanf("%d",&m);
h1=(b-a)/n;
h2=(b-a)/m;
printf("复化梯形公式的步长为:h=%f\n",h1);
printf("复化辛朴生公式的步长为:h=%f\n",h2);
printf("复化梯形公式的结果是:\nT=%f\n",Trapezoid(a,b,h1,n));
printf("复化辛卜生公式的结果是:\nS=%f\n",Simpson(a,b,h2,m));
printf("定义计算该公式的结果是:\nI=%f\n",Integral(a,b));
d1=fabs(Integral(a,b)-Trapezoid(a,b,h1,n));
d2=fabs(Integral(a,b)-Simpson(a,b,h2,m));
printf("复化梯形公式的误差是:\nd=%f\n",d1);
printf("复化辛卜生公式的误差是:\nd=%f\n",d2);
if(d1>d2) printf("复化梯形公式的精度高于复化辛卜生公式的精度\n");
else if(d1==d2) printf("复化辛卜生公式和复化梯形公式的精度相等\n");
else printf("复化辛卜生公式的精度高于复化梯形公式的精度\n");
for(i=0;i<2;i++)
{if(i==0) printf("划分%d份的复化梯形公式的有效位数是小数点后的第%d位\n",n,SigDigT(d1,d2,i));
else printf("划分%d份的复化辛卜生公式的有效位数是小数点后的第%d位\n",m,SigDigT(d1,d2,i));}
sign1:
printf("\n是否继续?(y/n)\n");
printf("注:选y重新输入,选n返回主界面\n");
getchar();
q=getchar();
if(q=='y')
system("cls");
else if(q=='n')
{system("cls");
main();}
else {printf("您输入的字符不可识别,请重新输入!\n");
goto sign1;}}
double Trapezoid(float a,float b,float h1,int n)
{double x,y,t=0;
int i;
for(i=1;i<n;i++)
{x=a+i*h1;
if(x==0) y=2;
else y=2*(sin(x)/x);
t=t+y;}
if(a==0) t=t+1+sin(b)/b;
else if(b==0) t=t+1+sin(a)/a;
else t=t+sin(a)/a+sin(b)/b;
t=(h1/2)*t;
return t;}
double Simpson(float a,float b,float h2,int m)
{double x,y,s=0;
int i;
for(i=1;i<m;i++)
{x=a+i*h2;
if(x==0) y=2;
else y=2*(sin(x)/x);
s=s+y;}
for(i=0;i<m;i++)
{x=a+((1+2*i)*h2)/2;
if(x==0) y=4;
else y=4*(sin(x)/x);
s=s+y;}
if(a==0) s=s+1+sin(b)/b;
else if(b==0) s=s+1+sin(a)/a; else s=s+sin(a)/a+sin(b)/b;
s=(h2/6)*s;
return s;}
double Integral(float a,float b) {double h,x,y,I=0;
int n=500000;
h=(b-a)/500000;
for(n=0;n<500000;n++)
{x=a+n*h;
if(x==0) y=1;
else y=sin(x)/x;
I=I+y*h;}
return I;}
SigDigT(double d1,double d2,int i) {int j=0,k=0;
double r=1,t;
if(i==0)
{do{r=r*(0.1);
t=d1/r;
j++;}while(t<0.1);
return j;}
else
{do{r=r*(0.1);
t=d2/r;
j++;}while(t<0.1);
return j;}}。

相关文档
最新文档