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)

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值