复化梯形公式和复化辛卜生公式
- 格式:doc
- 大小:87.50 KB
- 文档页数:4
复化梯形公式,复化辛普森公式,复化柯特斯公式
复化梯形公式、复化辛普森公式和复化柯特斯公式都是用来计算定积分的近似值的方法。
1. 复化梯形公式:将积分区间分成若干个小区间,在每个小区间上用梯形面积近似代替该小区间的曲边梯形面积,然后将这些梯形面积相加,得到积分的近似值。
2. 复化辛普森公式:将积分区间分成若干个等分小区间,在每个小区间上用矩形面积近似代替该小区间的曲边梯形面积,然后将这些矩形面积相加,得到积分的近似值。
3. 复化柯特斯公式:将积分区间分成若干个等分小区间,在每个小区间上用切线段长度近似代替该小区间的曲边梯形面积,然后将这些切线段长度相加,得到积分的近似值。
这三种方法都是通过将积分区间分成若干个小区间,然后在每个小区间上用近似方法计算该小区间的曲边梯形面积,最后将这些近似值相加得到积分的近似值。
它们的精度和误差都与分区间的大小有关。
复化梯形公式、复化辛卜生公式
一、复化梯形公式及其余项
在区间不大时,用梯形公式、辛卜生公式计算定积分是简单实用的,但当区间较大时, 用梯形公式、辛卜生公式计算定积分达不到精确度要求. 为了提高计算的精确度,我们将 [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)计算得
而积分的准确值。
复合梯形公式和复合辛普森公式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:将所有小区间上的定积分近似值相加,得到最终的近似值。
复合辛普森公式的误差主要取决于小区间的数量和函数在每个小区间上的变化情况。
与复合梯形公式相比,复合辛普森公式的精度更高,但计算复杂度也更高。
综上所述,复合梯形公式和复合辛普森公式是数值积分中常用的近似计算方法。
它们通过将积分区间划分成小区间,并在每个小区间上应用相应的公式来逼近定积分的值。
这两种方法都可以通过增加小区间的数量来提高近似的精度,但相应地也会增加计算的复杂度。
根据实际情况,我们可以选择合适的方法来计算需要求解的定积分。
- 让每一个人同等地提高(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é)的结果偏差小精度高。
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 +++。
(一)实验目的熟悉并掌握数值积分的方法,重要训练复化梯形公式,复化simpson 公式以及romberg 积分。
(二)问题描述问题三数值积分椭圆周长的计算。
考虑椭圆,为计算其周22221x y a b+=长,只要计算其第一象限的长度即可.用参数方程可以表示为,cos (0/2)sin x a t t y b t π=⎧≤≤⎨=⎩计算公式为/0π⎰为计算方便,我们可以令,即计算下面的积分1a =/0π⎰/0π=⎰(可以归结为上面的/0π⎰/0a π=⎰形式)采用复化梯形公式,复化Simpson 公式以及Romberg 积分的方法计算积分/0()I b π=⎰给出通用程序,该通用程序可以计算任何一个函数在任意一个区间在给定的精度下的数值积分。
程序输出为计算出的数值积分值以及计算函数值的次数。
(三)算法介绍首先利用给出的各迭代公式,设计程序。
在matlab 对话框中输入要计算的函数,给出区间和精度。
复化梯形的迭代公式为:;∫b a f(x)dx =ℎ/2[f (a )+2∑n ‒1j =1f (x j )+f(b)]复化simpson 迭代公式为:;∫b a f(x)dx =ℎ/3[f (a )+2∑(n 2)‒1j =1f (x 2j )+4∑(n 2)j =1f (x 2j ‒1)+f(b)]Romberg 迭代公式为:。
R k,j =R k,j ‒1+R k,j ‒1—R k ‒1,j ‒14j ‒1-1(四)程序对于复化梯形公式和复化simpson 公式,我们放在jifenn.m 中。
(%标记后的程序可用来把b 看为变量时的算法实现)%复化梯形公式function y=jifenn(f,n,a,b) (说明:f 表示任一函数,n 精度,a ,b 为区间)fi=f(a)+f(b);h=(b-a)/n;d=1;%function f=jifen(n,a,b,c)%syms t%y=sqrt(1+(c^2-1)*cos(t)^2);%ya=subs(y,t,a);%yb=subs(y,t,b);%fi=ya+yb;for i=1:n-1x=a+i*h;fi=fi+2*f(x);d=d+1;%yx=subs(y,t,x);%fi=fi+2*yx;endf4=h/2*fi,d%复化simposon 公式f1=0;f2=0;dd=1;for i=1:n-1dd=dd+1;if rem(i,2)~=0;x1=a+i*h;f1=f1+f(x1);else rem(i,2)==0;x2=a+i*h;f2=f2+f(x2) ;endendf3=(h/3)*(f(a)+4*f1+2*f2+f(b)),dd对于romberg积分,建立romberg.m文件。
复化梯形公式和复化辛普森公式1. 引言嘿,大家好!今天我们来聊聊数学里那些看似高深莫测的公式,尤其是复化梯形公式和复化辛普森公式。
这些名字听起来就像是从某部科幻片里蹦出来的角色,但其实它们是我们在数值积分中不可或缺的好帮手。
你知道吗?它们就像是数学世界里的“超能英雄”,让我们轻松搞定积分,简直是妙不可言。
2. 复化梯形公式2.1 你知道什么是梯形吗?首先,咱们得聊聊复化梯形公式。
说白了,就是把一个复杂的积分任务,分解成几个小的梯形来求解。
想象一下,你在河边钓鱼,河水流得可欢了。
为了找一个合适的钓鱼点,你可能得把河分成几段,然后每一段的宽度就是你的小梯形。
你看,这就是复化梯形的魅力所在!2.2 如何运用复化梯形公式?用这个公式的时候,你只需把整个区间分成N个小区间,每个区间的宽度都是一样的。
然后,把每个小区间的函数值拿来加一加,再乘上宽度的一半,最后再把头尾的函数值加上。
这听起来是不是很简单?比如,你想算从0到1的某个函数的积分,只要把这个区间分成若干段,像切蛋糕一样,每一片都求个函数值,然后把结果合起来就行了。
简单得就像吃个冰淇淋,大家都喜欢。
3. 复化辛普森公式3.1 辛普森是谁?接下来,让我们来看看复化辛普森公式。
辛普森这个名字,大家可能都听过,或者说过“这是辛普森家的事儿”。
其实,他是一位牛逼的数学家,专门研究如何让积分变得更加简单。
辛普森公式就像是对梯形公式的一次升级,像换了个新款手机,功能更强大,效果更好。
3.2 如何运用复化辛普森公式?用复化辛普森公式的时候,我们也是把整个区间分成N个小区间,不过这里的N必须是偶数哦!每个小区间的宽度仍然是一样的。
然后,用函数值的加权平均法来计算。
换句话说,你把每个小区间的头尾和中间的函数值都考虑进来,像是为你的冰淇淋加上各种口味的配料。
最后,你的结果就会比单纯用梯形公式得来的要精准多了,仿佛一口下去,味蕾都在舞蹈。
4. 比较与应用4.1 谁更强?说到这儿,很多人就会问,复化梯形公式和复化辛普森公式,谁更厉害呢?其实,这就像问“苹果和橘子,哪个更好吃”。
实验三:分别用复化梯形公式和复化辛卜生公式计算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;}}。