借鉴求解圆周率计算的蒙特卡罗方法,计算 y = sin(x) 函数在[a, b]区间内的面积,并绘制面积计算示意图,利用Python实现
时间: 2024-09-25 20:15:31 浏览: 105
【matlab】割圆术求圆周率piCutCircle
5星 · 资源好评率100%
蒙特卡洛方法是一种基于随机抽样的数值积分方法,用于估计复杂函数的定积分值。对于求解 `y = sin(x)` 在 `[a, b]` 区间内的面积,我们可以将问题转化为计算这个函数曲线下的区域面积。这里我们假设 `a=0` 和 `b=2π`,因为 `sin(x)` 在这一范围内是对称的。
首先,我们需要生成大量的随机点 `(x_i, y_i)`,其中 `x_i` 在 `[0, 2π]` 之间均匀分布,`y_i` 是对应 `x_i` 的 `sin(x_i)` 值。然后,我们将判断每个点是否落在 `y=sin(x)` 曲线之下,统计落在下方的点的数量 `N`。根据概率论,落在该区间的点的比例接近于 `y=sin(x)` 面积与整个区间面积 `[0, 2π]` 的比例。
下面是一个简单的 Python 实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义区间和点数
a, b = 0, 2 * np.pi
n_points = 1000000
# 生成随机点
x_random = np.random.uniform(a, b, n_points)
y_random = np.sin(x_random)
# 判断并计数在曲线下方的点
below_curve = (y_random <= 0).astype(int)
# 面积估计
area_estimate = (b - a) * below_curve.sum() / n_points
print(f"Estimated area under y = sin(x): {area_estimate}")
# 绘制面积计算示意图
plt.scatter(x_random, y_random, alpha=0.5, color='blue')
plt.plot(x_random[below_curve], y_random[below_curve], 'o', color='red', markersize=0.5)
plt.fill_between([a, b], [0, 0], label=f"Area estimate: {area_estimate:.4f}")
plt.xlabel("x")
plt.ylabel("y = sin(x)")
plt.legend()
plt.title("Monte Carlo Integration for Area Under Sin Curve")
plt.show()
```
阅读全文