蒙特卡罗方法完整教程(WORD文档内附有源码)
- 格式:doc
- 大小:754.00 KB
- 文档页数:15
(完整word版)蒙特卡洛⽅法及其在风险评估中的应⽤蒙特卡洛⽅法及其应⽤1风险评估及蒙特卡洛⽅法概述1.1蒙特卡洛⽅法。
蒙特卡洛⽅法,⼜称随机模拟⽅法或统计模拟⽅法,是在20世纪40年代随着电⼦计算机的发明⽽提出的。
它是以统计抽样理论为基础,利⽤随机数,经过对随机变量已有数据的统计进⾏抽样实验或随机模拟,以求得统计量的某个数字特征并将其作为待解决问题的数值解。
蒙特卡洛模拟⽅法的基本原理是:假定随机变量X1、X2、X3……X n、Y,其中X1、X2、X3……X n 的概率分布已知,且X1、X2、X3……X n、Y有函数关系:Y=F(X1、X2、X3……X n),希望求得随机变量Y的近似分布情况及数字特征。
通过抽取符合其概率分布的随机数列X1、X2、X3……X n带⼊其函数关系式计算获得Y的值。
当模拟的次数⾜够多的时候,我们就可以得到与实际情况相近的函数Y的概率分布和数字特征。
蒙特卡洛法的特点是预测结果给出了预测值的最⼤值,最⼩值和最可能值,给出了预测值的区间范围及分布规律。
1.2风险评估概述。
风险表现为损损益的不确定性,说明风险产⽣的结果可能带来损失、获利或是⽆损失也⽆获利,属于⼴义风险。
正是因为未来的不确定性使得每⼀个项⽬都存在风险。
对于⼀个公司⽽⾔,各种投资项⽬通常会具有不同程度的风险,这些风险对于⼀个公司的影响不可⼩视,⼩到⼀个项⽬投资资本的按时回收,⼤到公司的总风险、公司正常运营。
因此,对于风险的测量以及控制是⾮常重要的⼀个环节。
风险评估就是量化测评某⼀事件或事物带来的影响的可能程度。
根据“经济⼈”假设,收益最⼤化是投资者的主要追求⽬标,⾯对不可避免的风险时,降低风险,防⽌或减少损失,以实现预期最佳是投资的⽬标。
当评价风险⼤⼩时,常有两种评价⽅式:定性分析与定量分析法。
定性分析⼀般是根据风险度或风险⼤⼩等指标对风险因素进⾏优先级排序,为进⼀步分析或处理风险提供参考。
这种⽅法适⽤于对⽐不同项⽬的风险程度,但这种⽅法最⼤的缺陷是在于,在多个项⽬中风险最⼩者也有可能亏损。
小白都能看懂的蒙特卡洛方法以及python实现蒙特卡洛方法是一种基于随机抽样的数学方法,它通过模拟随机过程来求解复杂问题。
这种方法在许多领域都有应用,例如计算机科学、物理学、金融学等。
今天,我们就来介绍一下小白都能看懂的蒙特卡洛方法以及python实现。
一、什么是蒙特卡洛方法?蒙特卡洛方法是一种基于概率的数值分析方法,它通过模拟随机过程来求解复杂问题。
这种方法的基本思想是通过随机抽样来估计一个未知量的数值。
在蒙特卡洛方法中,我们通常会建立一个概率模型,模拟随机过程,并通过对模型进行大量的抽样,来估计未知量的数值。
二、为什么要用蒙特卡洛方法?蒙特卡洛方法具有许多优点,例如计算速度快、适用范围广、易于实现等。
在许多实际问题中,我们无法直接求解数学模型,而蒙特卡洛方法可以通过模拟随机过程来求解复杂问题,从而得到近似解。
此外,蒙特卡洛方法还可以用于解决一些难以用传统数学方法解决的问题。
三、Python实现蒙特卡洛方法下面是一个简单的Python代码示例,演示了如何使用蒙特卡洛方法估算圆周率π的值:```pythonimportrandomimportmathdefestimate_pi(n):#创建一个正方形区域,并随机生成点在区域内points=[(random.uniform(0,1),random.uniform(0,1))for_inra nge(n)]#将点落在正方形区域内的圆心角缩小到π/n弧度内foriinrange(n):x,y=points[i]dx,dy=x*2,y*2points[i]=(x+dx*math.sin(math.pi/n*(i+1)),y+dy*math.cos(m ath.pi/n*(i+1)))#统计落在圆内的点数inside_points=len([pforpinpointsifmath.sqrt(math.pow(p[0] -0,2)+math.pow(p[1]-0,2))<=1])#估算π的值pi_estimate=4*inside_points/nreturnpi_estimate```这段代码中,我们首先创建了一个正方形区域,并随机生成了一些点在区域内。
蒙特卡罗方法讲解
蒙特卡洛方法(Monte Carlo Method)又称几何表面积法,是用来解决统计及数值分析问题的一种算法。
蒙特卡洛方法利用了随机数,其特点是算法简单,可以解决复杂的统计问题,并得到较好的结果。
蒙特卡洛方法可以被认为是统计学中一种具体的模拟技术,可以通过模拟仿真的方式来估算一个问题的可能解。
它首先利用穷举或随机的方法获得随机变量的统计数据,然后针对该统计数据利用数理统计学的方法获得解决问题的推断性结果,例如积分、概率等。
蒙特卡洛方法在计算机科学中的应用非常广泛,可以用来模拟统计物理、金融工程、统计数据反演、运行时参数优化以及系统可靠性计算等问题,因此广泛被用于许多不同的领域。
蒙特卡洛方法的基本思想是:将一个难以解决的复杂问题,通过把它分解成多个简单的子问题,再用数学方法求解这些子问题,最后综合这些简单问题的结果得到整个问题的解。
蒙特卡洛方法的这种思路,也称作“积分”,即将一个复杂的问题,分解成若干小问题,求解它们的结果,再综合起来,得到整体的结果。
蒙特卡洛方法以蒙特卡罗游戏为基础,用统计学的方法对游戏进行建模。
Monte Carlo 方法法§1 概述Monte Carlo 法不同于确定性数值方法,它是用来解决数学和物理问题的非确定性的(概率统计的或随机的)数值方法。
Monte Carlo 方法(MCM ),也称为统计试验方法,是理论物理学两大主要学科的合并:即随机过程的概率统计理论(用于处理布朗运动或随机游动实验)和位势理论,主要是研究均匀介质的稳定状态。
它是用一系列随机数来近似解决问题的一种方法,是通过寻找一个概率统计的相似体并用实验取样过程来获得该相似体的近似解的处理数学问题的一种手段。
运用该近似方法所获得的问题的解in spirit 更接近于物理实验结果,而不是经典数值计算结果。
普遍认为我们当前所应用的MC 技术,其发展约可追溯至1944年,尽管在早些时候仍有许多未解决的实例。
MCM 的发展归功于核武器早期工作期间Los Alamos (美国国家实验室中子散射研究中心)的一批科学家。
Los Alamos 小组的基础工作刺激了一次巨大的学科文化的迸发,并鼓励了MCM 在各种问题中的应用[2]-[4]。
“Monte Carlo ”的名称取自于Monaco (摩纳哥)内以赌博娱乐而闻名的一座城市。
Monte Carlo 方法的应用有两种途径:仿真和取样。
仿真是指提供实际随机现象的数学上的模仿的方法。
一个典型的例子就是对中子进入反应堆屏障的运动进行仿真,用随机游动来模仿中子的锯齿形路径。
取样是指通过研究少量的随机的子集来演绎大量元素的特性的方法。
例如,)(x f 在b x a <<上的平均值可以通过间歇性随机选取的有限个数的点的平均值来进行估计。
这就是数值积分的Monte Carlo 方法。
MCM 已被成功地用于求解微分方程和积分方程,求解本征值,矩阵转置,以及尤其用于计算多重积分。
任何本质上属随机组员的过程或系统的仿真都需要一种产生或获得随机数的方法。
这种仿真的例子在中子随机碰撞,数值统计,队列模型,战略游戏,以及其它竞赛活动中都会出现。
Monte Carlo 计算方法需要有可得的、服从特定概率分布的、随机选取的数值序列。
§2 随机数和随机变量的产生[5]-[10]全面的论述了产生随机数的各类方法。
其中较为普遍应用的产生随机数的方法是选取一个函数)(x g ,使其将整数变换为随机数。
以某种方法选取0x ,并按照)(1k k x g x =+产生下一个随机数。
最一般的方程)(x g 具有如下形式:m c ax x g mod )()(+= (1)其中=0x 初始值或种子(00>x )=a 乘法器(0≥a )=c 增值(0≥c )=m 模数对于t 数位的二进制整数,其模数通常为t2。
例如,对于31位的计算机m 即可取1312-。
这里a x ,0和c 都是整数,且具有相同的取值范围0,,x m c m a m >>>。
所需的随机数序{}n x 便可由下式得m c ax x n n m od )(1+=+ (2) 该序列称为线性同余序列。
例如,若70===c a x 且10=m ,则该序列为7,6,9,0,7,6,9,0…… (3) 可以证明,同余序列总会进入一个循环套;也就是说,最终总会出现一个无休止重复的数字的循环。
(3)式中序列周期长度为4。
当然,一个有用的序列必是具有相对较长周期的序列。
许多作者都用术语乘同余法和混合同余法分别指代0=c 和0≠c 时的线性同余法。
选取c a x ,,0和m 的法则可参见[6,10]。
这里我们只关心在区间)1,0(内服从均匀分布的随机数的产生。
用字符U 来表示这些数字,则由式(2)可得mx U n 1-=(4) 这样U 仅在数组{}m m m m /)1(,......,/2,/1,0-中取值。
(对于区间(0,1)内的随机数,一种快速检测其随机性的方法是看其均值是否为0.5。
其它检测方法可参见[3,6]。
)产生区间),(b a 内均匀分布的随机数X ,可用下式U a b a X )(-+= (5) 用计算机编码产生的随机数(利用式(2)和(4))并不是完全随机的;事实上,给定序列种子,序列的所有数字U 都是完全可预测的。
一些作者为强调这一点,将这种计算机产生的序列称为伪随机数。
但如果适当选取c a ,和m ,序列U 的随机性便足以通过一系列的统计检测。
它们相对于真随机数具有可快速产生、需要时可再生的优点,尤其对于程序调试。
Monte Carlo 程序中通常需要产生服从给定概率分布)(x F 的随机变量X 。
该步可用[6],[13]-[15]中的几种方法加以实现,其中包括直接法和舍去法。
直接法(也称反演法或变换法),需要转换与随机变量X 相关的累积概率函数)()(x X prob x F ≤=(即:)(x F 为x X ≤的概率)。
1)(0≤≤x F 显然表明,通过产生(0,1)内均匀分布随机数U ,经转换我们可得服从)(x F 分布的随机样本X 。
为了得到这样的具有概率分布)(x F 的随机数X ,不妨设)(x F U =,即可得)(1U FX -= (6)其中X 具有分布函数)(x F 。
例如,若X 是均值为μ呈指数分布的随机变量,且 ∞<<-=-x ex F x 0,1)(/μ(7)在)(x F U =中解出X 可得)1ln(U X --=μ (8) 由于)1(U -本身就是区间(0,1)内的随机数,故可简写为U X ln μ-= (9)有时(6)式所需的反函数)(1x F-不存在或很难获得。
这种情况可用舍去法来处理。
令dxx dF x f )()(=为随机变量X 的概率密度函数。
令b x a >>时的0)(=x f ,且)(x f 上界为M (即:M x f ≤)(),如图1所示。
我们产生区间(0,1)内的两个随机数),(21U U ,则 11)(U a b a X -+= M U f 21= (10) 分别为在(a,b)和(0,M)内均匀分布的随机数。
若)(11X f f ≤ (11) 则1X 为X 的可选值,否则被舍去,然后再试新的一组),(21U U 。
如此运用舍去法,所有位于)(x f 以上的点都被舍去,而位于)(x f 上或以下的点都由11)(U a b a X -+=来产生1X 。
图1 舍去法产生概率密度函数为)(x f 的随机变量例1 设计一子程序使之产生0,1之间呈均匀分布的随机数U 。
用该程序产生随机变Θ,其概率分布由下式给定πθθθ<<-=0),cos 1(21)(T 解:生成U 的子程序如图2所示。
该子程序中,,0,21474836471221==-=c m 且1680775==a 。
应用种子数(如1234),主程序中每调用一次子程序,就会生成一个随机数U 。
种子数可取1到m 间的任一整数。
0001 C********************************************************** 0002 C PROGRAM FOR GENERA TING RANDOM V ARIABLES WITH 0003 C A GIVEN PROBABILITY DISTRIBUTION0004 C**********************************************************00050006 DOUBLE PRECISION ISEED 00070008 ISEED=1234.D0 0009 DO 10 I=1,1000010 CALL RANSOM(ISEED,R) 0011 THETA=ACOSD(1.0-2.0*R) 0012 WRITE(6,*)I,THETA 0013 10 CONTINUE 0014 STOP 0015 END0001 C**********************************************************0002 C SUBROUTINE FOR GENERATING RANDOM NUMBERS IN 0003 C THE INTERV AL (0,1)0004 C********************************************************** 00050006 SUBROUTINE RANDOM (ISEED,R) 0007 DOUBLE PRECISION ISDDE,DEL,A 0008 DATA DEL,A/2147483647.D0,16807.D0/ 00090010 ISDDE=DMOD(A*ISDDE,DEL) 0011 R=ISDDE/DEL 0012 RETURN 0013 END图2 例1的随机数生成器图2的子程序只是为了说明本章所介绍的一些概念。
大多数计算机都有生成随机数的子程序。
为了生成随机变量Θ,令 )cos 1(21)(Θ-=Θ=T U 则有 )21(cos )(11U U T-==Θ--据此,一系列具有给定分布的随机变量Θ便可由图2所示主程序中生成。
§3 误差计算Monte Carlo 程序给出的解按大量的检测统计都达到了平均值。
因此,该解中包含了平均值附近的浮动量,而且不可能达到100%的置信度。
要计算Monte Carlo 算法的统计偏差,就必须采用与统计变量相关的各种统计方法。
我们只简要介绍期望值和方差的概念,并利用中心极限定理来获得误差估计[13,16]。
设X 是随机变量。
则X 的期望值或均值x 定义为 ⎰∞∞-=dx x xf x )( (12)这里)(x f 是X 的概率密度分布函数。
如果从)(x f 中取些独立的随机样本N x x x ,...,,21,那么的x 估计值就表现为N 个样本值的均值。
∑==Nn nxNx11ˆ (13)x 是X 的真正的平均值,而xˆ只是x 的有着准确期望值的无偏估计。
虽然x ˆ的期望值等于x ,但x x≠ˆ。
因此,我们还需要x ˆ的值在x 附近的分布测度。
为了估计X 以及x ˆ在x 附近的的值的分布,我们需要引入X 的方差,其定义为X 与x差的平方的期望值,即 ⎰∞∞--=-==dx x f x x x x x Var )()()()(222σ(14)由2222)(x x x x x x +-=-,故有 ⎰⎰⎰∞∞-∞∞-∞∞-+-=dx x f x dx x xf x dx x f x x )()(2)()(222σ (15)或者222)(x x x -=σ (16)方差的平方根称为标准差,即2/122)()(x x x -=σ (17)标准差给出了x 在均值x 附近的分布测度,并由此给出了误差幅度的阶数。