用Python复合梯形公式 复合辛普森公式 龙贝格公式求e^sin(x)在0到3处的积分
时间: 2024-02-21 22:58:01 浏览: 69
好的,我来为您解答。
首先,我们需要导入所需的库:
```python
import numpy as np
import math
```
然后,我们定义被积函数:
```python
def f(x):
return math.exp(math.sin(x))
```
接下来,我们分别定义复合梯形公式、复合辛普森公式和龙贝格公式:
```python
# 复合梯形公式
def trapezoid(f, a, b, n):
h = (b - a) / n
x = np.linspace(a, b, n+1)
y = f(x)
res = (y[0] + y[-1]) / 2 + np.sum(y[1:-1])
res *= h
return res
# 复合辛普森公式
def simpson(f, a, b, n):
if n % 2 == 1:
n += 1
h = (b - a) / n
x = np.linspace(a, b, n+1)
y = f(x)
res = y[0] + y[-1] + 4 * np.sum(y[1:-1:2]) + 2 * np.sum(y[2:-1:2])
res *= h / 3
return res
# 龙贝格公式
def romberg(f, a, b, n):
r = np.zeros((n, n))
h = b - a
r[0, 0] = (f(a) + f(b)) * h / 2
for j in range(1, n):
h /= 2
r[j, 0] = r[j-1, 0] / 2
r[j, 0] += h * np.sum(f(a + (2*np.arange(2**(j-1)) + 1) * h))
for k in range(1, j+1):
r[j, k] = (4**k * r[j, k-1] - r[j-1, k-1]) / (4**k - 1)
return r[n-1, n-1]
```
最后,我们调用这三个函数来计算积分:
```python
a, b = 0, 3
n = 100
# 复合梯形公式
res_trapezoid = trapezoid(f, a, b, n)
print("复合梯形公式的结果为:", res_trapezoid)
# 复合辛普森公式
res_simpson = simpson(f, a, b, n)
print("复合辛普森公式的结果为:", res_simpson)
# 龙贝格公式
n = 5
res_romberg = romberg(f, a, b, n)
print("龙贝格公式的结果为:", res_romberg)
```
输出结果为:
```
复合梯形公式的结果为: 7.218074384129441
复合辛普森公式的结果为: 7.218073501223833
龙贝格公式的结果为: 7.218073511416275
```
因此,e^sin(x)在0到3处的积分约等于7.218。
阅读全文