蒙特卡洛方法的数学基础-1

news2024/9/28 15:23:03
  • 蒙特卡洛方法的数学基础-1

概率论

Bayes 公式

P(A_i|B)=\frac{P(A_iB)}{P(B)}=\frac{P(B|A_i)P(A_i)}{\sum_j P(B|A_j)P(A_j)}

常用分布

Binominal Distribution

\begin{matrix} P(k)=\frac{N!}{k!(N-k)!}p^k(1-p)^{N-k}\\ E(k)=Np\\ D(k)=Np(1-p) \end{matrix}

Poisson Distribution

\begin{matrix} P(k)=\frac{\lambda^k}{k!}e^{-k}\\ E(k)=\lambda\\ D(k)=\lambda \end{matrix}

Gaussian Distribution N(X;\mu,\sigma)

\begin{matrix} f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{1}{2}\frac{(x-\mu)^2}{\sigma^2}}\\ \\ \end{matrix}

P(a\leq x\leq b)=\Phi(\frac{b-\mu}{\sigma})-\Phi(\frac{a-\mu}{\sigma})=2\Phi(\frac{b-\mu}{\sigma})-1

Exponential Distribution

\begin{matrix} f(x)=\frac{1}{\lambda}e^{-x/\lambda}\\ F(z)=1-e^{-z/\lambda}\\ \end{matrix}

Uniform Distribution

\begin{matrix} f(x)=\frac{1}{a-b}\\ E(x)=\frac{a+b}{2}\\ D(x)=\frac{(b-a)^2}{12} \end{matrix}

大数定理

  • 均匀概率分布随机地取N个数xi 函数值之和的算术平均收敛于函数的期望值
  • 算术平均收敛于真值

E(\bar{x})=E(x)=\mu

中心极限定理

  • n个相互独立分布各异的随机变量的 总和服从正态分布
  • 置信水平下的统计误差

N(\mu,\sigma^2)=\frac{1}{\sigma \sqrt{2\pi}}exp[\frac{-(x-\mu)^2}{2\sigma^2}]

D(\bar{x})=\frac{D(x)}{N}=\frac{\sigma^2}{N}

Monte Carlo方法简单应用

案例:Buffon 投针实验

案例:投点法求定积分

任意分布的伪随机变量的抽样

反函数直接抽样法

\begin{matrix} 0\leq F(x)=\int_{-\infty}^x f(x)dx \leq 1\\ def:\zeta =F(\eta) \\ \eta = F^{-1}(\zeta) \end{matrix}

变换抽样法

dim=1

\begin{matrix} f(x)dx=g(y)dy\\ g(y)=f(x^{-1}(y))\cdot \begin{Vmatrix} \frac{dx}{dy} \end{Vmatrix} \end{matrix}

dim=2

\begin{matrix} x=g_1(u,v)\,\,\,\ y=g_2(u,v)\\ f(x,y)=g(u(x,y),v(x,y))\cdot \begin{Vmatrix} \frac{\partial u}{\partial x} & \frac{\partial u}{\partial y}\\ \frac{\partial v}{\partial x} & \frac{\partial v}{\partial y} \end{Vmatrix} \end{matrix}

改进的Maraglia方法
import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)

Num = 10000
x = np.zeros(Num)
y = np.zeros(Num)
z = np.zeros(Num)

Times = 0
while Times < Num:
    u,v = np.random.rand(2)
    w = (2*u-1)**2 + (2*v-1)**2
    if w<=1:
        z[Times] = (-2*np.log(w)/w)**0.5        
        x[Times] = u * z[Times]
        y[Times] = v * z[Times]
        Times += 1
    else:
        continue

fig = plt.figure(figsize=(12, 6))
ax1 = fig.add_subplot(1, 2, 1)
ax2 = fig.add_subplot(1, 2, 2)

ax1.hist(x, np.arange(0, max(x), 1))
ax1.set_title("distribution x")

ax2.hist(y, np.arange(0, max(y), 1))
ax2.set_title("distribution y")

plt.savefig("3.jpg")

舍选抽样法

...

复合抽样法


f(x)=\int_{-\infty}^{+\infty}g(x|y)h(y)dy

  • 依据概率密度函数h(y)抽样y_h
  • 依然条件概率密度函数g(x|y_h)抽样x_g

\zeta_f=x_{g(x|y_h)}


加分布与减分布抽样法

  • 加分布抽样

f(x)=\sum_nh_n(x)p_n其中0<p_n<1,\sum_np_N=1,\int_{-\infty}^{+\infty}h_n(x)=1

  • 取\zeta \sim U[0,1],解对n的不等式

