借鉴求解圆周率计算的蒙特卡罗方法,计算 y = sin(x) 函数在[1.0, 1.0]区间内的面积,并绘制面积计算示意图,利用Python实现
时间: 2024-09-25 15:15:41 浏览: 52
【matlab】割圆术求圆周率piCutCircle
5星 · 资源好评率100%
蒙特卡洛方法是一种基于随机抽样的数值积分方法,它通过模拟大量随机点落在某个区域的情况来估算函数的定积分。对于计算y=sin(x)在[1.0, 1.0]区间下的面积,我们可以创建一个正方形区域,其边长等于2,然后统计落在这个区域内部且满足y=sin(x)的点的数量。
首先,我们需要导入必要的库,如numpy和matplotlib。接下来,我们将设置一个足够大的样本数,生成随机点并检查它们是否位于给定区域内和正弦曲线上。最后,我们应用几何比例来估计面积。
以下是Python代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义正弦函数
def f(x):
return np.sin(x)
# 定义评估区间和采样总数
a, b = 1.0, 1.0
n_points = 1000000
# 创建随机坐标
x_random = np.random.uniform(a, b, n_points)
y_random = f(x_random)
# 计算落在曲线下方的点的比例
points_below_curve = len(x_random[y_random <= 1])
# 计算面积
area_estimate = (b - a) * points_below_curve / n_points
# 绘制示意图
fig, ax = plt.subplots()
ax.plot(x_random, y_random, 'bo', alpha=0.5, markersize=1, label='Random Points')
ax.plot([a, b], [0, 0], 'k--', linewidth=1)
ax.plot([a, a], [-1, 1], 'k--', linewidth=1)
ax.plot([b, b], [-1, 1], 'k--', linewidth=1)
ax.fill_between([a, b], [-1, -1], color='gray', alpha=0.4, label='Area Estimate')
ax.set_xlim(a, b)
ax.set_ylim(-1.1, 1.1)
ax.legend()
plt.title(f"Estimating Area of y = sin(x) in [{a}, {b}] using Montecarlo method (Estimated Area: {area_estimate:.4f})")
plt.show()
阅读全文