数值微分与数值积分(一)

1. 绪论

数值积分,用于求定积分的近似值。在数值分析中,数值积分是计算定积分数值的方法和理论。在数学分析中,给定函数的定积分的计算不总是可行的。许多定积分不能用已知的积分公式得到精确值。数值积分是利用黎曼积分等数学定义,用数值逼近的方法近似计算给定的定积分值。这就是计算机求解数值积分的方法。
数值微分,即根据函数在一些离散点的函数值,推算它在某点的导数或某高阶导数的近似值。通常用差商代替微商,或用一能近似代替该函数的较简单的函数(如多项式、样条函数)的相应导数作为所求导数的近似值。这就是计算机求解数值微分的方法。

2. 数值积分

2.1 引言

在工程技术和科学研究中,经常会计算定积分。很多数学问题中,例如求微分方程和积分方程的求解等也需要计算定积分。所以在区间 [ a , b ] [a,b] [a,b]内求定积分
I ( f ) = ∫ a b f ( x ) d x I(f)=\int_{a}^{b}f(x)dx I(f)=abf(x)dx
是一个比较传统但是应用广泛的问题。从理论上讲,要计算连续函数 f ( x ) f(x) f(x) [ a , b ] [a,b] [a,b]内的定积分,只要找到 f ( x ) f(x) f(x)的原函数 F ( x ) F(x) F(x),则由牛顿-莱布尼茨公式
∫ a b f ( x ) d x = F ( b ) − F ( a ) \int_{a}^{b}f(x)dx=F(b)-F(a) abf(x)dx=F(b)F(a)
很容易求解出对应的积分函数的值,但是在实际过程中被积函数的形式比较复杂,例如下面的几种情形:

  1. 被积函数 f ( x ) f(x) f(x)的原函数不能使用初等函数的有限形式表示,例如 ∫ 0 1 sin ⁡ x x d x \int_{0}^{1}\frac{\sin{x}}{x}dx 01xsinxdx, ∫ 0 1 e − x 2 d x \int_{0}^{1}e^{-x^{2}}dx 01ex2dx等等;
  2. 被积函数 f ( x ) f(x) f(x)是用函数表的形式或者图形的形式给出的,没有解析表达式;
  3. 虽然被积函数的原函数 f ( x ) f(x) f(x)能够使用初等函数表示,但是由于表达式过于复杂,计算定积分的值会非常困难。

2.2 数值积分的基本思想

定积分的几何意义是由曲线 y = f ( x ) y=f(x) y=f(x),直线 y = a , y = b y=a,y=b y=a,y=b x x x轴围城的曲边梯形的面积,故而不管是 f ( x ) f(x) f(x)以何种形式给出的,只要近似计算出相应的曲边梯形的面积,就可以求出定积分的近似值,这就是数值求积的基本思想。
矩形法:用分点 a = x 0 < x 1 < ⋯ < x n = b a=x_{0}<x_{1}<\dots<x_{n}=b a=x0<x1<<xn=b,将区间 [ a , b ] [a,b] [a,b]进行划分,记作
Δ x i = x i + 1 − x i , f ( x i ) = f i \Delta{x}_{i}=x_{i+1}-x_{i},f(x_{i})=f_{i} Δxi=xi+1xi,f(xi)=fi
若取 f i f_{i} fi [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1]区间内矩形的高,则得到左矩形公式
I ( f ) = ∫ a b f ( x ) d x ≈ Δ x 0 ⋅ f 0 + Δ x 1 ⋅ f 1 + ⋯ + Δ x n − 1 ⋅ f n − 1 + 0 ⋅ f n I(f)=\int_{a}^{b}f(x)dx{\approx}\Delta{x}_{0}{\cdot}f_{0}+\Delta{x}_{1}{\cdot}f_{1}+\dots+\Delta{x}_{n-1}{\cdot}f_{n-1}+0\cdot{f_{n}} I(f)=abf(x)dxΔx0f0+Δx1f1++Δxn1fn1+0fn
若取 f i + 1 f_{i+1} fi+1 [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1]区间内矩形的高,则得到右矩形公式
I ( f ) = ∫ a b f ( x ) d x ≈ 0 ⋅ f 0 + Δ x 0 ⋅ f 1 + ⋯ + Δ x n − 2 ⋅ f n − 1 + Δ x n − 1 ⋅ f n I(f)=\int_{a}^{b}f(x)dx{\approx}0{\cdot}f_{0}+\Delta{x}_{0}{\cdot}f_{1}+\dots+\Delta{x}_{n-2}{\cdot}f_{n-1}+\Delta{x}_{n-1}\cdot{f_{n}} I(f)=abf(x)dx0f0+Δx0f1++Δxn2fn1+Δxn1fn
取上述两式的平均值,得到梯形公式
I ( f ) = ∫ a b f ( x ) d x ≈ Δ x 0 2 f 0 + Δ x 0 + Δ x 1 2 f 1 + ⋯ + Δ x n − 2 + Δ x n − 1 2 f n − 1 + Δ x n − 1 2 f n I(f)=\int_{a}^{b}f(x)dx{\approx}\dfrac{\Delta{x_{0}}}{2}f_{0}+\dfrac{\Delta{x_{0}}+\Delta{x_{1}}}{2}f_{1}+\dots+\dfrac{\Delta{x_{n-2}}+\Delta{x_{n-1}}}{2}f_{n-1}+\frac{\Delta{x_{n-1}}}{2}f_{n} I(f)=abf(x)dx2Δx0f0+2Δx0+Δx1f1++2Δxn2+Δxn1fn1+2Δxn1fn
上述三个公式的共同特点式将定积分的计算转换为计算各点函数值的线性组合,只是各个函数值的系数不同而已.一般地,在 [ a , b ] [a,b] [a,b]内适当选取 n + 1 n+1 n+1个节点 x i , ( i = 0 , 1 , … , n ) x_{i},(i=0,1,\dots,n) xi,(i=0,1,,n),然后用 f ( x i ) f(x_{i}) f(xi)的现行组合作为定积分的近似值,所以,数值求积公式的一般形式为
I ( f ) = ∫ a b f ( x ) d x ≈ ∑ i = 0 n A i f ( x i ) = I n ( f ) I(f)=\int_{a}^{b}f(x)dx\approx{\sum\limits_{i=0}^{n}A_{i}f(x_{i})}=I_{n}(f) I(f)=abf(x)dxi=0nAif(xi)=In(f)
上式中, x i x_{i} xi称为求积节点, A i A_{i} Ai称为求积系数, A i A_{i} Ai的取值仅仅与节点 x i x_{i} xi的选取有关系,二并不依赖于被积函数 f ( x ) f(x) f(x),所以上式具有通用性.

2.3 代数精度

