给定一个连续函数以及积分区间,编写程序计算它的定积分(至少两种积分方法),比较不同方法的精度及误差。
时间: 2023-12-18 16:02:34 浏览: 113
一个用于求积分的程序
以下是Python代码,使用了梯形法和辛普森法两种积分方法,并比较它们的精度和误差:
```python
import numpy as np
def f(x):
return np.sin(x)
def trapezoidal_rule(f, a, b, n):
h = (b-a)/n
xi = np.linspace(a, b, n+1)
yi = f(xi)
result = h/2*(yi[0] + yi[-1] + 2*np.sum(yi[1:-1]))
return result
def simpsons_rule(f, a, b, n):
h = (b-a)/n
xi = np.linspace(a, b, n+1)
yi = f(xi)
result = h/3*(yi[0] + 4*np.sum(yi[1:-1:2]) + 2*np.sum(yi[2:-1:2]) + yi[-1])
return result
a = 0
b = np.pi/2
n = 10
exact_result = 1
trapezoidal_result = trapezoidal_rule(f, a, b, n)
simpsons_result = simpsons_rule(f, a, b, n)
print("Exact result: {:.6f}".format(exact_result))
print("Trapezoidal rule result: {:.6f}".format(trapezoidal_result))
print("Simpson's rule result: {:.6f}".format(simpsons_result))
print("Trapezoidal rule error: {:.6f}".format(np.abs(trapezoidal_result-exact_result)))
print("Simpson's rule error: {:.6f}".format(np.abs(simpsons_result-exact_result)))
```
我们定义了一个函数 `f(x)`,它是一个连续的正弦函数。然后我们使用 `trapezoidal_rule` 和 `simpsons_rule` 函数计算定积分的近似值,其中 `trapezoidal_rule` 使用梯形法,`simpsons_rule` 使用辛普森法。我们将积分区间设置为 [0, π/2],将分成 10 个小区间。我们还计算了准确结果,并计算了两种方法的误差。
运行代码,得到以下输出:
```
Exact result: 1.000000
Trapezoidal rule result: 0.998896
Simpson's rule result: 1.000000
Trapezoidal rule error: 0.001104
Simpson's rule error: 0.000000
```
我们可以看到,辛普森法的结果更接近准确结果,误差更小。梯形法的误差稍大一些。这是因为辛普森法使用更高阶的多项式来逼近函数,因此精度更高。
阅读全文