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

  • 蒙特卡洛方法的数学基础-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 pltnp.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)**2if w<=1:z[Times] = (-2*np.log(w)/w)**0.5        x[Times] = u * z[Times]y[Times] = v * z[Times]Times += 1else:continuefig = 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 integratenp.random.seed(0)
a = 0
b = 5
N = 100000f = 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 *= -1elif flag == -1:result3 += 2*f(X[i])flag *= -1else:print("ERROR!")result3 *= (b-a)/N/3print("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 integratenp.random.seed(0)
a = 0
b = 5
N = 100000f = 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/3print("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 timenp.random.seed(0)
a = 0
b = 5
N = 100000f = 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) + aybar = sum(f(points))/NSbar = (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 *= coeffresult3 = 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.rhkb.cn/news/137138.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

无涯教程-JavaScript - CSC函数

描述 CSC函数返回以弧度指定的Angular的余割值。 语法 CSC (number)争论 Argument描述Required/OptionalNumberThe angle (in radians) that you want to calculate the cosecant of.Required Notes CSC(n)等于1/SIN(n) 如果Angular为度,则将其乘以PI()/180或使用RADIANS…

zabbix添加监控项及邮件报警

一、zabbix添加监控项 添加主机群组&#xff0c;添加主机&#xff0c;添加监控项 键值参考官方文档&#xff1a;1 Zabbix客户端 添加监控MySQL3306端口的监控项 2.邮件报警 1.软件安装 [rootxingdian ~]# yum install mailx -y 2.邮箱配置 [rootxingdian ~]# vim /etc/mail.…

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

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

(并查集) 1971. 寻找图中是否存在路径 ——【Leetcode每日一题】

❓ 1971. 寻找图中是否存在路径 难度&#xff1a;简单 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 …

年龄大了转嵌入式有机会吗?

年龄大了转嵌入式有机会吗&#xff1f; 首先&#xff0c;说下结论&#xff1a;年龄并不是限制转行嵌入式软件开发的因素&#xff0c;只要具备一定的编程和电子基础知识&#xff0c;认真学习和实践&#xff0c;是可以成为优秀的嵌入式软件开发工程师的。最近很多小伙伴找我&…

共铸智能未来 图为科技加入深圳市人工智能行业协会

人工智能技术的快速发展&#xff0c;为我们带来了许多革命性的创新&#xff0c;深度学习、自然语言处理、计算机 视觉等技术的突破&#xff0c;加速了人工智能的进步&#xff0c;使其能够更好地理解和处理复杂的数据和情境。这 些技术不仅在科学研究中发挥着重要作用&#xff0…

linux-如何用起来ubuntu

1 Oracle VM VirtualBox安装ubuntu20.04虚拟机 【工具】->【新建】 1.1 虚拟电脑名称和系统类型 【名称】&#xff1a;自定义名称即可 【文件夹】&#xff1a;虚拟机文件将要存储的路径 【虚拟光盘】&#xff1a;将要安装的虚拟机iso文件 1.2 自动安装 【用户名】&…

第16篇ESP32 platformio_arduino框架 wifi联网_连接WiFi热点并连接tcp server收发数据进行通讯

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 ​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播…

通过Power Platform自定义D365 CE 业务需求 - 10.使用Power Apps和Dynamics 365的集成

集成在所有项目中都非常重要。您可以使用Microsoft本机应用程序或使用低代码、少代码概念的第三方系统集成Power Apps。在本章中,您将学习如何将本机和第三方应用程序与模型驱动的Power Apps和Dynamics 365应用程序集成。 将Outlook与Power Apps集成 以下部分概述了将Outloo…

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

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

Python灰帽编程——错误异常处理和面向对象

文章目录 1. 错误和异常1.1 基本概念1.1.1 Python 异常 1.2 检测&#xff08;捕获&#xff09;异常1.2.1 try except 语句1.2.2 捕获多种异常1.2.3 捕获所有异常 1.3 处理异常1.4 特殊场景1.4.1 with 语句 2. 内网主机存活检测程序2.1 scapy 模块2.1.1 主要功能2.1.2 scapy 安装…

tp5.1 致命错误: Call to undefined method think\Cache::get()

致命错误: 致命错误: Call to undefined method think\Cache::get() 原因&#xff1a;&#xff08;引用类错误&#xff09; thinkphp5.1中有两个Cache类&#xff1a;think\Cache和think\facade\Cache。 官方文档中说使用think\Cache&#xff0c;但实际是使用think\facade\Cac…

【C++】string 之 assign、at、append函数的学习

前言 在学习string类的过程中&#xff0c;我发现了assign这个函数&#xff0c;感觉很有用&#xff0c;就来记录一下 assign函数原型&#xff1a; void assign(size_type n, const T& x T());void assign(const_iterator first, const_iterator last);assign函数有两种使…

springboot整合全局异常处理

一、项目结构 二、全局异常 &#xff08;1&#xff09;启动类 package com.mgx;import com.mgx.common.dto.Result; import com.mgx.utils.ErrorUtil; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.spr…

TikTok的全球困境:多国整改对跨境出海的影响

TikTok&#xff08;抖音国际版&#xff09;是一款风靡全球的短视频应用程序&#xff0c;凭借其创新的内容和吸引力&#xff0c;迅速在全球范围内赢得了数以亿计的用户。 然而&#xff0c;近年来&#xff0c;TikTok在多个国家和地区面临了严峻的监管挑战和整改要求&#xff0c;…

Java21的新特性

Java语言特性系列 Java5的新特性Java6的新特性Java7的新特性Java8的新特性Java9的新特性Java10的新特性Java11的新特性Java12的新特性Java13的新特性Java14的新特性Java15的新特性Java16的新特性Java17的新特性Java18的新特性Java19的新特性Java20的新特性Java21的新特性Java22…

flash attention的CUDA编程和二维线程块实现softmax

本文参考了链接添加链接描述 flash attention介绍 flash attention的介绍可以参考论文:FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness,具体的数学公式参考下面这个图片:其中注意关于矩阵S有两个维度,softmax的操作维度是dim=1,用pytorc…

FireFly PowerBASIC RAD编程,调用PowerBASIC COM对象

一、序言 初步看了看PowerBASIC编程&#xff0c;很类似用VC注册窗体后调用回调函数&#xff0c;先是一个Dialog new&#xff0c;然后添加组件 Control add ......&#xff0c; 然后在处理 Windows MSG和发给组件的消息&#xff0c;这种编程方式和早期DOS 25x80屏幕上编程一样&…

1千听歌猜歌名疯狂猜歌ACCESS\EXCEL数据库

就是从今年开始&#xff0c;各类的“猜”游戏开始火爆&#xff0c;先是猜图&#xff0c;比如看图猜明星、看图猜成语、看图猜电影、看图猜电视剧、看图猜背景、看图猜游戏、看图猜影视人物、看图猜景点等。然后又开始猜音频&#xff0c;猜音频最多的是歌。甚至现在的《一站到底…

Python 数据分析学习路线

Python 数据分析学习路线 第一阶段&#xff1a;Python语言基础第二阶段&#xff1a;数据采集和持久化第三阶段&#xff1a;数据分析第四阶段&#xff1a;数据挖掘与机器学习书籍介绍参与方式 第一阶段&#xff1a;Python语言基础 在学习数据分析之前&#xff0c;首先需要掌握P…