代数精度(定义):若数值求积公式
I ( f ) = ∫ a b f ( x ) d x ≈ ∑ i = 0 n A i f ( x i ) I(f)=\int_{a}^{b}f(x)dx\approx{\sum\limits_{i=0}^{n}A_{i}f(x_{i})} I(f)=abf(x)dxi=0nAif(xi)
对被积函数 f ( x ) = 1 , x , x 2 , … , x m f(x)=1,x,x^{2},\dots,x^{m} f(x)=1,x,x2,,xm都能精确成立,而对被积函数 f ( x ) = x m + 1 f(x)=x^{m+1} f(x)=xm+1不能精确成立,则称秋季公式具有 m m m次代数精度.
可见,一般地,要是使得上市具有 n n n次代数精度,只要令它对于 f ( x ) = 1 , x , x 2 , … , x n f(x)=1,x,x^{2},\dots,x^{n} f(x)=1,x,x2,,xn都能精确成立,也就是对给定 n + 1 n+1 n+1各互异节点 x i ( i = 0 , 1 , … , n ) x_{i}(i=0,1,\dots,n) xi(i=0,1,,n),相应的求积系数 A i A_{i} Ai满足
{ A 0 + A 1 + ⋯ + A n = b − a A 0 x 0 + A 1 x 1 + ⋯ + A n x n = b 2 − a 2 2 … A 0 x 0 n + A 1 x 1 n + ⋯ + A n x n n = b n − a n n + 1 \begin{cases} A_{0}+A_{1}+\dots+A_{n}=b-a\\ A_{0}x_{0}+A_{1}x_{1}+\dots+A_{n}x_{n}=\dfrac{b^{2}-a^{2}}{2}\\ \dots\\ A_{0}x_{0}^{n}+A_{1}x_{1}^{n}+\dots+A_{n}x_{n}^{n}=\dfrac{b^{n}-a^{n}}{n+1}\\ \end{cases} A0+A1++An=baA0x0+A1x1++Anxn=2b2a2A0x0n+A1x1n++Anxnn=n+1bnan
上述线性方程的系数行列式式范德蒙行列式,当 x i , ( i = 0 , 1 , 2 , … , n ) x_{i},(i=0,1,2,\dots,n) xi,(i=0,1,2,,n)互异的时候,其值式非零的,利用克莱姆法则可以唯一地求出 A i ( i = 0 , 1 , 2 , … , n ) A_{i}(i=0,1,2,\dots,n) Ai(i=0,1,2,,n),进而可以构造出求积公式.所以这样就会有这样的结论.
定理 对任意给定 n + 1 n+1 n+1个互异节点 x i , ( i = 0 , 1 , … , n ) x_{i},(i=0,1,\dots,n) xi,(i=0,1,,n),总存在相应系数 A i , ( i = 0 , 1 , … , n ) A_{i},(i=0,1,\dots,n) Ai,(i=0,1,,n),使得求积分公式具有 n n n次代数精度.

2.4 插值型求积公式

计算一种求定积分的方法可以使用插值多项式来构造数值求积公式.
f ( x ) f(x) f(x)在互异的结点 x i , ( i = 0 , 1 , 2 , … , n ) x_{i},(i=0,1,2,\dots,n) xi,(i=0,1,2,,n)处的函数值为 f ( x i ) , ( i = 0 , 1 , 2 , … , n ) f(x_{i}),(i=0,1,2,\dots,n) f(xi),(i=0,1,2,,n),则可以构造拉格朗日插值多项式
L n ( x ) = ∑ i = 0 n l i ( x ) f ( x i ) = ∑ i = 0 n ( ∏ j = 0 , j ≠ i n x − x i x i − x j ) f ( x i ) L_{n}(x)=\sum\limits_{i=0}^{n}l_{i}(x)f(x_{i})=\sum\limits_{i=0}^{n}\left(\prod_{j=0,j\neq{i}}^{n}\dfrac{x-x_{i}}{x_{i}-x_{j}}\right)f(x_{i}) Ln(x)=i=0nli(x)f(xi)=i=0nj=0,j=inxixjxxif(xi)
由于代数差值多项式 L n ( x ) L_{n}(x) Ln(x)的原函数是很容易求出来的,所以可以取
∫ a b f ( x ) d x ≈ ∫ a b L n ( x ) d x = ∫ a b ∑ i = 0 n l i ( x ) f ( x i ) d x = ∑ i = 0 n ( ∫ a b l i ( x ) d x ) f ( x i ) \int_{a}^{b}f(x)dx\approx{\int_{a}^{b}L_{n}(x)dx}=\int_{a}^{b}\sum\limits_{i=0}^{n}l_{i}(x)f(x_{i})dx=\sum\limits_{i=0}^{n}\left(\int_{a}^{b}l_{i}(x)dx\right)f(x_{i}) abf(x)dxabLn(x)dx=abi=0nli(x)f(xi)dx=i=0n(abli(x)dx)f(xi)
所以这样就会得到求积公式
∫ a b f ( x ) d x = ∑ i = 0 n A i f ( x i ) \int_{a}^{b}f(x)dx=\sum\limits_{i=0}^{n}A_{i}f(x_{i}) abf(x)dx=i=0nAif(xi)
等式中
A i = ∫ a b l i ( x ) d x = ∫ a b ∏ j = 0 , j ≠ i n x − x i x i − x j d x A_{i}=\int_{a}^{b}l_{i}(x)dx=\int_{a}^{b}\prod_{j=0,j\neq{i}}^{n}\dfrac{x-x_{i}}{x_{i}-x_{j}}dx Ai=abli(x)dx=abj=0,j=inxixjxxidx
所以由上式确定的求积公式称为插值型求积公式,其中余项为
R [ f ] = ∫ a b f ( n + 1 ) ( ξ ) ( n + 1 ) ! ∏ j = 0 n ( x − x j ) d x R[f]=\int_{a}^{b}\dfrac{f^{(n+1)}(\xi)}{(n+1)!}\prod_{j=0}^{n}(x-x_{j})dx R[f]=ab(n+1)!f(n+1)(ξ)j=0n(xxj)dx
当被积函数取的次数不超过 n n n次多项式时,因为 f n + 1 ( x ) = 0 f^{n+1}(x)=0 fn+1(x)=0,所以余项 R [ f ] = 0 R[f]=0 R[f]=0,这说明求积公式对一切次数不超过 n n n次的多项式都精确成立,所以含有 n + 1 n+1 n+1个互异节点 x i ( i = 0 , 1 , 2 , … , n ) x_{i}(i=0,1,2,\dots,n) xi(i=0,1,2,,n)的插值型求积公式至少具有 n n n次代数精度.
特别地,若求积公式至少有 n n n次代数精度,则它对于 n n n次插值基函数 l i ( x ) l_{i}(x) li(x)是准确成立的,即有
∫ a b l i ( x ) d x = ∑ j = 0 n A j l j = A i \int_{a}^{b}l_{i}(x)dx=\sum\limits_{j=0}^{n}A_{j}l_{j}=A_{i} abli(x)dx=j=0nAjlj=Ai
所以就会有以下的一个基本的结论:求积公式为插值型求积公式的充分必要条件是它至少具有 n n n次代数精度.

3. 常见的几种数值积分求值公式

3.1 牛顿-柯特斯求积公式

求积公式的推导
设将积分区间 [ a , b ] [a,b] [a,b]n等分,记步长 h = b − a n h=\dfrac{b-a}{n} h=nba,求积节点 x i x_{i} xi为等距节点 x i = a + i h ( i = 0 , 1 , 2 , … , n ) x_{i}=a+ih(i=0,1,2,\dots,n) xi=a+ih(i=0,1,2,,n),并且对应函数值 f ( x i ) f(x_{i}) f(xi)是已知的,则以这些等距节点为插值节点所导出的插值型求积公式就称为是牛顿-科特斯求积公式,简称为 N − C N-C NC公式.
在等距的情形下,我们改写求定积分公式
I ( f ) = ∫ a b f ( x ) d x ≈ ( b − a ) ∫ a b C i ( n ) f ( x i ) d x I(f)=\int_{a}^{b}f(x)dx\approx(b-a)\int_{a}^{b}C_{i}^{(n)}f(x_{i})dx I(f)=abf(x)dx(ba)abCi(n)f(xi)dx
比较差值多项式可以得到
C i ( n ) = A i b − a = 1 b − a ∏ j = 0 , j ≠ i x − x i x i − x j d x C_{i}^{(n)}=\dfrac{A_{i}}{b-a}=\dfrac{1}{b-a}\prod_{j=0,j\neq{i}}\dfrac{x-x_{i}}{x_{i}-x_{j}}dx Ci(n)=baAi=ba1j=0,j=ixixjxxidx
为了进一步简化计算,做变换 x = a + t h x=a+th x=a+th,则可以得到
d x = h d t , x − x j = ( t − j ) h , x i − x j = ( i − j ) h dx=hdt,x-x_{j}=(t-j)h,x_{i}-x_{j}=(i-j)h dx=hdt,xxj=(tj)h,xixj=(ij)h
所以这样就可以得到系数
C i ( n ) = 1 b − a ∫ a b ( x − x 0 ) ( x − x 1 ) … ( x − x i − 1 ) ( x − x i + 1 ) … ( x − x n ) ( x i − x 0 ) ( x i − x 1 ) … ( x i − x i − 1 ) ( x i − x i + 1 ) … ( x i − x n ) d x C_{i}^{(n)}=\frac{1}{b-a}\int_{a}^{b}\dfrac{(x-x_{0})(x-x_{1})\dots(x-x_{i-1})(x-x_{i+1})\dots(x-x_{n})}{(x_{i}-x_{0})(x_{i}-x_{1})\dots(x_{i}-x_{i-1})(x_{i}-x_{i+1})\dots(x_{i}-x_{n})}dx Ci(n)=ba1ab(xix0)(xix1)(xixi1)(xixi+1)(xixn)(xx0)(xx1)(xxi1)(xxi+1)(xxn)dx
= h b − a ∫ 0 n ( t − 0 ) ( t − 1 ) … ( t − i + 1 ) ( t − i − 1 ) … ( t − n ) ( i − 0 ) ( i − 1 ) ⋯ ⋅ 1 ⋅ ( − 1 ) … ( − ( n − i ) ) d x =\frac{h}{b-a}\int_{0}^{n}\dfrac{(t-0)(t-1)\dots(t-i+1)(t-i-1)\dots(t-n)}{(i-0)(i-1)\dots\cdot{1}\cdot(-1)\dots(-(n-i))}dx =bah0n(i0)(i1)1(1)((ni))(t0)(t1)(ti+1)(ti1)(tn)dx
= ( − 1 ) n − i n i ! ( n − i ) ! ∫ 0 n ( t − 0 ) ( t − 1 ) … ( t − i + 1 ) ( t − i − 1 ) … ( t − n ) d x =\frac{(-1)^{n-i}}{ni!(n-i)!}\int_{0}^{n}(t-0)(t-1)\dots(t-i+1)(t-i-1)\dots(t-n)dx =ni!(ni)!(1)ni0n(t0)(t1)(ti+1)(ti1)(tn)dx
上式系数表达的求积公式称为牛顿-科斯特公式.一般情况下采用的是系数 n ≤ 4 n\leq{4} n4的牛顿-科特斯公式,在 n ≥ 8 n\geq{8} n8的时候系数出现了负数,这样会造成不稳定的现象.
n = 1 n=1 n=1的时候,求积公式变为梯形求积公式
T = b − a 2 [ f ( a ) + f ( b ) ] T=\dfrac{b-a}{2}[f(a)+f(b)] T=2ba[f(a)+f(b)]
n = 2 n=2 n=2的时候,求积公式变为抛物线求积公式或者是辛普森求积公式
S = b − a 6 [ f ( a ) + 4 f ( a + b 2 ) + f ( b ) ] S=\dfrac{b-a}{6}\left[f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right] S=6ba[f(a)+4f(2a+b)+f(b)]
n = 3 n=3 n=3的时候,求积公式变为 3 / 8 3/8 3/8辛普森公式
Q = b − a 8 [ f ( x 0 ) + 3 f ( x 1 ) + 3 f ( x 2 ) + f ( x 3 ) ] Q=\dfrac{b-a}{8}\left[f(x_{0})+3f(x_{1})+3f(x_{2})+f(x_{3})\right] Q=8ba[f(x0)+3f(x1)+3f(x2)+f(x3)]
其中 x i = a + i h , h = b − a 3 x_{i}=a+ih,h=\dfrac{b-a}{3} xi=a+ih,h=3ba
n = 4 n=4 n=4的时候,求积公式变为科斯特求积公式
C = b − a 90 [ 7 f ( x 0 ) + 32 f ( x 1 ) + 12 f ( x 2 ) + 32 f ( x 3 ) + 7 f ( x 4 ) ] C=\dfrac{b-a}{90}\left[7f(x_{0})+32f(x_{1})+12f(x_{2})+32f(x_{3})+7f(x_{4})\right] C=90ba[7f(x0)+32f(x1)+12f(x2)+32f(x3)+7f(x4)]
其中 x i = a + i h , h = b − a 4 x_{i}=a+ih,h=\dfrac{b-a}{4} xi=a+ih,h=4ba
代数精度
我们可以得到以下的定理:对于牛顿-科斯特求积公式,当 n n n为奇数的时候,它至少具有 n n n次代数精度;当 n n n为偶数的时候,它具有 n + 1 n+1 n+1次代数精度.
证明:
n n n为偶数的时候,设被积函数 f ( x ) = x n + 1 f(x)=x^{n+1} f(x)=xn+1,由于 f ( n + 1 ) ( x ) = ( n + 1 ) ! f^{(n+1)}(x)=(n+1)! f(n+1)(x)=(n+1)!,所以此时的余项即为
R [ f ] = ∫ a b f ( n + 1 ) ( x ) ( n + 1 ) ! ∏ j = 0 n ( x − x j ) d x = ∫ a b ∏ j = 0 n ( x − x j ) d x R[f]=\int_{a}^{b}\dfrac{f^{(n+1)}(x)}{(n+1)!}\prod_{j=0}^{n}(x-x_{j})dx=\int_{a}^{b}\prod_{j=0}^{n}(x-x_{j})dx R[f]=ab(n+1)!f(n+1)(x)j=0n(xxj)dx=abj=0n(xxj)dx
进行变换 x = a + t h , x j = a + j h x=a+th,x_{j}=a+jh x=a+th,xj=a+jh,所以就会得到
R [ f ] = h n + 2 ∫ 0 n ∏ j = 0 n ( t − j ) d t R[f]=h^{n+2}\int_{0}^{n}\prod_{j=0}^{n}(t-j)dt R[f]=hn+20nj=0n(tj)dt
n = 2 k , ( k ∈ N + ) n=2k,(k\in{N^{+}}) n=2k,(kN+)进行变换 t = s + k t=s+k t=s+k,则可以得到
R [ f ] = h 2 k + 2 ∫ − k k ∏ j = 0 2 k ( s + k − j ) d s R[f]=h^{2k+2}\int_{-k}^{k}\prod_{j=0}^{2k}(s+k-j)ds R[f]=h2k+2kkj=02k(s+kj)ds
设关于 s s s的函数
G ( s ) = ∏ j = 0 j = 0 ( s + k − j ) = ( s + k ) ( s + k − 1 ) … s ( s − 1 ) … ( s − k + 1 ) ( s − k ) G(s)=\prod_{j=0}^{j=0}(s+k-j)=(s+k)(s+k-1)\dots{s(s-1)}\dots{(s-k+1)(s-k)} G(s)=j=0j=0(s+kj)=(s+k)(s+k1)s(s1)(sk+1)(sk)
= ∏ j = − k k ( s − j ) =\prod_{j=-k}^{k}(s-j) =j=kk(sj)
所以这就会得到
G ( − s ) = ∏ j = − k k ( − s − j ) = ( − 1 ) 2 k + 1 ∏ j = − k k ( s + j ) = − ∏ j = − k k ( s − j ) = − G ( s ) G(-s)=\prod_{j=-k}^{k}(-s-j)=(-1)^{2k+1}\prod_{j=-k}^{k}(s+j)=-\prod_{j=-k}^{k}(s-j)=-G(s) G(s)=j=kk(sj)=(1)2k+1j=kk(s+j)=j=kk(sj)=G(s)
所以 G ( s ) G(s) G(s)是奇函数,所以它在对称区间 [ − k , k ] [-k,k] [k,k]的定积分为 0 0 0,故而就会得到 R [ f ] = 0 R[f]=0 R[f]=0.即当 n n n为偶数的时候,对被积函数 f ( x ) = x n + 1 f(x)=x^{n+1} f(x)=xn+1的余项为 0 0 0,故而得到对 f ( x ) = x n + 1 f(x)=x^{n+1} f(x)=xn+1精确成立.
n n n为奇数的时候,不妨设 f ( x ) = x n f(x)=x^{n} f(x)=xn,很显然余项 f n + 1 ( x ) = 0 f^{n+1}(x)=0 fn+1(x)=0,余项 R [ f ] = 0 R[f]=0 R[f]=0,所以当 n n n为奇数的时候,对被积函数 x n x^{n} xn的余项为 0 0 0,故而得到得到对 f ( x ) = x n f(x)=x^{n} f(x)=xn精确成立.
误差估计
可以得到牛顿-科特斯公式的误差为
R [ f ] = ∫ a b f n + 1 ( ξ ) ( n + 1 ) ! ∏ j = 0 n ( x − x j ) d x R[f]=\int_{a}^{b}\dfrac{f^{n+1}(\xi)}{(n+1)!}\prod_{j=0}^{n}(x-x_{j})dx R[f]=ab(n+1)!fn+1(ξ)j=0n(xxj)dx
其中 ξ = a + ( b − a ) θ ( x ) \xi=a+(b-a)\theta(x) ξ=a+(ba)θ(x),由积分中值定理可以得到 ∃ η ∈ ( a , b ) \exists{\eta\in{(a,b)}} η(a,b),使得
R [ f ] = f n + 1 ( η ) ( n + 1 ) ! ∫ a b ∏ j = 0 n ( x − x j ) d x R[f]=\dfrac{f^{n+1}(\eta)}{(n+1)!}\int_{a}^{b}\prod_{j=0}^{n}(x-x_{j})dx R[f]=(n+1)!fn+1(η)abj=0n(xxj)dx

x j = a + j h , x = a + t h , h = b − a n , d x = h d t x_{j}=a+jh,x=a+th,h=\frac{b-a}{n},dx=hdt xj=a+jh,x=a+th,h=nba,dx=hdt
所以就会得到
R [ f ] = h n + 2 f n + 1 ( η ) ( n + 1 ) ! ∫ 0 n ∏ j = 0 n ( t − j ) d x R[f]=\dfrac{h^{n+2}f^{n+1}(\eta)}{(n+1)!}\int_{0}^{n}\prod_{j=0}^{n}(t-j)dx R[f]=(n+1)!hn+2fn+1(η)0nj=0n(tj)dx

a n = ∫ 0 n ∏ j = 0 n ( t − j ) d x a_{n}=\int_{0}^{n}\prod_{j=0}^{n}(t-j)dx an=0nj=0n(tj)dx
特别地,当 n = 1 n=1 n=1的时候, a 1 = − 1 6 a_{1}=-\dfrac{1}{6} a1=61就会得到梯形公式的截断误差为
R 1 ( f ) = − f ′ ′ ( η ) 12 ( b − a ) 3 R_{1}(f)=-\dfrac{f^{''}(\eta)}{12}(b-a)^{3} R1(f)=12f(η)(ba)3
n = 2 n=2 n=2的时候, a 2 = − 1 60 ⋅ 2 4 a_{2}=-\dfrac{1}{60\cdot{2^{4}}} a2=60241就会得到梯形公式的截断误差为
R 2 ( f ) = − f ′ ′ ( η ) 180 ⋅ 2 4 ( b − a ) 5 R_{2}(f)=-\dfrac{f^{''}(\eta)}{180\cdot{2^{4}}}(b-a)^{5} R2(f)=18024f(η)(ba)5
收敛性和稳定性
首先我们这样定义数值的稳定性
定义:对于任意 ϵ > 0 \epsilon>0 ϵ>0,若存在 δ > 0 \delta>0 δ>0,只要 δ i = ∣ f ( x i ) − f ˉ i ∣ , ( i = 0 , 1 , 2 , … , n ) \delta_{i}=\left|f(x_{i})-\bar{f}_{i}\right|,(i=0,1,2,\dots,n) δi=f(xi)fˉi,(i=0,1,2,,n),就有
∣ I n ( f ) − I n ( f ˉ ) ∣ ≤ ϵ \left|I_{n}(f)-I_{n}(\bar{f})\right|\leq{\epsilon} In(f)In(fˉ)ϵ
则称背记公式是数值稳定的.
对于牛顿-科特斯公式来说有以下的定理:
若牛顿-科特斯公式中的系数 C i ( n ) > 0 ( i = 0 , 1 , 2 , … , n ) C_{i}^{(n)}>0(i=0,1,2,\dots,n) Ci(n)>0(i=0,1,2,,n),则求积公式是稳定的,证明如下
由于
C i ( n ) > 0 , ( i = 0 , 1 , 2 , … , n ) , ∣ f ( x i ) − f ˉ ∣ ≤ δ C_{i}^{(n)}>0,(i=0,1,2,\dots,n),\left|f(x_{i})-\bar{f}\right|\leq{\delta} Ci(n)>0,(i=0,1,2,,n),f(xi)fˉδ
所以就会得到
∣ I n ( f ) − I n ( f ˉ ) ∣ = ∣ ( b − a ) ∑ i = 0 n [ C i ( n ) ( f ( x i ) − f ˉ ) ] ∣ ≤ δ ( b − a ) ∑ i = 0 n C i ( n ) \left|I_{n}(f)-I_{n}(\bar{f})\right|=\left|(b-a)\sum\limits_{i=0}^{n}\left[C_{i}^{(n)}\left(f(x_{i})-\bar{f}\right)\right]\right|\leq{\delta{(b-a)}}\sum\limits_{i=0}^{n}C_{i}^{(n)} In(f)In(fˉ)=(ba)i=0n[Ci(n)(f(xi)fˉ)]δ(ba)i=0nCi(n)
故而对于任意的 ϵ > 0 \epsilon>0 ϵ>0,存在 δ = ϵ b − a \delta=\dfrac{\epsilon}{b-a} δ=baϵ,只要 ∣ f ( x i ) − f ˉ ∣ ≤ δ \left|f(x_{i})-\bar{f}\right|\leq{\delta} f(xi)fˉδ,就会得到
∣ I n ( f ) − I n ( f ˉ ) ∣ ≤ δ ( b − a ) ≤ ϵ \left|I_{n}(f)-I_{n}(\bar{f})\right|\leq{\delta{(b-a)}}\leq{\epsilon} In(f)In(fˉ)δ(ba)ϵ,
所以求积公式是数值稳定的.
在牛顿-科特斯公式中, n ≥ 8 n\geq{8} n8的时候出现负值的系数,此时求积公式的收敛性没有保证所以在实际中很少使用到高阶的牛顿-科特斯公式,一般使用的是 n = 1 ∼ 4 n=1\sim{4} n=14的牛顿-科特斯公式.

3.2 复合求积公式

从梯形公式、辛普森公式以及科特斯公式求积公式的余项式可以看出,数值求积的误差除了与被积函数有关系,还与积分区间的长度 ( b − a ) (b-a) (ba)有关系,积分区间越小,求积公式的截断误差就会越小,故而在求定积分的时候,通常把积分区间等分成若干小区间,在每个小区间内采用次数不高的求积公式,然后再将其加起来得到整个区间内的求积公式,这就是符合求积公式的基本思想.

3.2.1 复合梯形求积公式

[ a , b ] [a,b] [a,b]区间 n n n等分,记分点为
x i = a + i h , h = b − a n , ( i = 0 , 1 , 2 , … , n ) x_{i}=a+ih,h=\dfrac{b-a}{n},(i=0,1,2,\dots,n) xi=a+ih,h=nba,(i=0,1,2,,n)
并在每个小区间 [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1]内应用梯形公式,得到
∫ a b f ( x ) d x = ∑ i = 0 n − 1 ∫ x i x i + 1 f ( x ) d x ≈ ∑ i = 0 n − 1 h 2 [ f ( x i ) + f ( x i + 1 ) ] \int_{a}^{b}f(x)dx=\sum\limits_{i=0}^{n-1}\int_{x_{i}}^{x_{i+1}}f(x)dx\approx\sum\limits_{i=0}^{n-1}\dfrac{h}{2}\left[f(x_{i})+f(x_{i+1})\right] abf(x)dx=i=0n1xixi+1f(x)dxi=0n12h[f(xi)+f(xi+1)]
= h 2 [ f ( a ) + 2 ∑ i = 1 n − 1 f ( x i ) + f ( b ) ] =\dfrac{h}{2}\left[f(a)+2\sum\limits_{i=1}^{n-1}f(x_{i})+f(b)\right] =2h[f(a)+2i=1n1f(xi)+f(b)]

T n = h 2 [ f ( a ) + 2 ∑ i = 1 n − 1 f ( x i ) + f ( b ) ] T_{n}=\dfrac{h}{2}\left[f(a)+2\sum\limits_{i=1}^{n-1}f(x_{i})+f(b)\right] Tn=2h[f(a)+2i=1n1f(xi)+f(b)]
上式称为复合梯形公式,下标 n n n表示将区间 n n n等分.若将区间等分为 2 n 2n 2n等分,在每个小区间内仍然用梯形求积公式,则可以得到 T 2 n T_{2n} T2n. T n T_{n} Tn T 2 n T_{2n} T2n之间的关系为
T 2 n = 1 2 ( T n + H n ) T_{2n}=\dfrac{1}{2}(T_{n}+H_{n}) T2n=21(Tn+Hn)
等式中 H n = h ∑ i = 1 n f ( x i + 1 2 ) H_{n}=h\sum\limits_{i=1}^{n}f(x_{i+\frac{1}{2}}) Hn=hi=1nf(xi+21), x i + 1 2 x_{i+\frac{1}{2}} xi+21为区间 [ x i , x i + 1 2 ] [x_{i},x_{i+\frac{1}{2}}] [xi,xi+21]的中点,即 x i + 1 2 = x i + 1 2 h x_{i+\frac{1}{2}}=x_{i}+\frac{1}{2}h xi+21=xi+21h,根据定积分的定义可以得到
lim ⁡ n → ∞ , h → 0 T n = lim ⁡ h → 0 1 2 [ ∑ i = 0 n − 1 f ( x i ) h + ∑ i = 1 n f ( x i ) h ] = ∫ a b f ( x ) d x = I ( f ) \lim\limits_{n\rightarrow\infty,h\rightarrow{0}}T_{n}=\lim\limits_{h\rightarrow{0}}\dfrac{1}{2}\left[\sum\limits_{i=0}^{n-1}f(x_{i})h+\sum\limits_{i=1}^{n}f(x_{i})h\right]=\int_{a}^{b}f(x)dx=I(f) n,h0limTn=h0lim21[i=0n1f(xi)h+i=1nf(xi)h]=abf(x)dx=I(f)
可见复合型公式是收敛的,并且等式中的系数 A i > 0 ( i = 0 , 1 , 2 , … , n ) A_{i}>0(i=0,1,2,\dots,n) Ai>0(i=0,1,2,,n),故而也是稳定的.截断误差为
R n ( f ) = I ( f ) − T n = ∑ i = 0 n − 1 [ − h 3 12 f ′ ′ ( η i ) ] = − h 2 12 ( b − a ) 1 n ∑ i = 0 n − 1 f ′ ′ ( η i ) , ( η i ∈ ( x i , x i + 1 ) ) R_{n}(f)=I(f)-T_{n}=\sum\limits_{i=0}^{n-1}\left[-\dfrac{h^{3}}{12}f^{''}(\eta_{i})\right]=-\dfrac{h^{2}}{12}(b-a)\dfrac{1}{n}\sum\limits_{i=0}^{n-1}f^{''}(\eta_{i}),(\eta_{i}\in(x_{i},x_{i+1})) Rn(f)=I(f)Tn=i=0n1[12h3f(ηi)]=12h2(ba)n1i=0n1f(ηi),(ηi(xi,xi+1))
由连续函数的性质以及介值定理可以得到, ∃ η ∈ ( a , b ) \exists{\eta\in{(a,b)}} η(a,b),使得
f ′ ′ ( η ) = 1 n ∑ i = 0 n − 1 f ′ ′ ( η i ) f^{''}(\eta)=\dfrac{1}{n}\sum\limits_{i=0}^{n-1}f^{''}(\eta_{i}) f(η)=n1i=0n1f(ηi)
所以得到
R ( f ) = − b − a 12 h 2 f ′ ′ ( η ) , ( η ∈ ( a , b ) ) R(f)=-\dfrac{b-a}{12}h^{2}f^{''}(\eta),(\eta\in(a,b)) R(f)=12bah2f(η),(η(a,b))
即复合型梯形公式的截断误差, R n ( f ) = O ( h 2 ) R_{n}(f)=O(h^{2}) Rn(f)=O(h2).
用程序写出来可以得到

import math
def integral(func,a,b,delta = 0.1):
    n = int((b-a)/delta)
    h = (b-a)/n
    v_sum = h*(func(a)+func(b))/2
    for k in range(1,n-1):
        xi = a + k*delta
        v_sum = v_sum + h*func(xi)
    return v_sum
def main():
    def sinx(x):
        if x == 0:
            return 1
        return math.sin(x)/x
    print(integral(sinx,0,1))
if __name__ == "__main__":
    main()

运行的结果为(精确值为 ∫ 0 1 sin ⁡ x x = 0.9460831 … \int_{0}^{1}\frac{\sin{x}}{x}=0.9460831\dots 01xsinx=0.9460831)

0.9458320718669053

第二种通过递推公式的方法可以得到

import math
def integral(func,a,b,delta = 0.1):
    n = int((b-a)/delta)
    h = (b-a)/n
    vT = (func(a)+func(b))*h/2
    vH = 0
    for k in range(1,n):
        xi = a + k*h
        xip = xi + h/2
        vH = vH + h*func(xip)
        vT = vT + h*func(xi)
    xip = xi + h/2
    vH = vH + h*func(xip)
    return (vH+vT)/2
def main():
    def sinx(x):
        if x == 0:
            return 1
        return math.sin(x)/x
    print(integral(sinx,0,1))
if __name__ == "__main__":
    main()

得到的结果为

0.9388524984416825

3.2.2 复合辛普森求积公式

在每个小区间 [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1],使用辛普森公式可以得到
∫ a b f ( x ) d x ≈ ∑ i = 0 n − 1 h 6 [ f ( x i ) + 4 f ( x i + 1 2 ) + f ( x i + 1 ) ] \int_{a}^{b}f(x)dx\approx\sum\limits_{i=0}^{n-1}\dfrac{h}{6}\left[f(x_{i})+4f(x_{i+\frac{1}{2}})+f(x_{i+1})\right] abf(x)dxi=0n16h[f(xi)+4f(xi+21)+f(xi+1)]
= h 6 [ f ( a ) + 4 ∑ i = 0 n − 1 f ( x i + 1 2 ) + 2 ∑ i = 1 n − 1 f ( x i ) + f ( b ) ] =\dfrac{h}{6}\left[f(a)+4\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{2}})+2\sum\limits_{i=1}^{n-1}f(x_{i})+f(b)\right] =6h[f(a)+4i=0n1f(xi+21)+2i=1n1f(xi)+f(b)]
上式中 x i + 1 2 x_{i+\frac{1}{2}} xi+21为区间 [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1]的中点,即 x i + 1 2 = x i + h 2 x_{i+\frac{1}{2}}=x_{i}+\dfrac{h}{2} xi+21=xi+2h

