昆仑山:眼中无形心中有穴之穴人合一

夫君子之行,静以修身,俭以养德;非澹泊无以明志,非宁静无以致远。夫学须静也,才须学也;非学无以广才,非志无以成学。怠慢则不能励精,险躁则不能冶性。年与时驰,意与岁去,遂成枯落,多不接世。悲守穷庐,将复何及!

 

利用梯形公式,simpson公式,Newton公式,Cotes公式计算 定积分 被积函数e^x 积分区间[0,1]

import numpy as np

# 定义被积函数
def f(x):
    return np.exp(x)

# 精确值
exact_value = np.exp(1) - np.exp(0)
print(f"精确值: {exact_value:.8f}")

# 1. 梯形公式
def trapezoidal_rule(a, b, n):
    delta_x = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    integral = delta_x / 2 * (y[0] + 2 * np.sum(y[1:-1]) + y[-1])
    return integral

# 2. 辛普森公式
def simpson_rule(a, b, n):
    if n % 2 != 0:
        raise ValueError("n 必须是偶数")
    delta_x = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    integral = delta_x / 3 * (y[0] + 4 * np.sum(y[1:-1:2]) + 2 * np.sum(y[2:-2:2]) + y[-1])
    return integral

# 3. 三阶牛顿-科茨公式 (Simpson 3/8 Rule)
def newton_cotes_3(a, b, n):
    if n % 3 != 0:
        raise ValueError("n 必须是3的倍数")
    delta_x = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    integral = 3 * delta_x / 8 * (y[0] + 3 * np.sum(y[1:-1:3]) + 3 * np.sum(y[2:-1:3]) + 2 * np.sum(y[3:-1:3]) + y[-1])
    return integral

# 4. 四阶牛顿-科茨公式
def cotes_4(a, b, n):
    if n % 4 != 0:
        raise ValueError("n 必须是4的倍数")
    delta_x = (b - a) / n
    x = np.linspace(a, b, n + 1)
    y = f(x)
    # 系数为 [7, 32, 12, 32, 7] 的循环
    weights = np.ones(n + 1)
    weights[0::4] = 7
    weights[1::4] = 32
    weights[2::4] = 12
    weights[3::4] = 32
    weights[-1] = 7
    integral = 2 * delta_x / 45 * np.sum(y * weights)
    return integral

# 计算并输出结果
a, b = 0, 1  # 积分区间 [0, 1]


# 梯形公式 (n=2)
trap_result = trapezoidal_rule(a, b, 2)
print(f"梯形公式 (n=2): {trap_result:.8f}, 误差: {abs(trap_result - exact_value):.8f}")

# 辛普森公式 (n=2)
simp_result = simpson_rule(a, b, 2)
print(f"辛普森公式 (n=2): {simp_result:.8f}, 误差: {abs(simp_result - exact_value):.8f}")

# 三阶牛顿-科茨公式 (n=3)
nc3_result = newton_cotes_3(a, b, 3)
print(f"三阶牛顿-科茨公式 (n=3): {nc3_result:.8f}, 误差: {abs(nc3_result - exact_value):.8f}")

# 四阶科茨公式 (n=4)
cotes4_result = cotes_4(a, b, 4)
print(f"四阶科茨公式 (n=4): {cotes4_result:.8f}, 误差: {abs(cotes4_result - exact_value):.8f}")

posted on 2025-04-01 12:24  Indian_Mysore  阅读(25)  评论(0)    收藏  举报

导航