蒙特卡罗模拟法 —— python
目录
1.简介
2.实例分析
2.1 模拟求近似圆周率
2.2 估算定积分
2.3 求解整数规划
1.简介
蒙特卡洛又称随机抽样或统计试验,就是产生随机变量,带入模型算的结果,寻优方面,只要模拟次数够多,最终是可以找到最优解或接近最优的解。
基本思想:为了解决数学、物理、工程技术等方面的问题,首先建立一个概率模型或随机过程,使它的参数等于问题的解;然后通过对模型或过程的观察或抽样试验来计算所求参数的统计特征,最后给出所求解的近似值。
2.实例分析
2.1 模拟求近似圆周率
绘制单位圆和外接正方形,正方形ABCD的面积为:2*2=4,圆的面积为:S=Π*1*1=Π,现在模拟产生在正方形ABCD中均匀分布的点n个,如果这n个点中有m个点在该圆内,则圆的面积与正方形ABCD的面积之比可近似为m/n
程序如下:
#模拟求近似圆周率
import random
import numpy as np
import matplotlib.pyplot as plt
#解决图标题中文乱码问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#进入正题
r=random.random()
num=range(0,200000,10)
mypi=np.ones((1,len(num)))
for j in range(len(num)):# 投点次数n = 10000# 圆的半径、圆心r = 1.0a,b = (0.,0.)# 正方形区域x_min, x_max = a-r, a+ry_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:用统计值去近似真实值)mypi[0,j] = 4 * res / n
plt.plot(range(1,len(mypi[0])+1),mypi[0],'.-')
plt.grid(ls=":",c='b',)#打开坐标网格
plt.axhline(y=np.pi,ls=":",c="yellow")#添加水平直线
# plt.axvline(x=4,ls="-",c="green")#添加垂直直线
plt.legend(['模拟', '实际'], loc='upper right', scatterpoints=1)
plt.title("近似圆周率")
plt.show()
返回:
2.2 估算定积分
程序如下:
#估算定积分
import random
import numpy as np
import matplotlib.pyplot as plt
#解决图标题中文乱码问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#进入正题
r=random.random()
num=range(1,10**6,500)
s = np.ones((1,len(num)))
for j in range(len(num)):n = 30000#矩形边界区域x_min, x_max = 0.0, 1.0y_min, y_max = 0.0, 1.0#在矩形区域内随机投点xx = 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 < x**2, 1 ,0))#计算定积分的近似值s[0,j] = res / n
plt.plot(range(1,len(s[0])+1),s[0],'.-')
plt.grid(ls=":",c='b',)#打开坐标网格
plt.axhline(y=1/3,ls=":",c="red")#添加水平直线
# plt.axvline(x=4,ls="-",c="green")#添加垂直直线
plt.legend(['模拟', '实际1/3'], loc='upper right', scatterpoints=1)
plt.title("估算定积分")
plt.show()
返回:
2.3 求解整数规划
要解的方程为:
条件如下:
程序如下:
# 求解整数规划
import random
import numpy as np
import time
import matplotlib.pyplot as plt
#解决图标题中文乱码问题
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
#进入正题
time_start=time.time() #计时开始
p0=0
for i in range(10**7):x=np.random.randint(0,99,(1,3))f=2*x[0,0]+3*x[0,0]**2+3*x[0,1]+x[0,1]**2+x[0,2]g=[x[0,0]+2*x[0,0]**2+x[0,1]+2*x[0,1]**2+x[0,2],x[0,0]+x[0,0]**2+x[0,1]+x[0,1]**2-x[0,2],2*x[0,0]+x[0,0]**2+2*x[0,1]+x[0,2],x[0,0]+2*x[0,1]**2]if g[0]<=100 and g[1]<=500 and g[2]<=400 and g[3]>=10:if p0<f:x0=xp0=f
print('最优解:',x0)
print('最优值:',p0)
time_end=time.time() #计时结束
print('用时:',time_end-time_start)
返回:
蒙特卡罗模拟法 —— python相关推荐
- matlab历史模拟法计算var,历史模拟法、蒙特卡罗模拟法计算VaR和ES值
一.知识点介绍 1.1 历史模拟法 我们在之前有用到Delta-Normal的GARCH和RiskMetrics方法来计算VaR和ES,假设的是残差满足正态分布,对残差进行二次相关序列的建模并拟合残差 ...
- python蒙特卡洛方法圆周率_蒙特卡罗方法 python 实现
蒙特卡罗(Monte Carlo)方法的精髓:用统计结果去计算频率,从而得到真实值的近似值. 一.求圆周率的近似值,采用 投点法 import numpy as np import matplotli ...
- 蒙特卡罗模拟法 —— matlab
目录 1.简介 2.实例分析 2.1 模拟求近似圆周率 2.2 估算定积分 2.3 求解整数规划 1.简介 蒙特卡洛又称随机抽样或统计试验,就是产生随机变量,带入模型算的结果,寻优方面,只要模拟次数够 ...
- python绘图练习——股票分析(二):风险分析与蒙特卡罗模拟
做完股票的基础分析后,接下来我们可以做一些简单的风险分析. 首先还是导入数据并进行简单的处理: from __future__ import division import numpy as np i ...
- python金融工程的工具包_金融工程及其Python应用
目 录 第1章 金融工程导论 1 1.1 金融工程的概念 2 1.2 国外现代主流金融理论发展历程 2 1.3 国内金融的发展 3 1.4 现代主流金融理论简介 4 1.4.1 投资组合理论 4 1. ...
- 金融工程及其python应用pdf_金融工程及其Python应用
金融工程及其Python应用 编辑 锁定 讨论 上传视频 <金融工程及其Python应用>是2019年1月清华大学出版社出版的图书,作者是朱顺泉. 书 名 金融工程及其Python应 ...
- 《基于Python的金融分析与风险管理》学习笔记
目录 第1部分 入门篇 第1章 Python概览 1.1 Python的定义与比较优势 1.1.1 Python简介 1.1.2 Python的比较优势 1.2 Python之父-吉多·范 ...
- python金融分析-基于Python的金融分析与风险管理
第 1部分 入门篇 第 1章 Python概览 2 1.1 Python的定义与比较优势 3 1.1.1 Python简介 3 1.1.2 Python的比较优势 4 1.2 Python之父-吉多· ...
- 金融与python-基于Python的金融分析与风险管理
金融科技时代已经到来,善于将金融理论与IT技术进行深度融合的人,将成为新时代独具竞争力的金融科技类人才.无论是打算在金融领域求职的新人,还是希望进一步提升个人能力的"职场老手",本 ...
最新文章
- Linux 下hosts文件
- 在silverlight中通过对话框把选择的图片插入到RichTextBox中
- mysql dml_详解MySQL---DDL语句、DML语句与DCL语句
- C#反射读取和设置实体类的属性
- 【概念集锦】之 浅拷贝与深拷贝
- Android绑定服务后出现空指针异常问题
- 上海通信管理局启动对手机清理软件问题调查
- oracle数据库6月之后的数据,Oracle数据库SCN存在可能在2019年6月导致宕机问题
- 【面向对象设计原则】之依赖倒置原则(DIP)
- Streams AQ: qmn coordinator waiting for slave to start等待事件
- HarmonyOS Hi3518系列 环境篇②——HiTool工具烧写运行
- 前端项目加载图片、视频插件
- 28岁程序员晒出脑门照,问以后会秃么?网友:这不已经秃了!
- 【lzy学习笔记-dive into deep learning】数学预备 2.5-2.7
- 【已解决】C盘-系统引导盘扩大容量
- 用python画一个动态樱花
- SiamFC:用于目标跟踪的全卷积孪生网络 fully-convolutional siamese networks for object tracking
- 弹性文件服务(Scalable File Service,SFS)
- node.js 安装,详细步骤教程
- youku吉他弹唱视频
热门文章
- IE浏览器怎么在桌面隐藏图标
- Status Code:200 OK (from disk cache)和304的区别,以及怎么禁止缓存
- linux线程同步教程,多线程同步
- java集合进行排序的两种方式
- 记住:永远不要在MySQL中使用“utf8”,请使用“utf8mb4” 程序员
- 详解mysql什么时候不走索引
- 什么是 NIO? NIO 和 BIO、AIO 之间的区别是什么?NIO主要用来解决什么问题?
- shiro框架---关于多项目之间验证为什么需要共享session
- html提交表单给php邮件发送,在HTML表单中通过PHP自动发送电子邮件
- python2转python3代码_Python2代码转成Python3代码