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)