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

本文介绍了数值积分中的梯形公式和Simpson公式,并给出了具体的Python实现。包括基本的梯形公式、Simpson公式及其复化版本,通过实例展示了如何使用这些方法进行数值积分计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数值积分——梯形公式和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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值