分别使用矩形法, 梯形法, 抛物线法, 变步长梯形法法, 变步长辛普森法计算 \int _{0}^{1}(x^{2}+ \cos x)dx \int _{1}^{ \frac { \pi }{2}}(3x^{5}+e^{x}+ \log (x+1))dx代码
时间: 2024-12-25 10:29:32 浏览: 10
在Python中,我们可以使用`scipy.integrate`模块中的数值积分函数来实现这些方法。以下是分别使用矩形法、梯形法、变步长梯形法(Simpson's 1/3规则)、以及变步长辛普森法则(Simpson's 3/8规则)计算给定积分的示例代码:
```python
from scipy.integrate import quad, simps, romb
# 定义被积函数
def integrand(x):
integral1 = x**2 + cos(x)
integral2 = lambda x: 3*x**5 + exp(x) + log(x + 1)
return integral1 if x <= 1 else integral2(x)
# 矩形法(直接求和)
rectangular_integral1 = sum(integrand(xi) * dx for xi, dx in zip([0] + [i / 100 for i in range(1, 100)], [0.01] * 99))
print(f"矩形法: {rectangular_integral1}")
# 梯形法
trapezoidal_integral1 = quad(integrand, 0, 1, epsabs=1e-6)[0]
print(f"梯形法: {trapezoidal_integral1}")
# 变步长梯形法(Simpson's 1/3规则)
simpson_integral1 = simps(integrand, [i / 100 for i in range(1, 100)])
print(f"Simpson's 1/3规则: {simpson_integral1}")
# 变步长辛普森法则(Simpson's 3/8规则)
romberg_integral1 = romb(integrand, n=100, show=False) # 注意这个函数可能会很慢,因为它使用了Romberg公式
print(f"Romberg方法 (3/8规则): {romberg_integral1}")
# 第二个积分
integral2 = quad(integrand, 1, pi / 2, epsabs=1e-6)[0]
print(f"积分区间 [1, π/2]: {integral2}")
```
注意:这些代码示例假设每个积分区域均匀划分成了100份,实际应用中可以根据需要调整步长。
阅读全文