辛普森公式求积分

辛普森公式求积分辛普森公式求积分

利用辛普森公式求积分(Integration by Simpson’s formula)

我们将计算定积分的值 ∫ a b f ( x ) d x \int_a ^ b f (x) dx abf(x)dx

这里描述的解决方案发表在 1743 年Thomas Simpson的一篇论文中。

辛普森公式

n n n 是某自然数。我们将积分段 [ a , b ] [a, b] [a,b] 分成 2 n 2n 2n 个相等的部分:

x i = a + i h ,    i = 0 … 2 n ,    h = b − a 2 n . x_i = a + i h, ~~ i = 0 \ldots 2n,~~h = \frac {b-a} {2n}. xi=a+ih,  i=02n,  h=2nba.

现在我们分别计算每个段上的积分 [ x 2 i − 2 , x 2 i ] [x_ {2i-2}, x_ {2i}] [x2i2,x2i] i = 1 … n i = 1 \ldots n i=1n ,然后添加所有值。

所以,假设我们考虑下一个线段 [ x 2 i − 2 , x 2 i ] , i = 1 … n [x_ {2i-2}, x_ {2i}], i = 1 \ldots n [x2i2,x2i],i=1n 。用经过3个点 ( x 2 i − 2 , x 2 i − 1 , x 2 i ) (x_ {2i-2}, x_ {2i-1}, x_ {2i}) (x2i2,x2i1,x2i) 的抛物线 P ( x ) P(x) P(x) 代替其上的函数 f ( x ) f(x) f(x) 。这样的抛物线一直存在,并且是唯一的;它可以通过分析找到。例如,我们可以使用拉格朗日多项式插值来构造它。剩下要做的唯一事情就是整合这个多项式。如果你对一个一般的函数 f f f 这样做,你会得到一个非常简单的表达式:

∫ x 2 i − 2 x 2 i f ( x )   d x ≈ ∫ x 2 i − 2 x 2 i P ( x )   d x = ( f ( x 2 i − 2 ) + 4 f ( x 2 i − 1 ) + ( f ( x 2 i ) ) h 3 \int_{x_ {2i-2}} ^ {x_ {2i}} f (x) ~dx \approx \int_{x_ {2i-2}} ^ {x_ {2i}} P (x) ~dx = \left(f(x_{2i-2}) + 4f(x_{2i-1})+(f(x_{2i})\right)\frac {h} {3} x2i2x2if(x) dxx2i2x2iP(x) dx=(f(x2i2)+4f(x2i1)+(f(x2i))3h

在所有段上添加这些值,我们得到最终的辛普森公式

∫ a b f ( x ) d x ≈ ( f ( x 0 ) + 4 f ( x 1 ) + 2 f ( x 2 ) + 4 f ( x 3 ) + 2 f ( x 4 ) + … + 4 f ( x 2 N − 1 ) + f ( x 2 N ) ) h 3 \int_a ^ b f (x) dx \approx \left(f (x_0) + 4 f (x_1) + 2 f (x_2) + 4f(x_3) + 2 f(x_4) + \ldots + 4 f(x_{2N-1}) + f(x_{2N}) \right)\frac {h} {3} abf(x)dx(f(x0)+4f(x1)+2f(x2)+4f(x3)+2f(x4)++4f(x2N1)+f(x2N))3h


误差

用辛普森公式逼近积分的误差是

− 1 90 ( b − a 2 ) 5 f ( 4 ) ( ξ ) -\tfrac{1}{90} \left(\tfrac{b-a}{2}\right)^5 f^{(4)}(\xi) 901(2ba)5f(4)(ξ)

其中 ξ \xi ξ 是介于 a a a b b b 之间的数。


实现

代码中, f ( x ) f(x) f(x) 代表用户定义的函数。

const int N = 1000 * 1000; // number of steps (already multiplied by 2) double simpson_integration(double a, double b){ 
      double h = (b - a) / N; double s = f(a) + f(b); // a = x_0 and b = x_2n for (int i = 1; i <= N - 1; ++i) { 
      // Refer to final Simpson's formula double x = a + h * i; s += f(x) * ((i & 1) ? 4 : 2); } s *= h / 3; return s; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/216582.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 上午11:32
下一篇 2026年3月18日 上午11:32


相关推荐

  • 你应该知道的,十二大CNN算法

    你应该知道的,十二大CNN算法大家好,我是K同学啊!今天和大家分享一下自年来,涌现出来的那些优秀的图像识别算法模型。⭐️简介模型是YannLeCun教授于1998年在论文《Gradient-basedlearningappliedtodocumentrecognition》中提出。它是第一个成功应用于手写数字识别问题并产生实际商业(邮政行业)价值的卷积神经网络。被誉为是卷积神经网络的“HelloWord”,它是最简单的架构之一。有2个卷积层和3个全连接层,有大约60,000个参数。…………..

    2025年10月3日
    5
  • imb服务器怎么拆硬盘,IBM P750更换本地硬盘

    imb服务器怎么拆硬盘,IBM P750更换本地硬盘1、确认故障主机报警和硬盘ERPES01@/>errpt-dH|moreIDENTIFIERTIMESTAMPTCRESOURCE_NAMEDESCRIPTION80D3764C0301180416UHLVDDPVNOLONGERRELOCATINGNEWBADBLOCKSE86653C30301180416PH…

    2022年6月29日
    65
  • Java | FileOutputStream中文乱码问题的解决

    Java | FileOutputStream中文乱码问题的解决使用 FileOutputSt 序列化可以直接向文件写入文本内容但这里的字符串如果包含中文 就会出现乱码 这是因为 FileOutputSt 是字节流 将文本按字节写入文件 而一个汉字是两个字节 无法一次写入 就会出现乱码 解决方法使用 OutputStream 将字节流转换为字符流写入 同时指定 utf 8 编码 代码如下 OutputStream newOutputStr newFileOutpu

    2026年3月16日
    2
  • Struts的ONGL

    Struts的ONGL

    2022年1月15日
    52
  • SortedSet操作

    SortedSet操作原文链接 http doc redisfans com sorted set index html SortedSet 的数据结构类似于 Set 不同的是 Sorted 中的每个成员都分配了一个值 Score 用于对其中的成员进行排序 升序 zaddkeyscore scoremember 将一个或多个 member 及其 socre 加入到 set 中 socre 须是 f

    2026年3月26日
    2
  • java判断回文字符串几种简单的实现

    java判断回文字符串几种简单的实现java判断回文字符串几种简单的实现

    2022年5月3日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号