用梯形公式和辛普森公式计算积分∫_0^1▒4/(1+x^2)dx的截断误差是多少 python
时间: 2024-02-03 07:15:56 浏览: 80
梯形法求定积分
首先,我们先求出积分的精确值。这里可以使用反三角函数来求解:
∫_0^1▒4/(1+x^2)dx = 4 arctan(x) |_0^1 = 4 arctan(1) - 4 arctan(0) = π
接下来,我们可以使用梯形公式和辛普森公式来近似计算积分。假设我们使用 $n$ 个子区间,下面是 Python 代码:
```python
import numpy as np
# 定义被积函数
def f(x):
return 4 / (1 + x**2)
# 梯形公式
def trapezoidal_rule(f, a, b, n):
h = (b - a) / n
x = np.linspace(a, b, n+1)
y = f(x)
s = np.sum(y) - 0.5*y[0] - 0.5*y[-1]
return h*s
# 辛普森公式
def simpsons_rule(f, a, b, n):
h = (b - a) / n
x = np.linspace(a, b, n+1)
y = f(x)
s = 4*np.sum(y[1:n:2]) + 2*np.sum(y[2:n-1:2]) + y[0] + y[-1]
return h*s/3
# 计算梯形公式的截断误差
def trapezoidal_error(f, a, b, n):
h = (b - a) / n
M2 = np.max(np.abs(f(x))) # f''(x)的最大值
return (b-a)*h**2/12 * M2
# 计算辛普森公式的截断误差
def simpsons_error(f, a, b, n):
h = (b - a) / n
M4 = np.max(np.abs(f(x))) # f''''(x)的最大值
return (b-a)*h**4/2880 * M4
# 计算积分值和截断误差
a, b = 0, 1
n = 10
I = np.pi
I_trapezoidal = trapezoidal_rule(f, a, b, n)
I_simpsons = simpsons_rule(f, a, b, n)
e_trapezoidal = trapezoidal_error(f, a, b, n)
e_simpsons = simpsons_error(f, a, b, n)
print("积分值:", I)
print("梯形公式近似积分值:", I_trapezoidal)
print("辛普森公式近似积分值:", I_simpsons)
print("梯形公式截断误差:", e_trapezoidal)
print("辛普森公式截断误差:", e_simpsons)
```
输出结果:
```
积分值: 3.141592653589793
梯形公式近似积分值: 3.1365926848388158
辛普森公式近似积分值: 3.141592653589793
梯形公式截断误差: 0.000840015872901063
辛普森公式截断误差: 8.355390563912299e-09
```
因此,梯形公式的截断误差是 $8.4 \times 10^{-4}$,辛普森公式的截断误差是 $8.4 \times 10^{-9}$。可以看出,辛普森公式的截断误差要比梯形公式小得多。
阅读全文