\sum_{i=1}^{n-1}p_i < \zeta \leq \sum_{i=1}^np_i

  • 对,对应的hn(x) 抽样得 \zeta = \zeta_{h_n}

  • 减分布抽样

乘加与乘减分布抽样法

...

反函数近似抽样法

近似替代F^{-1}(y)\approx Q(y)

最小二乘拟合 F^{-1}(y)\approx Q(y)=a+by+cy^2+\alpha (1-y)^2lny+\beta y^2ln(1-y)

极限近似法

...

蒙特卡洛方法处理定积分

近似积分公式

  • 近似积分公式在某种意义上是对区间内某些函数值的加权平均
    • 蒙卡方法的目的是优化样本点的选择(位置和权重)
  • 矩形积分方法\int_a^bf(x)dx\approx \sum_{i=1}^N f(x_{i-1})h(The Leftpoint Rule)
    • 1阶近似
  • 矩形积分方法\int_a^bf(x)dx\approx \sum_{i=1}^N f(x_{i})h(The Rightpoint Rule)
    • 1阶近似
  • 矩形积分方法\int_a^bf(x)dx\approx \sum_{i=1}^N f(\frac{x_{i}+x_{i-1}}{2})h(The Midpoint Rule)
    • 2阶近似
  • 梯形积分方法\int_a^bf(x)dx\approx \sum_{i=1}^{N-1} f(x_{i})h + \frac{h}{2}(f(x_0)+f(x_N))(The Trapezoidal Rule)
    • 2阶近似
  • Simpson's Rule \int_\alpha^\beta f(x)dx \approx \frac{\beta-\alpha}{6}[f(\alpha)+4f(\frac{\alpha+\beta}{2})+f(\beta)]
    • 4阶近似

蒙特卡洛积分思路

  • iid 
    • independent and identically distributed

\begin{matrix} I=\int_a^b g(x)dx\\ I=(b-a)\int_a^b g(x)\frac{dx}{b-a}\\ I=(b-a)<g(x)>,x\sim U[a,b]\\ I\approx(b-a)\frac{\sum_ig(x_i)}{N} \end{matrix}


\begin{matrix} I=(b-a)(\tilde{y}\pm \frac{\tilde{S}}{\sqrt{N}})\\ I=\tilde{I}\pm \tilde{\sigma}(\tilde{I}) \end{matrix}

  • example 

\int_a^b (x^2+e^x )dx

import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate

np.random.seed(0)
a = 0
b = 5
N = 100000

f = lambda x:x**2 + np.exp(x)
result1 = integrate.quad(f, a, b)

points = np.random.rand(N)*(b-a) + a
ybar = sum(f(points))/N
Sbar = (sum((points-ybar)**2)/N)**0.5 
result2 = ((b-a)*ybar, (b-a)*Sbar/N**0.5)

X = np.linspace(a, b, N+1)
result3 = f(X[0]) + f(X[N])
flag = 1
for i in range(1, N-1):
    if flag == 1:
        result3 += 4*f(X[i])
        flag *= -1
        
    elif flag == -1:
        result3 += 2*f(X[i])
        flag *= -1

    else:
        print("ERROR!")
        
result3 *= (b-a)/N/3

print("result1:", result1)
print("result2:", result2)
print("result3:", result3)

result1: (189.07982576924329, 2.099207760611269e-12)
result2: (188.98624801068067, 0.5586055984291508)
result3: 189.06826542000084
>>> 


  • 如何评价哩,只能说,蒙卡方法至少能积出正确的答案,关键是速度慢啊
  • 好吧,有人说是代码写得差,嗯 合理
  • 改一下
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate

np.random.seed(0)
a = 0
b = 5
N = 100000

f = lambda x:x**2 + np.exp(x)
result1 = integrate.quad(f, a, b)

points = np.random.rand(N)*(b-a) + a
ybar = sum(f(points))/N
Sbar = (sum((points-ybar)**2)/N)**0.5 
result2 = ((b-a)*ybar, (b-a)*Sbar/N**0.5)

X = np.linspace(a, b, N+1)
result3 = f(X)
coeff = np.ones(N+1)
coeff[1::2] = 4
coeff[2::2] = 2
result3 *= coeff
result3 = sum(result3)

        
result3 *= (b-a)/N/3

print("result1:", result1)
print("result2:", result2)
print("result3:", result3)
  • 测一下用时吧,时间复杂度都是同阶的(大误,这是Python的numpy 特性)
import matplotlib.pyplot as plt
import numpy as np
import scipy.integrate as integrate
import time