S n = h 6 [ f ( a ) + 4 ∑ i = 0 n − 1 f ( x i + 1 2 ) + 2 ∑ i = 1 n − 1 f ( x i ) + f ( b ) ] S_{n}=\dfrac{h}{6}\left[f(a)+4\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{2}})+2\sum\limits_{i=1}^{n-1}f(x_{i})+f(b)\right] Sn=6h[f(a)+4i=0n1f(xi+21)+2i=1n1f(xi)+f(b)]
上式称为辛普森公式,其中余项可以得到
R n ( f ) = I ( f ) − S n = − h 180 ( h 2 ) 4 ∑ i = 0 n − 1 f ( 4 ) ( η i ) , ( η i ∈ ( x i , x i + 1 ) ) R_{n}(f)=I(f)-S_{n}=-\dfrac{h}{180}\left(\dfrac{h}{2}\right)^{4}\sum\limits_{i=0}^{n-1}f^{(4)}(\eta_{i}),(\eta_{i}\in{(x_{i},x_{i+1})}) Rn(f)=I(f)Sn=180h(2h)4i=0n1f(4)(ηi),(ηi(xi,xi+1))
由介值定理同样可以得到 ∃ η ∈ ( a , b ) \exists\eta\in{(a,b)} η(a,b),使得
R n ( f ) = − b − a 180 ( h 2 ) 4 f ( 4 ) ( η ) R_{n}(f)=-\dfrac{b-a}{180}\left(\dfrac{h}{2}\right)^{4}f^{(4)}(\eta) Rn(f)=180ba(2h)4f(4)(η)
上式即为辛普森公式的截断误差,即得到 R n ( f ) = O ( h 4 ) R_{n}(f)=O(h^{4}) Rn(f)=O(h4).
同样可以证明
lim ⁡ n → ∞ S n = ∫ a b f ( x ) d x \lim\limits_{n\rightarrow\infty}S_{n}=\int_{a}^{b}f(x)dx nlimSn=abf(x)dx
由于各个系数 A i > 0 , i = 0 , 1 , 2 , … , n A_{i}>0,i=0,1,2,\dots,n Ai>0,i=0,1,2,,n,所以这个结果是稳定的.
为了编程方便可以将等式改写为
S n = h 6 { f ( a ) − f ( b ) + ∑ i = 1 n [ 4 f ( x i + 1 2 ) + 2 f ( x i ) ] } S_{n}=\dfrac{h}{6}\left\{f(a)-f(b)+\sum\limits_{i=1}^{n}\left[4f(x_{i+\frac{1}{2}})+2f(x_{i})\right]\right\} Sn=6h{f(a)f(b)+i=1n[4f(xi+21)+2f(xi)]}
程序求解上述表达式可以得到

