复化梯形公式和simpsion公式
复化梯形公式和复化Simson公式
数值计算方法上机题目3一、计算定积分的近似值:要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计; (2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0 for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果 Tn= 7.3891等分数 n=7019已知值与计算值的误差 R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果 Sn= 7.3891等分数 n=24已知值与计算值的误差 R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
复化梯形公式和复化辛普生公式
}
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)]
复合梯形公式和复合Simpson公式用法的比较
复合梯形公式和复合Simpson 公式用法的比较一、问题叙述由曲线y ()f x = ,a x b ≤≤绕x 轴旋转得到立体,其表面积计算公式为2(baS f x π=⎰分别用N=10的复合梯形公式和N=5的复合Simpson 公式求解下列每个的曲线绕x 轴旋转得到立方体的表面积。
(1)3(),01f x x x =≤≤ (2)()sin ,0/4f x x x π=≤≤ ; (3)()e ,01x f x x -=≤≤。
二、问题分析由叙述可知,三个函数在各自的定义域上函数值都大于0,且函数在各自的定义域上都是单调的。
(1)复合梯形公式取正整数n,令(b a)/n h =-,则点(k 0,1,,n)k x a kh =+=将[a,b]分为n 个小区间,利用定积分的性质可得11110011(x)(x)(x )f(x )2 =(a)f(b)2(x )2j jn n bx j j ax j j n j j h f dx f dx f h f f +--+==-=⎡⎤=≈+⎣⎦⎡⎤++⎢⎥⎣⎦∑∑⎰⎰∑所以,复合梯形公式的近似面积为:11(a)f(b)2(x )2n j j h S f f -=⎡⎤=++⎢⎥⎣⎦∑(2)复合Simpson 公式取正整数n,令h=(b-a)/2n,(j 0,1,,2n)j x a jh =+=.利用定积分的性质,以及Simpson 公式[]012(x)(x )4f(x )f(x )(f)3bahf dx f R =+++⎰在小区间222,j j x x -⎡⎤⎣⎦上的应用,有 2222221211(x)(x)(x )4f(x )f(x )3j nnbj j j j ax j j hf dx f dx f ---==⎡⎤=≈++⎣⎦∑∑⎰⎰整理可得,复合Simpson 公式的近似面积为:121211[f(a)f(b)4(x )2(x )]3n n j j j j hS f f --===+++∑∑。
复化梯形公式和复化抛物线公式 -回复
复化梯形公式和复化抛物线公式是数值积分中常用的近似计算方法,用于估计函数在给定区间上的定积分值。
1. 复化梯形公式(Composite Trapezoidal Rule):复化梯形公式通过将积分区间划分为多个小区间,然后在每个小区间上应用梯形公式进行计算。
具体步骤如下:- 将积分区间[a, b]均匀地分成n个小区间,每个小区间的宽度为h = (b - a) / n。
- 对于每个小区间,计算函数在两个端点的值,然后将这两个值与小区间宽度相乘并除以2,得到该小区间的梯形面积。
- 将所有小区间的梯形面积相加,即可得到近似的定积分值。
复化梯形公式的公式表示为:∫[a, b] f(x) dx ≈ h/2 * [f(a) + 2f(a+h) + 2f(a+2h) + ... + 2f(a+(n-1)h) + f(b)]2. 复化抛物线公式(Composite Simpson's Rule):复化抛物线公式通过将积分区间划分为多个小区间,然后在每个小区间上应用抛物线公式进行计算。
具体步骤如下:- 将积分区间[a, b]均匀地分成n个小区间,每个小区间的宽度为h = (b - a) / n。
- 对于每个小区间,计算函数在三个节点(起点、终点和中点)处的值,然后将这三个值与小区间宽度相乘并按照一定的权重进行组合,得到该小区间的抛物线面积。
- 将所有小区间的抛物线面积相加,即可得到近似的定积分值。
复化抛物线公式的公式表示为:∫[a, b] f(x) dx ≈ h/3 * [f(a) + 4f(a+h) + 2f(a+2h) + 4f(a+3h) + ... + 2f(a+(n-2)h) + 4f(a+(n-1)h) + f(b)]需要注意的是,选择合适的n值对于准确估计积分值非常重要。
一般情况下,增加n的值可以提高计算精度,但也会增加计算的复杂性和时间成本。
因此,在实际应用中需要根据需求进行权衡和选择合适的n值。
复化梯形法 复化矩形法 变步长梯形 变步长辛普森
陕西科技大学机械教改班用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.复化梯形法方法和复化矩形法类似,只是把原来的矩形小面积变成了梯形小面积,但是精确度明显提高了,也就是说达到同样的精度需要的时间少了。
复化梯形公式和复化辛普森公式
复化梯形公式和复化辛普森公式1. 引言嘿,大家好!今天我们来聊聊数学里那些看似高深莫测的公式,尤其是复化梯形公式和复化辛普森公式。
这些名字听起来就像是从某部科幻片里蹦出来的角色,但其实它们是我们在数值积分中不可或缺的好帮手。
你知道吗?它们就像是数学世界里的“超能英雄”,让我们轻松搞定积分,简直是妙不可言。
2. 复化梯形公式2.1 你知道什么是梯形吗?首先,咱们得聊聊复化梯形公式。
说白了,就是把一个复杂的积分任务,分解成几个小的梯形来求解。
想象一下,你在河边钓鱼,河水流得可欢了。
为了找一个合适的钓鱼点,你可能得把河分成几段,然后每一段的宽度就是你的小梯形。
你看,这就是复化梯形的魅力所在!2.2 如何运用复化梯形公式?用这个公式的时候,你只需把整个区间分成N个小区间,每个区间的宽度都是一样的。
然后,把每个小区间的函数值拿来加一加,再乘上宽度的一半,最后再把头尾的函数值加上。
这听起来是不是很简单?比如,你想算从0到1的某个函数的积分,只要把这个区间分成若干段,像切蛋糕一样,每一片都求个函数值,然后把结果合起来就行了。
简单得就像吃个冰淇淋,大家都喜欢。
3. 复化辛普森公式3.1 辛普森是谁?接下来,让我们来看看复化辛普森公式。
辛普森这个名字,大家可能都听过,或者说过“这是辛普森家的事儿”。
其实,他是一位牛逼的数学家,专门研究如何让积分变得更加简单。
辛普森公式就像是对梯形公式的一次升级,像换了个新款手机,功能更强大,效果更好。
3.2 如何运用复化辛普森公式?用复化辛普森公式的时候,我们也是把整个区间分成N个小区间,不过这里的N必须是偶数哦!每个小区间的宽度仍然是一样的。
然后,用函数值的加权平均法来计算。
换句话说,你把每个小区间的头尾和中间的函数值都考虑进来,像是为你的冰淇淋加上各种口味的配料。
最后,你的结果就会比单纯用梯形公式得来的要精准多了,仿佛一口下去,味蕾都在舞蹈。
4. 比较与应用4.1 谁更强?说到这儿,很多人就会问,复化梯形公式和复化辛普森公式,谁更厉害呢?其实,这就像问“苹果和橘子,哪个更好吃”。
复化梯形公式和复化Simpson公式
数值计算方法上机题目3一、计算定积分的近似值:221x e xe dx =⎰ 要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计;(2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果Tn= 7.3891等分数n=7019已知值与计算值的误差R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果Sn= 7.3891等分数n=24已知值与计算值的误差R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
复化梯形公式和复化Simpson公式
数值计算方法上机题目3一、计算定积分的近似值:221x e xe dx =⎰ 要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计;(2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果 Tn= 7.3891等分数 n=7019已知值与计算值的误差 R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果 Sn= 7.3891等分数 n=24已知值与计算值的误差 R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
复化梯形公式和复化Simpson公式
数值计算方法上机题目3一、计算定积分的近似值:要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计;(2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数 结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x %定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可 f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))' %因fminbnd ()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果Tn= 7.3891等分数n=7019已知值与计算值的误差R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果Sn= 7.3891等分数n=24已知值与计算值的误差R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
复化梯形公式和复化Simpson公式
数值计算方法上机题目3一、计算定积分的近似值:221x e xe dx =⎰ 要求:(1)若用复化梯形公式和复化Simpson 公式计算,要求误差限71021-⨯=ε,分别利用他们的余项估计对每种算法做出步长的事前估计;(2)分别利用复化梯形公式和复化Simpson 公式计算定积分;(3)将计算结果与精确解比较,并比较两种算法的计算量。
1.复化梯形公式程序:程序1(求f (x )的n 阶导数:syms xf=x*exp(x) %定义函数f (x )n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n 阶导数结果1输入n=2f2 =2*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(2*exp(x) + x*exp(x))','x') %定义f(x)的二阶导数,输入程序1里求出的f2即可。
f3='-(2*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,以便求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的二阶导数的最小值点,也就是求二阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/12*((b-a)/n)^2*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hTn1=0for k=1:n-1 %求连加和xk=a+k*hTn1=Tn1+f(xk)endTn=h/2*((f(a)+2*Tn1+f(b)))z=exp(2)R=Tn-z %求已知值与计算值的差fprintf('用复化梯形算法计算的结果 Tn=')disp(Tn)fprintf('等分数 n=')disp(n) %输出等分数fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用复化梯形算法计算的结果Tn= 7.3891等分数n=7019已知值与计算值的误差R= 2.8300e-0082. Simpson公式程序:程序1:(求f(x)的n阶导数):syms xf=x*exp(x) %定义函数f(x)n=input('输入所求导数阶数:')f2=diff(f,x,n) %求f(x)的n阶导数结果1输入n=4f2 =4*exp(x) + x*exp(x)程序2:clcclearsyms x%定义自变量xf=inline('x*exp(x)','x') %定义函数f(x)=x*exp(x),换函数时只需换该函数表达式即可f2=inline('(4*exp(x) + x*exp(x))','x') %定义f(x)的四阶导数,输入程序1里求出的f2即可f3='-(4*exp(x) + x*exp(x))'%因fminbnd()函数求的是表达式的最小值,且要求表达式带引号,故取负号,一边求最大值e=5*10^(-8) %精度要求值a=1 %积分下限b=2 %积分上限x1=fminbnd(f3,1,2) %求负的四阶导数的最小值点,也就是求四阶导数的最大值点对应的x值for n=2:1000000 %求等分数nRn=-(b-a)/180*((b-a)/(2*n))^4*f2(x1) %计算余项if abs(Rn)<e %用余项进行判断break% 符合要求时结束endendh=(b-a)/n %求hSn1=0Sn2=0for k=0:n-1 %求两组连加和xk=a+k*hxk1=xk+h/2Sn1=Sn1+f(xk1)Sn2=Sn2+f(xk)endSn=h/6*(f(a)+4*Sn1+2*(Sn2-f(a))+f(b)) %因Sn2多加了k=0时的值,故减去f(a)z=exp(2)R=Sn-z %求已知值与计算值的差fprintf('用Simpson公式计算的结果 Sn=')disp(Sn)fprintf('等分数 n=')disp(n)fprintf('已知值与计算值的误差 R=')disp(R)输出结果显示:用Simpson公式计算的结果Sn= 7.3891等分数n=24已知值与计算值的误差R= 2.7284e-008用复化梯形公式计算的结果为:7.3891,与精确解的误差为:2.8300e-008。
数值计算考题五——复合梯形求积公式与复合辛普森求积公式求积分
数值计算考题五1. 分别用复合梯形求积公式与复合辛普森求积公式求积分I=⎰102x e sinx dx 的近似值,要求误差不超过ε=0.5⨯10-5.解:方法一: 复合梯形求积公式复合梯形求积公式是将积分区间划分为n 个很小的区间,然后将各个小区间的面积相加而得到在整个积分区间上的积分,当分成的小区间数n →∞时,求得的面积就等于积分的精确值。
由复合梯形求积公式的余项R n T 可得满足精度要求≤ε0.5⨯10-5时区间()b a ,被分成的区间数n 的最小值为700,所以在编程时循环次数应大于等于这个值,方可满足精度要求。
以下是编写的C 语言程序:#include<stdio.h>#include<math.h>void main(){int n=700,i;double x,f=0.0,t,h,T=0.0,c=2.0,a=0.0,b=1.0;h=(b-a)/n;for(i=0;i<n;i++){x=a+i*h;f=f+exp(pow(x,c))*sin(x);}t=(h/2)*(2*f+sin(1)*exp(1));printf("T=%f\n",t);}输出结果为T=0.778746.方法二:复合辛普森求积公式:复合辛普森求积法是将积分区间分割之后,在每个小区间[x i ,x i+1]上运用辛普森求积公式。
以下是编写的c 语言程序:#include<stdio.h>#include<math.h>void main(){int n=700,i;double x1,x2,f1=0.0,f2=0.0,t,h,T=0.0,c=2.0,a=0.0,b=1.0;h=(b-a)/n;for(i=0;i<n;i++){x1=a+i*h;x2=a+(i+0.5)*h;f1=f1+exp(pow(x1,c))*sin(x1);f2=f2+exp(pow(x2,c))*sin(x2); }t=(h/6)*(2*f1+sin(1)*exp(1)+4*f2); printf("T=%f\n",t);}程序输出结果为0.778745.2. 用高斯求积法求上述积分的近似值。
数值分析复化Simpson积分公式和复化梯形积分公式计算积分的通用程序培训讲学
数值分析复化S i m p s o n积分公式和复化梯形积分公式计算积分的通用程序数值分析第五次程序作业PB09001057 孙琪【问题】分别编写用复化Simpson积分公式和复化梯形积分公式计算积分的通用程序;用如上程序计算积分:取节点并分析误差;简单分析你得到的数据。
【复化Simpson积分公式】Simpson法则:使用偶数个子区间上的复合Simpson法则:设n是偶数,则有将Simpson法则应用于每一个区间,得到复合Simpson法则:公式的误差项为:其中δ【复化梯形积分公式】梯形法则:对两个节点相应的积分法则称为梯形法则:如果划分区间[a,b]为:那么在每个区间上可应用梯形法则,此时节点未必是等距的,由此得到复合梯形法则:对等间距h=(b-a)/n及节点,复合梯形法则具有形式:误差项为:【算法分析】复合Simpson法则和复合梯形法则的算法上述描述中都已介绍了,在此不多做叙述。
【实验】通过Mathematica编写程序得到如下结果:1.利用复化Simpson积分公式得:可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的Simpson公式很好看出来,因为在每一段小区间内,都是用Simpson法则去逼近,而每一段的误差都是由函数在该区间内4阶导数值和区间长度的4次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。
2.利用复化梯形积分公式得:可以看出,当节点数选取越来越多时,误差项越来越小,这从复合的梯形公式很好看出来,因为在每一段小区间内,都是用梯形法则去逼近,而每一段的误差都是由函数在该区间内2阶导数值和区间长度的2次方乘积决定的,当每一段小区间越来越小时,相应的每一段小区间内的逼近就会越来越好,从而整体的逼近效果就会越来越好。
【分析】通过对上述两种法则的效果来看,复合Simpson法则的误差要比复合梯形法则收敛到0更快,说明复合Simpson法则逼近到原来的解更快,这主要是因为在每一段小区间内,复合Simpson法则利用得是Simpson法则,复合梯形法则利用得是梯形法则,前者的误差项要比后者的误差项小很多,因此造成了逼近速度的不一样。
复合梯形公式和复合辛普森公式
复合梯形公式和复合辛普森公式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:将所有小区间上的定积分近似值相加,得到最终的近似值。
复合辛普森公式的误差主要取决于小区间的数量和函数在每个小区间上的变化情况。
与复合梯形公式相比,复合辛普森公式的精度更高,但计算复杂度也更高。
综上所述,复合梯形公式和复合辛普森公式是数值积分中常用的近似计算方法。
它们通过将积分区间划分成小区间,并在每个小区间上应用相应的公式来逼近定积分的值。
这两种方法都可以通过增加小区间的数量来提高近似的精度,但相应地也会增加计算的复杂度。
根据实际情况,我们可以选择合适的方法来计算需要求解的定积分。
复合梯形公式和复合辛普森公式例题
复合梯形公式和复合辛普森公式例题复合梯形公式和复合辛普森公式例题数值计算是现代科学技术中重要的研究领域之一,而数值积分是数值计算中的一个重要分支。
数值积分是指在一定区间上用数值方法来逼近求解定积分的过程。
综合考虑精度和效率,梯形公式和辛普森公式是数值积分中比较常用的方法,而复合梯形公式和复合辛普森公式则是对前两种方法的改进和完善。
一、复合梯形公式(一)基本原理梯形公式是数值积分中运用最广泛的一种方法,其基本思想是将被积函数在区间[a,b]上的曲线用若干条梯形逼近,然后计算梯形的面积之和,得到函数曲线下的面积。
若将区间[a,b]分为n个小区间,梯形公式还可以推广为复合梯形公式。
复合梯形公式的基本原理是将整个区间[a,b]等分为n 个小区间,每个小区间的长度为h=(b-a)/n,然后对于每个小区间求出梯形的面积,并将所有梯形面积加起来得到函数曲线下的面积,并作为积分的近似值。
具体地说,复合梯形公式的表达式为:$$\int_a^b f(x)dx \approx \frac{h}{2}[f(a)+2\sum_{i=1}^{n-1} f(x_{i})+f(b)]$$其中,$x_1=a+h,x_2=a+2h,...,x_{i+1}=x_i+h,...,x_{n}=b-h$,h是小区间长度。
(二)例题现在考虑如下的积分:$$I=\int_0^1 e^{x^2} dx$$将整个区间[0,1]等分为4个小区间,得到$h=0.25$,对于每个小区间,可以分别求出梯形的面积,得到:$$\frac{h}{2}[f(0)+2f(0.25)+2f(0.5)+2f(0.75)+f(1)]$$代入函数$f(x)=e^{x^2}$,得到近似积分值为$1.4627$。
使用Matlab代码进行计算,得到具体结果为:>> f=@(x) exp(x.^2); h=0.25; x=0:h:1;I=h/2*(f(x(1))+2*sum(f(x(2:end-1)))+f(x(end))) sprintf('%.5f',I)ans =1.46270可以发现,与精确值$1.46265$相比,误差很小,说明复合梯形公式是一种很有效的近似积分方法。
复化梯形公式和复化辛普森公式的精度比较
复化梯形公式和复化辛普森公式的精度比较实验四、复化梯形公式和复化Simpson公式的精度比较(2学时)一、实验目的与要求1、熟悉复化Simpson公式和复化梯形公式的构造原理;2、熟悉并掌握二者的余项表达式;3、分别求出准确值,复化梯形的近似值,复化Simpson的近似值,并比较后两者的精度;4、从余项表达式,即误差曲线,来观察二者的精度,看哪个更接近于准确值。
二、实验内容:对于函数sin()xf xx=,试利用下表计算积分1sin xI dxx=⎰。
表格如下:注:分别利用复化梯形公式和复化Simpson公式计算,比较哪个精度更好。
其中:积分的准确值0.9460831I=。
三、实验步骤1、熟悉理论知识,并编写相应的程序;2、上机操作,从误差图形上观察误差,并与准确值相比较,看哪个精度更好;3、得出结论,并整理实验报告。
四、实验注意事项1、复化梯形公式,程序主体部分:for n=2:10T(n)=0.5*T(n-1)for i=1:2^(n-2)T(n)=T(n)+(sin((2*i-1)/2^(n-1))/((2*i-1)/2^(n-1)))/2^(n-1);endend2、复化Simpson公式,程序主体部分: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五.实验内容复化梯形公式和复化辛普森公式的引入复化梯形公式:110[(()]2n n k k k h T f x f x -+==+∑;复化辛普森公式:11102[(4()()]6n n k k k k h S f x f x f x -++==++∑; 根据题意和复化梯形公式、复化辛普森公式的原理编辑程序求解代码如下: Matlab 代码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+0.5*(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;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部分程序结果输出:s =0.946083070076534s1 =0.945690863582701s2 =0.946083085384947结果分析根据结果输出可知:积分10sin()xI dxx=⎰的准确值为:I= 0.946083070076534;通过复化梯形公式和复化辛普森公式得到的积分值为:s1 =0.945690863582701:s2 =0.946083085384947;相对误差为:411100 4.1510100S I Iδ--=⨯=⨯; 822100 1.6210100S I I δ--=⨯=⨯; 显然,从相对误差可知通过辛普森公式得到的结果误差小精度高。
复化梯形公式、复化辛卜生公式
复化梯形公式、复化辛卜生公式
一、复化梯形公式及其余项
在区间不大时,用梯形公式、辛卜生公式计算定积分是简单实用的,但当区间较大时, 用梯形公式、辛卜生公式计算定积分达不到精确度要求. 为了提高计算的精确度,我们将 [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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
¸´»¯ÌÝÐι«Ê½
#include <stdio.h>
#include <math.h>
#define e 1e-5
#define a 0 //»ý·ÖÏÂÏÞa
#define b 1 //»ý·ÖÉÏÏÞb
#define f(x) (4/(1+(x*x))) //±»»ýº¯Êýf(x)
int main()
{
int i,n;
double h,t0,t,g;
n=1; //¸³³õÖµ
h=(double)(b-a)/2;
t=h*(f(a)+f(b));
do
{
t0=t;
g=0;
for (i=1;i<=n;i++)
g+=f((a+(2*i-1)*h));
t=(t0/2)+(h*g); //¸´»¯ÌÝÐι«Ê½
n*=2;
h/=2;
}
while (fabs(t-t0)>e); //×Ô¶¨ÒåÎó²îÏÞe
printf("%.8lf",t); //Êä³ö»ý·ÖµÄ½üËÆÖµ
return 0;
}
3)RombergÇó»ý·¨£º
#include <stdio.h>
#include <math.h>
#define e 1e-5
#define a 0 //»ý·ÖÏÂÏÞa
#define b 1 //»ý·ÖÉÏÏÞb
#define f(x) (4/(1+(x*x))) //±»»ýº¯Êýf(x) double t[100][100];
int main()
{
int n,k,i,m;
double h,g,p;
h=(double)(b-a)/2;
t[0][0]=h*(f(a)+f(b));
k=1;
n=1;
do //RombergËã·¨
{
g=0;
for (i=1;i<=n;i++)
g+=f((a+((2*i-1)*h)));
t[k][0]=(t[k-1][0]/2)+(h*g);
for (m=1;m<=k;m++)
{
p=pow(4,(double)(m));
t[k-m][m]=(p*t[k-m+1][m-1]-t[k-m][m-1])/(p-1);
}
m-=1;
h/=2;
n*=2;
k+=1;
}
while (fabs(t[0][m]-t[0][m-1])>e); //×Ô¶¨ÒåÎó²îÏÞe
printf("%.8lf",t[0][m]);
return 0;
}
ÌÝÐι«Ê½ÓëSimpson¹«Ê½Çó»ý·Ö·¨µÄC++³ÌÐò2008Äê11ÔÂ13ÈÕ ÐÇÆÚËÄ 21:09#include<iostream>
#include<cassert>
#include <iostream>
#include<cmath>
using namespace std;
const double PI=3.1415926;
double tixingjifen(double (*f)(double),double a,double b,int n); double Simpson(double (*f)(double),double a,double b,int n);
double f(double x)
{
return 3.0*x*x+5.0*x-1.0;
}
double g(double x)
{
return PI*pow(1.0+pow(x/2.0,2),2);
}
int main()
{
cout<<tixingjifen(g,0.0,2.0,4)<<endl;
cout<<Simpson(g,0.0,2.0,4)<<endl;
system("pause");
return 0;
}
double tixingjifen(double (*f)(double),double a,double b,int n) {
double dn=(double)n;
double h=(b-a)/dn;
double sum=0.0;
double x=a+h;
for(int i=1;i<n;++i)
{
sum=sum+f(x);
x=x+h;
}
sum=sum*2.0;
sum=sum+f(a)+f(b);
sum=sum*h/2.0;
return sum;
}
double Simpson(double (*f)(double),double a,double b,int n) {
double dn=(double)n;
double h=(b-a)/dn;
double result=0.0;
double sum=0.0;
int i;
for(i=1;i<=n;++i)
sum=sum+f(a+(2.0*(double)i-1.0)*h/2.0);
result=result+4.0*sum;
sum=0.0;
for(i=1;i<=(n-1);++i)
sum=sum+f(a+h*(double)i);
result=result+2.0*sum;
result=result+f(a)+f(b);
result=result*h/6.0;
return result;
}。