Python 求积分 无限矩形法 高斯-勒让德

Python 求积分 无限矩形法 高斯-勒让德

import numpy as np 

def trapezoidal_rule(f, a, b, n):  
    """  
    使用梯形法则计算定积分  
    f: 被积函数  
    a: 积分下限  
    b: 积分上限  
    n: 分段数  
    """  
    h = (b - a) / n  
    s = f(a) + f(b)  
    for i in range(1, n):  
        s += 2 * f(a + i * h)  
    return s * h / 2  

def trapezoidal_rule2(f, a, b, n):  
    """  
    使用梯形法则计算定积分  
    f: 被积函数  
    a: 积分下限  
    b: 积分上限  
    n: 分段数  
    """  
    h = (b - a) / n  
    s = 0  
    for i in range(1, n):  
        s += h * f(a + i * h)  
    return s

def gauss_legendre_quadrature(f, a, b, n):  
    """  
    使用高斯-勒让德公式计算定积分  
    f: 被积函数  
    a: 积分下限  
    b: 积分上限  
    n: 采样点数  
    """  
    # 计算高斯点和对应的权重  
    x, w = np.polynomial.legendre.leggauss(n)  
      
    # 将高斯点从[-1, 1]映射到[a, b]  
    x = 0.5 * ((b - a) * x + a + b)  
      
    # 计算积分值  
    integral = np.sum(w * f(x)) * 0.5 * (b - a)  
    return integral  

# 测试函数  
def f(x):  
    return x**2  
  
# 计算积分  
a = 0  
b = 10 
result = trapezoidal_rule(f, a, b, 1000000)  
result2 = trapezoidal_rule2(f, a, b, 1000000)
result3 = gauss_legendre_quadrature(f, a, b, 10)
print("trapezoidal_rule积分结果为:", result)
print("trapezoidal_rule2积分结果为:", result2)
print("gauss_legendre_quadrature积分结果为:", result3)

Python 求积分 无限矩形法 高斯-勒让德_第1张图片

你可能感兴趣的:(python,开发语言)