import math
def integral(func,a,b,delta = 0.1):
    n = int((b-a)/delta)
    h = (b-a)/n
    v_sum = h*(func(a)-func(b))/6
    for k in range(1,n+1):
        xi = a + k*h
        xip = xi+h/2
        v_sum = v_sum + h*(4*func(xip)+2*func(xi))/6
    return v_sum
def main():
    def sinx(x):
        if x == 0:
            return 1
        return math.sin(x)/x
    print(integral(sinx,0,1))
if __name__ == "__main__":
    main()

通过程序求解可以得到

0.9345186746707335

3.2.3 复合科特斯求积公式

同样,在每一个小区间内 [ x i , x i + 1 ] [x_{i},x_{i+1}] [xi,xi+1],使用科斯特公式可以得到
∫ a b f ( x ) d x ≈ ∑ i = 0 n − 1 h 90 [ 7 f ( x i ) + 32 f ( x i + 1 4 ) + 12 f ( x i + 1 2 ) + 32 f ( x i + 3 4 ) + 7 f ( x i + 1 ) ] \int_{a}^{b}f(x)dx\approx{\sum\limits_{i=0}^{n-1}\dfrac{h}{90}\left[7f(x_{i})+32f(x_{i+\frac{1}{4}})+12f(x_{i+\frac{1}{2}})+32f(x_{i+\frac{3}{4}})+7f(x_{i+1})\right]} abf(x)dxi=0n190h[7f(xi)+32f(xi+41)+12f(xi+21)+32f(xi+43)+7f(xi+1)]
= h 90 [ 7 f ( a ) + 14 ∑ i = 1 n − 1 f ( x i ) + 32 ∑ i = 0 n − 1 f ( x i + 1 4 ) + =\dfrac{h}{90}\left[7f(a)+14\sum\limits_{i=1}^{n-1}f(x_{i})+32\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{4}})+\right. =90h[7f(a)+14i=1n1f(xi)+32i=0n1f(xi+41)+
12 ∑ i = 0 n − 1 f ( x i + 1 2 ) + 32 ∑ i = 0 n − 1 f ( x i + 3 4 ) + 7 f ( b ) ] 12\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{2}})+32\sum\limits_{i=0}^{n-1}f(x_{i+\frac{3}{4}})+7f(b)\left.\right] 12i=0n1f(xi+21)+32i=0n1f(xi+43)+7f(b)]

