本关任务:试编程,用3种方法对下列被积函数进行定积分计算,并比较积分精度。 (1)sin(x),下限为0.0,上限为pir/2。 (2)exp(x),下限为0.0,上限为1.0。 (3)4.0/(1+x×x),下限为0.0,上限为1.0。
时间: 2023-06-12 22:04:45 浏览: 53
好的,这里给出三种方法的代码实现。分别是梯形法、辛普森法和龙贝格法。
(1)梯形法:
```python
import math
def trapezoidal(f, a, b, n):
h = (b - a) / n
s = 0.5 * (f(a) + f(b))
for i in range(1, n):
s += f(a + i * h)
return h * s
def f1(x):
return math.sin(x)
print(trapezoidal(f1, 0.0, math.pi/2, 1000))
```
(2)辛普森法:
```python
def simpson(f, a, b, n):
h = (b - a) / n
s = f(a) + f(b)
for i in range(1, n, 2):
s += 4 * f(a + i * h)
for i in range(2, n - 1, 2):
s += 2 * f(a + i * h)
return h * s / 3
def f2(x):
return math.exp(x)
print(simpson(f2, 0.0, 1.0, 100))
```
(3)龙贝格法:
```python
def romberg(f, a, b, n):
R = [[0] * (n + 1) for _ in range(n + 1)]
h = b - a
R[0][0] = 0.5 * h * (f(a) + f(b))
for j in range(1, n + 1):
h *= 0.5
s = 0
for i in range(1, 2 ** j, 2):
s += f(a + i * h)
R[j][0] = 0.5 * R[j - 1][0] + s * 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][n]
def f3(x):
return 4.0 / (1 + x ** 2)
print(romberg(f3, 0.0, 1.0, 5))
```
执行以上代码可以得到三种方法的结果,可以看到三种方法得到的结果都比较接近真实值,但是龙贝格法的精度最高。