Romberg数值积分代码
import numpy as np
def f(x):
    """定义被积函数 f(x) = ln(1 + x) / (1 + x^2)"""
    return np.log(1 + x) / (1 + x ** 2)
def trapezoidal_rule(a, b, n, func):
    """梯形法则实现"""
    h = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = func(x)
    return (h / 2) * (y[0] + 2 * np.sum(y[1:n]) + y[n])
def romberg_integration(a, b, func, max_steps=4):
    """
    龙贝格积分实现
    参数:
    a, b: 积分上下限
    func: 被积函数
    max_steps: 最大迭代次数 (对应 n = 2^k)
    返回:龙贝格表格和最终近似值
    """
    # 初始化龙贝格表格
    R = np.zeros((max_steps, max_steps))
    # 计算 T_n (梯形法则)
    for k in range(max_steps):
        n = 2 ** k
        R[k, 0] = trapezoidal_rule(a, b, n, func)
    # 理查森外推
    for m in range(1, max_steps):
        for k in range(m, max_steps):
            R[k, m] = (4 ** m * R[k, m - 1] - R[k - 1, m - 1]) / (4 ** m - 1)
    # 打印表格
    print("龙贝格积分表格:")
    for i in range(max_steps):
        row = [f"{R[i, j]:.6f}" if j <= i else " " for j in range(max_steps)]
        print(f"k={i}: {row}")
    return R[max_steps - 1, max_steps - 1]
# 测试代码
if __name__ == "__main__":
    a, b = 0, 1  # 积分区间 [0, 1]
    max_steps = 4  # 迭代到 k=3 (n=1, 2, 4, 8)
    result = romberg_integration(a, b, f, max_steps)
    exact = (np.pi / 8) * np.log(2)  # 精确值
    print(f"\n龙贝格积分近似值: {result:.6f}")
    print(f"精确值: {exact:.6f}")
    print(f"误差: {abs(result - exact):.6f}")
posted on 2025-05-26 13:41 Indian_Mysore 阅读(2) 评论(0) 收藏 举报
 
                    
                     
                    
                 
                    
                 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号