C n = h 90 [ 7 f ( a ) + 14 ∑ i = 1 n − 1 f ( x i ) + 32 ∑ i = 0 n − 1 f ( x i + 1 4 ) + C_{n}=\dfrac{h}{90}\left[7f(a)+14\sum\limits_{i=1}^{n-1}f(x_{i})+32\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{4}})+\right. Cn=90h[7f(a)+14i=1n1f(xi)+32i=0n1f(xi+41)+
12 ∑ i = 0 n − 1 f ( x i + 1 2 ) + 32 ∑ i = 0 n − 1 f ( x i + 3 4 ) + 7 f ( b ) ] 12\sum\limits_{i=0}^{n-1}f(x_{i+\frac{1}{2}})+32\sum\limits_{i=0}^{n-1}f(x_{i+\frac{3}{4}})+7f(b)\left.\right] 12i=0n1f(xi+21)+32i=0n1f(xi+43)+7f(b)]
显然 C n C_{n} Cn是收敛的,并且截断误差
R n ( f ) = − 2 ( b − a ) 945 ( b − a 4 ) 6 f 6 ( η ) R_{n}(f)=-\dfrac{2(b-a)}{945}\left(\dfrac{b-a}{4}\right)^{6}f^{6}(\eta) Rn(f)=9452(ba)(4ba)6f6(η)其中 η ∈ ( a , b ) \eta\in{(a,b)} η(a,b),所以 R n ( f ) = O ( h 6 ) R_{n}(f)=O(h^{6}) Rn(f)=O(h6),可以得到系数 A i > 0 A_{i}>0 Ai>0,所以此公式是稳定的.
为了编程方便,我们可以将公式改写为
C n = h 90 { 7 f ( a ) − 7 f ( b ) + ∑ i = 1 n [ 14 f ( x i ) + 32 f ( x i + 1 4 ) + 12 f ( x i + 1 2 ) + 32 f ( x i + 3 4 ) ] } C_{n}=\dfrac{h}{90}\left\{7f(a)-7f(b)+\sum\limits_{i=1}^{n}\left[14f(x_{i})+32f(x_{i+\frac{1}{4}})+12f(x_{i+\frac{1}{2}})+32f(x_{i+\frac{3}{4}})\right]\right\} Cn=90h{7f(a)7f(b)+i=1n[14f(xi)+32f(xi+41)+12f(xi+21)+32f(xi+43)]}
其中上式中 x i + k 4 = x i + k 4 h , ( k = 0 , 1 , 2 , 3 ) x_{i+\frac{k}{4}}=x_{i}+\frac{k}{4}h,(k=0,1,2,3) xi+4k=xi+4kh,(k=0,1,2,3)
用程序求解上述复合积分求解公式可以得到

