编写Python代码,分别用复化梯形公式、复化Simpson公式和Romberg公式计算给定函数的数值积分
时间: 2024-05-07 16:21:46 浏览: 107
下面是一个示例代码,可以计算给定函数的数值积分:
```python
import numpy as np
def f(x):
return np.sin(x)
def trapezoidal(f, a, b, n):
h = (b-a)/n
x = np.linspace(a, b, n+1)
y = f(x)
s = sum(y[1:-1])
return h/2 * (y[0] + 2*s + y[-1])
def simpson(f, a, b, n):
if n % 2 == 1:
raise ValueError("n must be even")
h = (b-a)/n
x = np.linspace(a, b, n+1)
y = f(x)
s = sum(y[1:-1:2]) + 4*sum(y[2:-1:2]) + y[0] + y[-1]
return h/3 * s
def romberg(f, a, b, n):
r = np.zeros((n,n))
h = b-a
r[0,0] = 0.5*h*(f(a) + f(b))
for j in range(1, n):
h /= 2
s = 0
for k in range(1, 2**j, 2):
s += f(a + k*h)
r[j,0] = 0.5*r[j-1,0] + s*h
for i in range(1, j+1):
r[j,i] = (4**i * r[j,i-1] - r[j-1,i-1]) / (4**i - 1)
return r
if __name__ == '__main__':
a = 0
b = np.pi/2
n = 10
print("Trapezoidal rule: ", trapezoidal(f, a, b, n))
print("Simpson's rule: ", simpson(f, a, b, n))
r = romberg(f, a, b, n)
print("Romberg integration: ", r[-1,-1])
```
这个代码定义了三个函数:`trapezoidal`、`simpson`和`romberg`,分别实现了复化梯形公式、复化Simpson公式和Romberg公式。然后,我们可以在 `if __name__ == '__main__':` 中调用这三个函数来计算数值积分。
在这个示例中,我们计算了 $f(x) = \sin x$ 在 $[0, \frac{\pi}{2}]$ 区间上的数值积分。我们使用了 $n=10$ 个子区间来进行数值积分。你可以根据需要修改这些参数,来计算其他函数的数值积分。
阅读全文