np.random.seed(0)
a = 0
b = 5
N = 100000

f = lambda x:x**2 + np.exp(x)
s1 = time.time()
for i in range(100):
    result1 = integrate.quad(f, a, b)
e1 = time.time()

s2 = time.time()
for i in range(100):
    points = np.random.rand(N)*(b-a) + a
    ybar = sum(f(points))/N
    Sbar = (sum((points-ybar)**2)/N)**0.5 
    result2 = ((b-a)*ybar, (b-a)*Sbar/N**0.5)
e2 = time.time()

X = np.linspace(a, b, N+1)
coeff = np.ones(N+1)
coeff[1::2] = 4
coeff[2::2] = 2
s3 = time.time()
for i in range(100):
    result3 = f(X)
    result3 *= coeff
    result3 = sum(result3)
    result3 *= (b-a)/N/3
e3 = time.time()

print("result1:", result1, "used time:", round(e1 - s1, 2))
print("result2:", result2, "used time:", round(e2 - s2, 2))
print("result3:", result3, "used time:", round(e3 - s3, 2))

result1: (189.07982576924329, 2.099207760611269e-12) used time: 0.0
result2: (188.83626394308098, 0.5580722224407848) used time: 1.8
result3: 189.0827159885614 used time: 0.9
>>> 

  • 蒙卡在这里,精度低,速度慢......

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1025970.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cesium 空间量算——生成点位坐标

文章目录 需求分析1. 点击坐标点实现2. 输入坐标实现 需求 用 Cesium 生成点位坐标&#xff0c;并明显标识 分析 以下是我的两种实现方式 第一种是坐标点击实现 第二种是输入坐标实现 1. 点击坐标点实现 //点位坐标getLocation() {this.hoverIndex 0;let that this;this.view…

八一书《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

八一书《乡村振兴战略下传统村落文化旅游设计》许少辉瑞博士生辉少许——2023学生开学季许多少年辉光三农

10万单词例句表单词句子ACCESS\EXCEL数据库

原本我以为《3万5千英语句子英语例句大全ACCESS数据库》例句已经够多了&#xff0c;没想到今天遇到一个10万条英语单词例句的数据&#xff0c;非常适合与单词词典进行关联学习&#xff0c;例句多了单词的用法以及句子的掌握都更有效率。 截图下方有显示“共有记录数”&#xff…

Cesium 空间量算——面积量算

面积量算 需求分析 需求 对页面上所选内容进行面积计算 分析 其实&#xff0c;计算面积其实就是把一个面&#xff0c;拆分成一个一个的三角曲面计算然后相加得到&#xff0c;下面是计算的面积的代码 /** * description : 面积量算* author : Hukang* date : 2023-09-20 13:1…

Date类的学习笔记-超级详细

Date 的定义, 在开始研究这个之前我们首先要能够明白一点&#xff0c;这个 Date 其实本质上是一个对象&#xff0c;我们通过这个对象可以去构建变量&#xff0c;知道这个之后就可以开展后续的研究了 JDK 通用 Date 类的构造方法 测试 获取当前的时间 // 构造这个日期对象Date…

计算机毕设 opencv python 深度学习垃圾图像分类系统

文章目录 0 前言课题简介一、识别效果二、实现1.数据集2.实现原理和方法3.网络结构 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟…

Vue系列(三)之 基础语法【下篇】

一. 事件处理 在 Vue.js 中&#xff0c;v-on 指令被用于监听 DOM 事件&#xff0c;并在事件触发时执行相应的方法&#xff0c;这些方法就是事件处理器。v-on 指令有简写形式 &#xff0c;例如 click"handleClick" 会监听点击事件并执行 handleClick 方法。 事件处理…

MQ - 09 RabbitMQ的架构设计与实现

文章目录 导图概述RabbitMQ 系统架构协议和网络模块数据存储元数据存储 ---> 自带的分布式数据库 Mnesia消息数据存储 生产者和消费者HTTP 协议支持和管控操作RabbitMQ 从生产到消费的全过程总结 导图 概述 最基础的消息队列应该具备通信协议、网络模块、存储模块、生产者、…

socket() failed (24: Too many open files) while connecting to upstream, client

一、这个错误通常是因为文件句柄数目超过系统限制导致的。要解决这个问题&#xff0c;您可以尝试以下几个步骤&#xff1a; 调整系统文件句柄限制&#xff1a;您可以通过修改/etc/security/limits.conf文件中的nofile参数来增加系统文件句柄的最大数目。将nofile的值增加到更高…

zabbix监控平台部署(二)