import math
def integral(func,a,b,delta = 0.1):
    n = int((b-a)/delta)
    h = (b-a)/n
    v_sum = 7*h*(func(a)-func(b))/90
    for k in range(1,n+1):
        xi = a + k*h
        xia = xi+h/4
        xib = xi+2*h/4
        xic = xi+3*h/4
        v_sum = v_sum + h*(14*func(xi)+32*func(xia)+12*func(xib)+32*func(xic))/90
    return v_sum
def main():
    def sinx(x):
        if x == 0:
            return 1
        return math.sin(x)/x
    print(integral(sinx,0,1))
if __name__ == "__main__":
    main()

得到的结果为

0.9314371161293896

3.2.4 通过精度和截断误差公式确定所分区间的最小个数

根据截断误差公式和精度可以列出不等式
∣ R n ( f ) ∣ = ∣ ( b − a ) ⋅ V ⋅ h m ∣ ≤ ϵ \left|R_{n}(f)\right|=\left|(b-a)\cdot{V}\cdot{h^{m}}\right|\leq{\epsilon} Rn(f)=(ba)Vhmϵ
其中 V V V是对应的参数, m m m是关于 n n n的正整数,求解出 n n n这样就可以得到所分区间的最小 n n n的值.

3.3 开牛顿-科特斯方法

