蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值

一、求圆周率的近似值,采用 投点法

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle # 投点次数
n = 10000 # 圆的信息
r = 1.0 # 半径
a, b = (0., 0.) # 圆心 # 正方形区域边界
x_min, x_max = a-r, a+r
y_min, y_max = b-r, b+r # 在正方形区域内随机投点
x = np.random.uniform(x_min, x_max, n) # 均匀分布
y = np.random.uniform(y_min, y_max, n) # 计算 点到圆心的距离
d = np.sqrt((x-a)**2 + (y-b)**2) # 统计 落在圆内的点的数目
res = sum(np.where(d < r, 1, 0)) # 计算 pi 的近似值(Monte Carlo方法的精髓:用统计值去近似真实值)
pi = 4 * res / n print('pi: ', pi) # 画个图看看
fig = plt.figure()
axes = fig.add_subplot(111)
axes.plot(x, y,'ro',markersize = 1)
plt.axis('equal') # 防止图像变形 circle = Circle(xy=(a,b), radius=r, alpha=0.5)
axes.add_patch(circle) plt.show()
效果图

二、求定积分(definite integral)的近似值,采用 投点法

import numpy as np
import matplotlib.pyplot as plt '''蒙特卡罗方法求函数 y=x^2 在[0,1]内的定积分(值)'''
def f(x):
return x**2 # 投点次数
n = 10000 # 矩形区域边界
x_min, x_max = 0.0, 1.0
y_min, y_max = 0.0, 1.0 # 在矩形区域内随机投点
x = np.random.uniform(x_min, x_max, n) # 均匀分布
y = np.random.uniform(y_min, y_max, n) # 统计 落在函数 y=x^2图像下方的点的数目
res = sum(np.where(y < f(x), 1, 0)) # 计算 定积分的近似值(Monte Carlo方法的精髓:用统计值去近似真实值)
integral = res / n print('integral: ', integral) # 画个图看看
fig = plt.figure()
axes = fig.add_subplot(111)
axes.plot(x, y,'ro',markersize = 1)
plt.axis('equal') # 防止图像变形 axes.plot(np.linspace(x_min, x_max, 10), f(np.linspace(x_min, x_max, 10)), 'b-') # 函数图像
#plt.xlim(x_min, x_max) plt.show()
效果图

最新文章

  1. markdown博文测试
  2. 什么是SQL注入
  3. 一行代码如何控制ipunt框里面值的长度
  4. 安装 vue.js和第一个hello world
  5. Android 实现闪屏页和右上角的倒计时跳转
  6. SQL设置SQLServer最大连接数查询语句
  7. hdu 1045 Fire Net(最小覆盖点+构图(缩点))
  8. [原创]SQL SERVER 2008R2 技术总结专题目录索引
  9. UVA 315 315 - Network(求割点个数)
  10. MongoDB 的创建、查询、更新、删除
  11. iOS题
  12. Light OJ 1027 - A Dangerous Maze(概率)
  13. WebAPI 用ActionFilterAttribute实现token令牌验证与对Action的权限控制
  14. Java 去除 ArrayList 集合中的重复元素
  15. YII缓存依赖的应用
  16. 全站 HTTPS 没你想象的那么简单
  17. 32位汇编第四讲,干货分享,汇编注入的实现,以及快速定位调用API的数量(OD查看)
  18. js new一个函数和直接调用函数的区别
  19. python----常用功能
  20. matplotlib各图形绘制

热门文章

  1. Java标识符
  2. WordCount系统分析与设计作业
  3. .Net core 下的ConfigurationManager类正确引用方法
  4. SQLSERVER 分区表实战
  5. __MySQL 5.7 Replication 相关新功能说明
  6. Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox
  7. Huawei vlan 配置及vlan 间通讯
  8. 利用MSF的MS08_067模块攻击windows server 2003 SP2中文版系统
  9. phpstudy绑定项目(dist文件)域名--陈远波
  10. 【10】python窗口控制[隐藏,移动]