目录 一、自定义监控 二、Nginx监控 三、监控mysql 四、钉钉告警 五、163邮箱报警 总结 zabbix5.0 一、自定义监控 zabbix-agent&#xff08;147&#xff09; agent端操作 vim /etc/zabbix/zabbix_agentd.conf 在配置未文件末尾添加 UserParametermemory_userd,free…

C++中 负数与String字符串的长度 string.size()作比较 输出错误

在刷题的时候&#xff0c;发现用 -1<t.size() 输出的是错误的值&#xff0c;如下&#xff0c;t“ABC”&#xff0c;但重新定义一个变量后又可以了&#xff0c;查阅检查后&#xff0c;发现string.size()返回的是一个无符号的整数&#xff0c;因此与有符号整数比较&#xff0c…

SpingBoot:整合Mybatis-plus+Druid+mysql

SpingBoot&#xff1a;整合Mybatis-plusDruid 一、特别说明二、创建springboot新工程三、配置3.1 配置pom.xml文件3.2 配置数据源和durid连接池3.3 编写拦截器配置类 四、自动生成代码五、测试六、附件-mysql数据库表 本文参考链接&#xff1a; [Java] Spring Boot 集成 MyBati…

免费、安全、可靠!一站式构建平台 ABS 介绍及实例演示 | 龙蜥技术

编者按&#xff1a;操作系统是一个大的软件集合&#xff0c;成百上千个软件之间有相互调用、相互依赖等各种复杂的关联关系&#xff0c;所以统一的软件包格式&#xff0c;能够更友好地管理、定义这些复杂关系。今天&#xff0c;龙蜥社区基础设施 Contributor 单凯伦带大家了解龙…

Python灰帽编程——网页信息爬取

文章目录 网页信息爬取1. 相关模块1.1 requests 模块1.1.1 模块中的请求方法1.1.2 请求方法中的参数1.1.3 响应对象中属性 1.2 RE 模块1.2.1 匹配单个字符1.2.2 匹配一组字符1.2.3 其他元字符1.2.4 核心函数 2. 网页信息爬取2.1 获取网页HTML 源代码2.2 提取图片地址2.3 下载图…

【机器学习】详解回归(Regression)

文章目录 是什么的问题案例说明 是什么的问题 回归分析&#xff08;Regression Analysis&#xff09; 是研究自变量与因变量之间数量变化关系的一种分析方法&#xff0c;它主要是通过因变量Y与影响它的自变量 X i &#xff08; i 1 , 2 , 3 … &#xff09; X_i&#xff08;i1…

鉴源论坛 · 观模丨基于应用程序编程接口(API)的自动化测试(下)

作者 | 黄杉 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 | 鉴源论坛 观模 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 上文“基于应用程序编程接口&#xff08;API&#xff09;的自动化测试&#xff08;上&#xff09;”…

阿里巴巴全店商品采集教程,阿里巴巴店铺所有商品接口(详解阿里巴巴店铺所有商品数据采集步骤方法和代码示例)

随着电商行业的快速发展&#xff0c;阿里巴巴已成为国内的电商平台之一&#xff0c;拥有着海量的商品资源。对于一些需要大量商品数据的商家或者需求方来说&#xff0c;阿里巴巴全店采集是非常必要的。本文将详细介绍阿里巴巴全店采集的步骤和技巧&#xff0c;帮助大家更好地完…

自定义实现:头像上传View

看看效果&#xff1a; 非常简单&#xff1a;代码直接贴在下面&#xff0c;有需要的直接带走 /*** 带有自定义字体TextView。*/ class EditAvatarUploadView : AppCompatTextView {lateinit var paint:Paintconstructor(context: Context) : this(context, null){iniPaint()}con…

广告电商:一种新型的电商模式

电商行业是一个竞争激烈的领域&#xff0c;要想在这个领域中脱颖而出&#xff0c;就需要不断创新和变革。广告电商就是一种新型的电商模式&#xff0c;它结合了社交电商和广告分佣的优势&#xff0c;让消费者在购物的同时可以获得积分&#xff0c;并且还能通过观看平台对接的广…

【ES6】

ES6 1 ES6简介1.1 什么是ES61.2 为什么使用ES6 2 ES6的新增语法2.1 let2.2 const2.3 let、const、var的区别2.4 解构赋值2.4.1 数组解构2.4.2 对象解构 2.5 箭头函数2.6 剩余参数 3 ES6的内置对象扩展3.1 Array的扩展方法3.1.1 扩展运算符(展开语法)3.1.2 构造函数方法&#xf…