上述的求解方法一般称作是闭牛顿-科特斯方法.它的特点是需要积分区间端点上的函数值.一些被积分函数在端点上有可以移除的奇点,使用开牛顿-科特斯方法可以更加容易处理一些,其中不使用在区间端点上的函数值.
h = x − x 0 h=x-x_{0} h=xx0,这样 f ( x ) f(x) f(x)在区间中点 ω = ( x 0 + h 2 ) \omega=(x_{0}+\frac{h}{2}) ω=(x0+2h)处的泰勒展开式表示为
f ( x ) = f ( ω ) + ( x − ω ) f ′ ( ω ) + 1 2 ( x − ω ) 2 f ′ ′ ( c x ) f(x)=f(\omega)+(x-\omega)f^{'}(\omega)+\frac{1}{2}(x-\omega)^{2}f^{''}(c_{x}) f(x)=f(ω)+(xω)f(ω)+21(xω)2f(cx)
所以在 [ x 0 , x 1 ] [x_{0},x_{1}] [x0,x1]之间的积分可以表示为
∫ x 0 x 1 f ( x ) d x = ( x 1 − x 0 ) f ( ω ) + f ′ ( ω ) ∫ x 0 x 1 ( x − ω ) d x + 1 2 ∫ x 0 x 1 f ′ ′ ( c x ) ( x − ω ) 2 d x \int_{x_{0}}^{x_{1}}f(x)dx=(x_{1}-x_{0})f(\omega)+f^{'}(\omega)\int_{x_{0}}^{x_{1}}(x-\omega)dx+\frac{1}{2}\int_{x_{0}}^{x_{1}}f^{''}(c_{x})(x-\omega)^{2}dx x0x1f(x)dx=(x1x0)f(ω)+f(ω)x0x1(xω)dx+21x0x1f(cx)(xω)2dx
= h f ( ω ) + h 3 24 f ′ ′ ( c x ) =hf(\omega)+\frac{h^{3}}{24}f^{''}(c_{x}) =hf(ω)+24h3f(cx)
这种方法称之为中心法则,即得到积分表达式
∫ x 0 x 1 f ( x ) d x = h f ( ω ) + h 3 24 f ′ ′ ( c x ) \int_{x_{0}}^{x_{1}}f(x)dx=hf(\omega)+\frac{h^{3}}{24}f^{''}(c_{x}) x0x1f(x)dx=hf(ω)+24h3f(cx)
其中 h = x 1 − x 0 , ω = a + b 2 h=x_{1}-x_{0},\omega=\frac{a+b}{2} h=x1x0,ω=2a+b
复合中心法则表达式为
∫ a b f ( x ) d x = h ∑ i = 1 m f ( ω i ) + ( b − a ) h 2 24 f ′ ′ ( c x ) \int_{a}^{b}f(x)dx=h\sum\limits_{i=1}^{m}f(\omega_{i})+\frac{(b-a)h^{2}}{24}f^{''}(c_{x}) abf(x)dx=hi=1mf(ωi)+24(ba)h2f(cx)
其中 h = b − a n , w i = x 0 + h 2 h=\frac{b-a}{n},w_{i}=x_{0}+\frac{h}{2} h=nba,wi=x0+2h

小结

最为重要的两个基本的法则(由牛顿-科特斯公式推导出来的结果):
梯形法则( h = x 1 − x 0 , c ∈ ( x 0 , x 1 ) h=x_{1}-x_{0},c\in{(x_{0},x_{1})} h=x1x0,c(x0,x1))
∫ x 0 x 1 f ( x ) d x = h 2 ( y 0 + y 1 ) − h 3 12 f ′ ′ ( c ) \int_{x_{0}}^{x_{1}}f(x)dx=\dfrac{h}{2}(y_{0}+y_{1})-\dfrac{h^{3}}{12}f^{''}(c) x0x1f(x)dx=2h(y0+y1)12h3f(c)
辛普森法则( h = x 1 − x 0 = x 2 − x 1 , c ∈ ( x 0 , x 2 ) h=x_{1}-x_{0}=x_{2}-x_{1},c\in{(x_{0},x_{2})} h=x1x0=x2x1,c(x0,x2))
∫ x 0 x 1 f ( x ) d x = h 3 ( y 0 + 4 y 1 + y 2 ) − h 5 90 f ( 4 ) ( c ) \int_{x_{0}}^{x_{1}}f(x)dx=\dfrac{h}{3}\left(y_{0}+4y_{1}+y_{2}\right)-\frac{h^{5}}{90}f^{(4)}(c) x0x1f(x)dx=3h(y0+4y1+y2)90h5f(4)(c)
复合梯形公式
∫ a b f ( x ) d x = h 2 ( y 0 + y m + 2 ∑ k = 1 m − 1 y i ) − ( b − a ) h 2 12 f ′ ′ ( c ) \int_{a}^{b}f(x)dx=\dfrac{h}{2}(y_{0}+y_{m}+2\sum\limits_{k=1}^{m-1}y_{i})-\dfrac{(b-a)h^{2}}{12}f^{''}(c) abf(x)dx=2h(y0+ym+2k=1m1yi)12(ba)h2f(c)
其中 h = b − a m , c ∈ ( a , b ) h=\frac{b-a}{m},c\in{(a,b)} h=mba,c(a,b)
复合辛普森公式
∫ a b f ( x ) d x = h 3 ( y 0 + y m + 4 ∑ i = 0 n − 1 y i + 1 2 + 2 ∑ i = 1 n − 1 y i ) − ( b − a ) h 4 180 f ( 4 ) ( c ) \int_{a}^{b}f(x)dx=\dfrac{h}{3}\left(y_{0}+y_{m}+4\sum\limits_{i=0}^{n-1}y_{i+\frac{1}{2}}+2\sum\limits_{i=1}^{n-1}y_{i}\right)-\frac{(b-a)h^{4}}{180}f^{(4)}(c) abf(x)dx=3h(y0+ym+4i=0n1yi+21+2i=1n1yi)180(ba)h4f(4)(c)
其中 h = b − a m , c ∈ ( a , b ) h=\frac{b-a}{m},c\in{(a,b)} h=mba,c(a,b)

参考文献

[1] 数值计算
[2] 华章数学译丛24 数值计算

### LlamaIndex 多模态 RAG 实现 LlamaIndex 支持多种数据类型的接入与处理,这使得它成为构建多模态检索增强生成(RAG)系统的理想选择[^1]。为了实现这一目标,LlamaIndex 结合了不同种类的数据连接器、索引机制以及强大的查询引擎。 #### 数据连接器支持多样化输入源 对于多模态数据的支持始于数据收集阶段。LlamaIndex 的数据连接器可以从多个异构资源中提取信息,包括但不限于APIs、PDF文档、SQL数据库等。这意味着无论是文本还是多媒体文件中的内容都可以被纳入到后续的分析流程之中。 #### 统一化的中间表示形式 一旦获取到了原始资料之后,下一步就是创建统一而高效的内部表达方式——即所谓的“中间表示”。这种转换不仅简化了下游任务的操作难度,同时也提高了整个系统的性能表现。尤其当面对复杂场景下的混合型数据集时,良好的设计尤为关键。 #### 查询引擎助力跨媒体理解能力 借助于内置的强大搜索引擎组件,用户可以通过自然语言提问的形式轻松获得所需答案;而对于更复杂的交互需求,则提供了专门定制版聊天机器人服务作为补充选项之一。更重要的是,在这里实现了真正的语义级关联匹配逻辑,从而让计算机具备了一定程度上的‘认知’功能去理解和回应人类意图背后所蕴含的意义所在。 #### 应用实例展示 考虑到实际应用场景的需求多样性,下面给出一段Python代码示例来说明如何利用LlamaIndex搭建一个多模态RAG系统: ```python from llama_index import GPTSimpleVectorIndex, SimpleDirectoryReader, LLMPredictor, PromptHelper, ServiceContext from langchain.llms.base import BaseLLM import os def create_multi_modal_rag_system(): documents = SimpleDirectoryReader(input_dir='./data').load_data() llm_predictor = LLMPredictor(llm=BaseLLM()) # 假设已经定义好了具体的大型预训练模型 service_context = ServiceContext.from_defaults( chunk_size_limit=None, prompt_helper=PromptHelper(max_input_size=-1), llm_predictor=llm_predictor ) index = GPTSimpleVectorIndex(documents, service_context=service_context) query_engine = index.as_query_engine(similarity_top_k=2) response = query_engine.query("请描述一下图片里的人物表情特征") print(response) ``` 此段脚本展示了从加载本地目录下各类格式文件开始直到最终完成一次基于相似度排序后的top-k条目返回全过程。值得注意的是,“query”方法接收字符串参数代表使用者想要询问的内容,而在后台则会自动调用相应的解析模块并结合先前准备好的知识库来进行推理计算得出结论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值