数值积分——梯形公式和Simpson公式

数值积分——梯形公式和Simpson公式
梯形公式:

I ( f ) = ∫ a b f ( x ) d x ≈ b − a 2 [ f ( a ) + f ( b ) ] I(f) = \displaystyle\int^b_a f(x)dx \approx\frac{b-a}{2}[f(a)+f(b)] I(f)=abf(x)dx2ba[f(a)+f(b)]

def Trapezoid(a,b):
    y = (a - b) * ((1/2) * f(a) + (1/2) * f(b))
    return y
Simpson 公式:

I ( f ) = ∫ a b f ( x ) d x ≈ ( b − a ) [ 1 6 f ( a ) + 4 6 f ( a + b 2 ) + 1 6 f ( b ) ] I(f) = \displaystyle\int^b_a f(x)dx \approx(b-a)[\frac{1}{6}f(a)+\frac{4}{6}f(\frac{a+b}{2}) +\frac{1}{6}f(b)] I(f)=abf(x)dx(ba)[61f(a)+64f(2a+b)+61f(b)]

def Simpson(a,b):
    y = (a-b)*((1/6)*f(a) + (4/6)*f((a+b)/2) + (1/6) * f(b))
    return y

测试一下:

def f(x):
    f = np.exp(-x)
    return f
print(Trapezoid(0.5,0.1))
print(Simpson(0.5,0.1))

结果为:

0.3022736155497186
0.298309397365031
复化梯形公式:

T n = ∫ a b f ( x ) d x ≈ h 2 [ f ( a ) + f ( b ) + 2 ∑ k = 1 n − 1 f ( x k ) ] h = b − a n , x k = a + k h , ( k = 0 , 1 , … , n ) T_n =\displaystyle\int^b_a f(x)dx\approx\frac{h}{2}[f(a)+f(b)+2\sum\limits_{k=1}^{n-1}f(x_k)] \\ h=\frac{b-a}{n},x_k = a + kh,(k =0,1,\dots,n) Tn=abf(x)dx2h[f(a)+f(b)+2k=1n1f(xk)]h=nba,xk=a+kh,(k=0,1,,n)

def complex_Trapezoid(n,a,b):
    h = (b-a) / n
    temp_s= 0
    for k in range(1,n):
        x_k = a + k*h
        temp_s += f(x_k)
    I = h/2 * (f(a) + f(b) + 2*temp_s)
    return I
复化Simpson公式:

∫ a b f ( x ) d x ≈ h 3 [ f ( a ) + f ( b ) + 2 ∑ k = 1 m − 1 f ( x 2 k ) + 4 ∑ k = 1 m f ( x 2 k − 1 ) ] n = 2 m , h = b − a n , x k = a + k h , ( k = 0 , 1 , … , n ) \displaystyle\int^b_a f(x)dx\approx\frac{h}{3}[f(a)+f(b)+2\sum\limits_{k=1}^{m-1}f(x_{2k})+4\sum\limits_{k=1}^{m}f(x_{2k-1})] \\ n=2m,h=\frac{b-a}{n},x_k = a + kh,(k =0,1,\dots,n) abf(x)dx3h[f(a)+f(b)+2k=1m1f(x2k)+4k=1mf(x2k1)]n=2m,h=nba,xk=a+kh,(k=0,1,,n)

def complex_simpson(n,a,b):
    '''
    n:划分[a,b]区间成n等分
    a: 积分下限
    b: 积分上限
    '''
    h = (b-a) / n        
    temps_odd = 0
    temps_even = 0
    for k in range(1,n):
        if k % 2 == 0:
            x_k = a + k*h
            temps_even += 2 * f(x_k)
        else:
            x_k = a + k*h
            temps_odd += 4 * f(x_k)
    I = (h/3) * (f(a) + f(b) + temps_even + temps_odd)
    return I

测试一下:

def f(x):
    if x == 0:
        return 1
    else:
        f = np.sin(x) / x
        return f
print(complex_Trapezoid(8,0,1))
print(complex_simpson(8,0,1))

结果为:

0.9456908635827014
0.9460833108884719
  • 17
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
梯形公式Simpson公式是两种常用的数值积分方法,它们的求积精度可以通过误差公式来估计。对于区间 $[a,b]$ 上的连续函数 $f(x)$,用梯形公式Simpson公式分别求积分,它们的误差公式分别为: 梯形公式误差公式: $$ E_{T}=-\frac{(b-a)^3}{12}f''(\xi_T) $$ Simpson公式误差公式: $$ E_{S}=-\frac{(b-a)^5}{2880}f^{(4)}(\xi_S) $$ 其中 $\xi_T$ 和 $\xi_S$ 是区间 $[a,b]$ 上的某个点。可以看出,Simpson公式的误差项比梯形公式的误差项少了一个 $h^2$,因此Simpson公式的求积精度比梯形公式高。 对于复化梯形公式和复化Simpson公式,它们是对梯形公式Simpson公式的改进,将区间 $[a,b]$ 分成若干等分,每个小区间上都应用对应的数值积分公式,然后将各小区间的积分值相加得到整个区间的积分值。复化梯形公式和复化Simpson公式的误差公式分别为: 复化梯形公式误差公式: $$ E_{T_n}=-\frac{(b-a)^3}{12n^2}f''(\xi_T) $$ 复化Simpson公式误差公式: $$ E_{S_n}=-\frac{(b-a)^5}{2880n^4}f^{(4)}(\xi_S) $$ 其中 $n$ 是分割区间的数目,$\xi_T$ 和 $\xi_S$ 是每个小区间上的某个点。可以看出,复化梯形公式和复化Simpson公式的误差项都比对应的非复化公式少了一个 $n$,因此它们的求积精度都比非复化公式高。 综上所述,求积精度从高到低的顺序为:复化Simpson公式 > Simpson公式 > 复化梯形公式 > 梯形公式

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值