复合辛普森求积公式
复合辛普森公式

复合辛普森公式-CAL-FENGHAI.-(YICAI)-Company One1实验5 复合辛普森公式李涛 0108 计自1201一、实验目的用复合辛普森公式计算积分dx x ⎰+4802cos 1,使误差不超过-410(注意所给积分特点,做出相应的处理后再计算)二、实验步骤1.算法原理复合辛普森原理:将区间],[b a 划分为n 等分,在每个子区间[]1,+k k x x 上采用辛普森公式,若记,2121h x x k k +=+则得 ∑⎰-===1)()(n k b a dx x f dx x f I ).()]()(4)([6121f R x f x f x f h n n k k k k +++=∑-=+ 记∑-=+++=121)]()(4)([6n k k k k n x f x f x f h S ],)()(2)(4)([6101121∑∑-=-=++++=n k n k k k b f x f x f a f h 称为复合辛普森求积公式,其余项为.),(),()2(180)(101)4(4∑-=+∈-=-=n k k k k k n n x x f h h S I f R ηη于是当],[)(4b a C x f ∈时,与复合梯形公式相似有),(),()2(180)()4(4b a f h a b S I f R n n ∈--=-=ηη 易知误差阶为4h ,收敛性是显然的,实际上,只要],[)(b a C x f ∈则可得到收敛性,即 ⎰=∞→ba n n dx x f S )(lim 此外,由于n S 中求积公系数均为正数,故知辛普森公式计算稳定。
2.算法步骤复合辛普森:首先将区间],[b a 划分为n 等分,在每个子区间[]1,+k k x x 上采用辛普森公式,若记,2121h x x k k +=+则得∑-=+++=1021)]()(4)([6n k k k k n x f x f x f h S ])()(2)(4)([6101121∑∑-=-=++++=n k n k k k b f x f x f a f h算法过程:这里将辛普森公式写为Sn()函数,然后在Solve()函数里依次计算S1,S2,S4,S6.......当相邻的精度小于eps 时退出循环,则S2n 保存结果。
复合辛普森公式matlab例题

文章标题:深度剖析复合辛普森公式在Matlab中的应用1.引言复合辛普森公式是数值分析中常用的积分逼近方法,在工程和科学领域都有广泛的应用。
本文将深入探讨复合辛普森公式的原理和在Matlab中的具体例题应用,以帮助读者全面理解该方法的实际操作和应用场景。
2.复合辛普森公式简介复合辛普森公式是一种数值积分方法,通过将积分区间分割成若干个小区间,然后在每个小区间上使用辛普森公式进行积分逼近,最终得到整个积分区间上的近似值。
其公式表达为:\[ S_n(h) = \frac{h}{3}[f(x_0) + 4\sum_{i=1}^{n/2}f(x_{2i-1}) +2\sum_{i=1}^{n/2-1}f(x_{2i}) + f(x_n)] \]其中,\(h\)为步长,\(n\)为分割的小区间数。
3. Matlab实例应用假设要对函数\(f(x) = x^3 + 2x^2 + 4x + 1\)在区间\([a, b]\)上进行积分逼近,可以通过Matlab编程实现复合辛普森公式的应用。
需要确定积分区间的上下限,然后计算步长\(h\),接着编写Matlab代码进行求解。
```matlabfunction result = simpson(f, a, b, n)h = (b - a) / n;x = a:h:b;y = f(x);result = h/3 * (y(1) + 4*sum(y(2:2:end-1)) + 2*sum(y(3:2:end-2)) + y(end));end% 调用simpson函数进行积分逼近f = @(x) x.^3 + 2*x.^2 + 4*x + 1;a = 1;b = 2; n = 4;result = simpson(f, a, b, n);disp(result);```在以上Matlab代码中,首先定义了一个名为simpson的函数,用于计算复合辛普森公式的近似积分值。
复合求积公式

§5.3 复合求积公式由于在实际计算时,不宜使用高阶的牛顿——柯特斯公式,但若积分区间较大,单独用一个低阶的牛顿——柯特斯公式来计算积分的近似值,显然精度不好,为了提高数值求积的精确度,可利用积分对区间的可加性来解决这个问题,这就是通常采用的复合求积法。
所谓复合求积法,其指导思想就是先将积分区间分成若干个小区间,在每个小区间上采用低阶求积公式进行计算,然后把所有子区间的计算结果相加得出新的求积公式,这种公式就叫做复合求积公式。
5.3.1 低阶复合求积公式1 复合梯形求积公式如果在区间(a ,b)上直接应用梯形公式则可得(a b h -=1):T 1=)]()([21b f a f h +=)]()([2b f a f a b +-若在区间(a ,b)中,增加一个结点2/)(b a c +=,则把区间(a ,b)分成两个小区间(a ,c)与(c ,b),在两个小区间上分别应用梯形公式,然后相加就会得出新的求积公式T 2:(其中2/)(2/12a b h h -==)T 2=)]()([22c f a f h ++)]()([22b f c f h + =)]()2(2)([22b f b a f a f a b +++⨯-继续增加结点,把区间(a ,b)分成4等分,(a ,x 1) 、(x 1,x 2)、 (x 2,x 3) 、(x 3,b) ,在每个小区间上分别应用梯形公式后再相加,就会得出新的求积公式:T 4=)]()([214x f a f h ++)]()([2214x f x f h ++)]()([2324x f x f h + +)]()([234b f x f h + (其中4/)(2/24a b h h -==), =)}()]43()2()43([2)({42b f b a f b a f b a f a f a b +++++++⨯-其中k x =4kh a +,(k =0,l , (4)同理,把区间(a ,b)分成8等分时,可得求积公式T 8:T 8=)835()826()87([2)({82b a f b a f b a f a f a b ++++++⨯- )}()]87()862()853()844(b f b a f b a f b a f b a f +++++++++上面我们将区间(a ,b)分成k 2等分,是为了在计算后面的数值时,充分利用到前面的数据。
matlab编程积分复合辛普森公式

matlab编程积分复合辛普森公式编程求解复合辛普森公式是一种常用的数值积分方法,在MATLAB中可以通过编写相应的代码实现。
本文将详细介绍如何使用MATLAB编程计算复合辛普森公式,并给出具体的代码实现。
我们需要了解什么是复合辛普森公式。
复合辛普森公式是一种数值积分方法,用于近似计算函数的定积分。
它是在区间[a, b]上使用多个小区间进行逼近,而不是直接在整个区间上进行逼近。
这种方法的优势在于可以提高计算精度,并且对于复杂的函数也能够得到较好的近似结果。
我们需要将整个区间[a, b]划分为n个小区间。
每个小区间的长度为h=(b-a)/n。
然后,我们可以使用复合辛普森公式来近似计算每个小区间上的定积分。
复合辛普森公式的表达式为:I = (h/6)*(f(a) + 4*f((a+b)/2) + f(b))其中,f(x)是要求解的函数。
根据复合辛普森公式的定义,我们需要对每个小区间应用该公式进行求解,并将结果累加得到最终的积分值。
在MATLAB中,我们可以通过编写以下代码来实现复合辛普森公式的求解:```matlabfunction I = composite_simpson(f, a, b, n)h = (b-a)/n;x = a:h:b;y = f(x);I = 0;for i = 1:nI = I + h/6*(y(i) + 4*y(i+1) + y(i+2));endend```上述代码中,函数composite_simpson接受四个参数:函数f、积分区间的起点a、终点b和划分的小区间数n。
其中,函数f是一个函数句柄,表示要求解的函数。
在代码中,我们首先计算出每个小区间的长度h,并生成对应的x值。
然后,通过调用函数f计算出对应的y值。
接下来,我们使用循环对每个小区间应用复合辛普森公式,并将结果累加到变量I中。
最后,我们将得到的积分值I作为函数的输出。
在使用该函数时,我们需要先定义要求解的函数,并将其作为参数传递给composite_simpson函数。
辛普森法则求积分

辛普森法则求积分
辛普森法则是一种数值积分方法,用于近似计算函数的定积分。
这种方法将定积分区间分成若干个等宽子区间,并在每个子区间内用一个二次函数逼近被积函数。
然后通过对这些二次函数进行积分,得到整个定积分的近似值。
具体而言,设被积函数为$f(x)$,积分区间为$[a,b]$,将积分区间等距地分成$2n$个子区间,每个子区间的长度为$h=\frac{b-a}{2n}$。
则辛普森法则的近似公式为:
$$
\int_a^bf(x)dx\approx\frac{h}{3}\left[f(a)+2\sum_{i=1}^{n-1}f(a+2ih)+4\s um_{i=1}^nf(a+(2i-1)h)+f(b)\right]
$$
其中$f(a)$和$f(b)$是被积函数在积分区间端点处的函数值,$f(a+2ih)$和$f(a+(2i-1)h)$是偶数项和奇数项的子区间中心点处的函数值。
这个公式可以通过简单的代数运算和积分计算得到,它的精度随着子区间数的增加而增加,当子区间数增加至一定程度时,可以得到较高的精度。
常用的复化求积公式有复化梯形公式和复化辛普森公式。

)
2
k 1
f
( xk ) f
(b)
称为复化辛普森公式。
类似于复化梯形公式余项的讨论,复化辛普森公式的 求积余项为
Rs
b a h4 2880
f
(4) ( )
a,b
显然,复化辛普森公式是收敛且稳定的.
复化求积公式的余项表明,只要被积函数f(x)及所涉及 的各阶导数在[a,b]上连续,那么复化梯形公式、复化辛普
n1
求出积分值Ik,然后将它们累加求和,用 I k 作为所求积分I
的近似值。
k 0
I
b
n1
f ( x)dx
a k0ቤተ መጻሕፍቲ ባይዱ
xk1 f ( x)dx n1 h
xk
k0 2
f ( xk ) f ( xk1)
h 2
f
(
x0
)
2(
f
(
x1
)
f (x2 ) ...
森公式所得近似值 Tn , Sn , Cn 的余项和步长的关系依次 为O(h2 ) 、O(h4 )、O(h6 ) 。因此当h→0 (即n→∞)时,Tn , Sn , Cn
都收敛于积分真值,且收敛速度一个比一个快。
例1 依次用n=8的复化梯形公式、n=4的复化辛普森公式计算
I
1 sin x dx
213等份时,用复化梯形公式计算误差不超过 1 105。
2
由于Tn 的求积系数为正,由定理2知复合梯形公式是稳定的.
4.3.2 复化辛普森公式及其误差
将积分区间[a,b]划分为n等分,记子区间 xk , xk1 的中点
用复化Simpson求积分

用复化Simpson 求积分函数1.实验目的:(1)掌握用复化Simpson 求积分函数。
(2)附加培养学生的动手能力。
2.实验要求:(1)输入:需要积分的函数,积分的上下线,区间的等分数 。
(2)输出:根据复化Simpson 原理求解的函数积分结果。
3.程序流程:(1)选择需要积分的函数; (2)输入积分函数的上限a ; (3)输入积分函数的下限b ;(4)输入积分区间需要等分数n 。
4.复化Simpson 求解原理:由于Simpson 求积公式要用到三个节点,所以每个子区间1[,]k k x x -上添加一个中点1/2k x -,即, 1/21()2k x a k h -=+-然后在每个子区间上利用Simpson 公式,并将它们想加便的:[]1/21()(1)4()()6nb k k ak hf x dx f k f xf x -=≈-++∑⎰这就是复化Simpson 公式。
** 程序中需要选择的积分函数F 1,F 2,F 3 **F 1表示函数10sin ()x f x d xx=⎰。
F 2表示函数2145ln ()xx e xf x ++++=⎰。
F 3表示函数14co s sin ()1co s x x f x d x x=+⎰。
5.操作流程图:6.分别选择函数F1、F2、F3时的运行结果。
(1)函数F1运行结果图。
(2)函数F2运行结果图。
(3)函数F3的运行结果。
7.源码#include<stdio.h>#include<math.h>//定义函数F1double f1(double x){double s;s=sin(x)/x;if(x==0){return 1;}else{return s;}}//定义函数F2double f2(double x){double s;s=(4+5*x+exp(x)+sqrt(x*x+1)+log(x))/sqrt(2*x*x+1);return s;}//定义函数F3double f3(double x){double s;s=cos(x)*sin(x)/(1+pow(cos(x),4));return s;}main(){int j,i; //for循环中循环变量int t; //用于判断选择那个函数float p,h,a,b,n,d;//p表示点间距,h表示步长,a表示上线,b表示下线,n表示等分数,d表示需要的点数。
数值分析实验复合辛普森公式报告

实验题目:用复合辛普森公式求方程的积学生姓名:***专业:信息与计算科学学号:**********完成日期:2011/11/20西安科技大学计算机科学与技术学院实验题目:利用复合辛普森公式求方程⎰-=109/4ln xdx x 的积学生姓名: 何弯弯 学号: 0908060222 完成日期:2011/10/22 1 实验目的 1、了解复合辛普森公式的方法原理;2、利用复合辛普森公式求方程⎰-=109/4ln xdx x 的积2.1 算法原理原理:将区间[a,b]等分成N 个子区间[x(k),x(k+1)](k=0,1,…..,N -1),h=(b-a )/N ,在每个子区间[x(k),x(k+1)]上使用辛普森公式,可求得结果。
辛普森公式:])(4)(2)()([6/)]()()([6/1115.01015.0∑∑∑=-=+-=+++++=++=n k n k k k n k k k k n x f x f b f a f h x f x f x f h S其中5.0+x x 是[1,+k k x x ]得中点,即2/5.0h x x k k +=+2.2 算法步骤步骤一:输入a,b,h步骤二:代入辛普森公式求的结果2.3 程序流程图3 实验结果分析4实验心得体会通过本次实验我熟悉了用复化辛普森公式求数值积分的全过程,并更加熟悉的掌握了复化辛普生公式以及原理。
使我对数值分析这门课有了进一步的理解,为以后的学习打下了良好的基础。
参考文献[1]龚尚福,贾彭涛,靳玉萍.C/C++语言程序设计.徐州:中国矿业大学出版社,2006[2]李庆阳,王能超,易大义.数值分析(第五版).北京:清华大学出版社,2008附录(源代码)复合辛普森算法代码:#include<iostream.h>#include<math.h>double get(double x){if(x==0) x=0.000000000001;return sqrt(x)*log(x);}double g(double a,double h,double b){int i,n;double sum1,sum2=0,f;n=(int)((b-a)/h);sum1=get(a+h/2);for(i=1;i<=n-1;i++) //求f(x(k))的和{ sum1+=get(a+i*h+h/2);sum2+=get(a+i*h);}f=4*sum1+2*sum2;return f;}void main(){ double a=0,b=1,h;//给定的区间,以及步长int n;while(true){cout<<"请输入要给的步长h(h>0):";cin>>h;if(h==-1)break;double I1,f1,f2,f3;n=(int)((b-a)/h);f1=get(a);cout<<f1<<endl;f2=g(a,h,b);cout<<f2<<endl;f3=get(b);cout<<f3<<endl;I1=h/6*(f1+f2+f3);//复化辛普森公式cout<<"给定步长为h="<<h<<endl;cout<<"复化辛普森公式计算结果:I="<<I1<<endl;cout<<"所分成n个区间,n="<<n<<endl;}}。