数值分析 $9 随机数与应用

本文介绍了随机数的生成方法,包括伪随机数生成器和不同分布的随机数转换,如指数分布和高斯分布。重点讲述了蒙特卡罗模拟,包括I型和II型模拟及其误差分析,并探讨了一维和连续布朗运动。此外,还讨论了随机微分方程的解法,如Euler-Maruyama法和Milstein法。这些概念和方法在数值分析中有广泛应用。

§9 随机数与应用

C1随机数

1)随机数:独立分布的数集

  • 伪随机数不独立,使用纯数学方法生成的是伪随机数

2)线性同余生成器(LCG)xi=(axi−1+b)%mx_i = (ax_{i-1} + b) \% mxi=(axi1+b)%m,a为乘子,b为偏移,m为模数,x0称为种子

  • 最小标准随机数生成器:m=231−1,a=75=16807,b=0m = 2^{31} - 1,a = 7^5 = 16807, b = 0m=2311,a=75=16807,b=0

    形如2p−12^p - 12p1的数称为梅森素数

  • randu生成器:a=65539=216+3,m=231a = 65539 = 2^{16}+3,m = 2^{31}a=65539=216+3,m=231

    (xi+2−6xi+1+9xi)%m=0(x_{i+2} - 6x_{i+1} + 9x_i)\% m= 0(xi+26xi+1+9xi)%m=0,系数太小导致独立性不足

  • MATLAB不使用LCG,使用的是延迟斐波那契生成器,重复周期超过214002^{1400}21400

3)指数随机数:分布满足p(x)=ae−ax,a>0p(x) = ae^{-ax},a \gt 0p(x)=aeax,a>0的随机数

  • 均匀随机数uuu转指数随机数x=−ln⁡(1−u)ax = \frac{-\ln(1-u)}{a}x=aln(1u)
  • u∼U[0,1]u \sim U[0,1]uU[0,1]生成满足p(x)p(x)p(x)分布的随即变量:P(x)=∫0xp(x)dx,P−1(u)P(x) = \int ^x_0 p(x)\mathbb{d} x,P^{-1}(u)P(x)=0xp(x)dx,P1(u)为所求

4)标准正态随机数:分布满足p(x)=12πe−x22p(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}p(x)=2π1e2x2的随机数

  • Box-Muller生成法n=−2ln⁡u1sin⁡(2πu2)或−2ln⁡u1cos⁡(2πu2),u1,u2∼U[0,1]n = \sqrt{-2\ln u_1}\sin (2\pi u_2)或\sqrt{-2\ln u_1}\cos (2\pi u_2),u_1,u_2\sim U[0,1]n=2lnu1sin(2πu2)2lnu1cos(2πu2),u1,u2U[0,1]
  • 避免使用三角函数的修正:x1,x2∼U[0,1],u1=x12+x22x_1,x_2\sim U[0,1],u_1 = x_1^2+x_2^2x1,x2U[0,1],u1=x12+x22,且当u1<1u_1 \lt 1u1<1时重新选取。u2=arctan⁡(x2x1)u_2 = \arctan (\frac{x_2}{x_1})u2=arctan(x1x2)
  • MATLAB:randn()

C2 蒙特卡罗模拟

1)蒙特卡洛模拟

  • Ⅰ型蒙特卡罗:计算函数均值1b−a∫abf(x)dx\frac{1}{b-a}\int_a^b f(x)\mathbb{d}xba1abf(x)dx

  • Ⅱ型蒙特卡罗:计算满足条件的点集面积。使得特征函数取1的概率

  • Error∝n12\mathrm{Error} \propto n^\frac{1}{2}Errorn21

2)拟随机数:数据间不独立,但自避(不聚集)

  • 使用拟随机数的蒙特卡罗算法有更快的收敛速度,令ddd拟随机数的维度

    • Ⅰ型:Error∝(ln⁡n)dn−1\mathrm{Error} \propto (\ln n)^dn^{-1}Error(lnn)dn1
    • Ⅱ型:Error∝n−12−12d\mathrm{Error} \propto n^{-\frac{1}{2}-\frac{1}{2d}}Errorn212d1

    以Ⅱ型为例,误差的主要来源是边界上点的取值。

    使用nnn个点能够将ddd维空间分为n1dn^{\frac{1}{d}}nd1个网格点,在边界上的点数正比于nd−1dn^{\frac{d-1}{d}}ndd1

    因此估计方差为nd−1d÷n=n−1dn^{\frac{d-1}{d}} \div n = n^{-\frac{1}{d}}ndd1÷n=nd1,标准差n−12dn^{-\frac{1}{2d}}n2d1,取均值后n−12−12dn^{-\frac{1}{2}-\frac{1}{2d}}n212d1

  • p进制低差异序列法:将数1−n1-n1nppp(素数)进制写出,记(bk…b0)p(b_k\dots b_0)_p(bkb0)p,则生成的拟随机数为(0.b0…bk)p(0.b_0\dots b_k) _p(0.b0bk)p

C3 布朗运动

1)一维随机游动:

  • E(x)=0,D(x)=nE(x) = 0,D(x) = nE(x)=0,D(x)=n

  • 逃逸:首次到达[−b,a][-b,a][b,a]边缘。E(n)=abE(n) = abE(n)=ab。在aaa端逃逸的(后验)概率为ba+b\frac{b}{a+b}a+bb

2)连续布朗运动:

  • 每个周期随机游动的步数变为kkk倍,步长缩减为1k\frac{1}{\sqrt{k}}k1,记为WtkW^k_tWtkE(Wtk)=0,D(Wtk)=tE(W^k_t) = 0,D(W^k_t) = tE(Wtk)=0,D(Wtk)=t

    k→+∞k\to +\inftyk+,得到连续布朗运动BtB_tBt

  • ∀t1,t2,t1<t2,(Bt1−Bt2)∼N(0,t2−t1)\forall t_1,t_2,t_1\lt t_2,(B_{t_1}-B_{t_2})\sim N(0,t_2-t_1)t1,t2,t1<t2,(Bt1Bt2)N(0,t2t1),且与一切BtB_tBt独立

C4 随机微分方程

1)随机微分方程(SDE):解为随机过程的微分方程。如含有噪声项的微分方程

2)Ito积分:噪声项。∫abf(s)dBs=lim⁡Δt→0f(ti−1)ΔBi,ΔBi=Bti−Bti−1\int ^b_a f(s)\mathbb{d}B_s = \lim\limits_{\Delta t\to 0}f(t_{i-1})\Delta B_i,\Delta B_i = B_{t_i} - B_{t_{i-1}}abf(s)dBs=Δt0limf(ti1)ΔBi,ΔBi=BtiBti1

  • 布朗运动的噪声dBt\mathbb{d}B_tdBt称白噪声

3)Ito公式:用于解随机微分方程。y=f(t,x)y = f(t,x)y=f(t,x),则dy=∂f∂tdt+∂f∂xdx+12∂2f∂x2dxdx\mathbb{d} y = \frac{\partial f}{\partial t}\mathbb{d}t +\frac{\partial f}{\partial x}\mathbb{d}x + \frac{1}{2}\frac{\partial^2 f}{\partial x^2}\mathbb{d}x \mathbb{d}xdy=tfdt+xfdx+21x22fdxdx

  • 通过dBtdBt=dt,dtdt=0,dtdBt=dBtdt=0\mathbb{d}B_t\mathbb{d}B_t = dt,\mathbb{d}t\mathbb{d}t=0,\mathbb{d}t\mathbb{d}B_t=\mathbb{d}B_t\mathbb{d}t=0dBtdBt=dt,dtdt=0,dtdBt=dBtdt=0可计算出dxdx\mathbb{d}x\mathbb{d}xdxdx

4)数值积分法:

  • 解法阶数:E(∣y^−y∣)=O((Δt)m)E(|\hat y - y|) = O((\Delta t)^m)E(y^y)=O((Δt)m)

  • Euler-Maruyama法:

    {dy(t)=f(t,y)dt+g(t,y)dBty(0)=y0\begin{cases} \mathbb{d} y(t) = f(t,y)\mathbb{d}t+g(t,y)\mathbb{d}B_t\\y(0)=y_0\end{cases}{dy(t)=f(t,y)dt+g(t,y)dBty(0)=y0

    w0=y0w_0 = y_0w0=y0
    for i = 0, 1, 2, ⋯\cdots
    wi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBiw_{i+1} = w_i + f(t_i,w_i)\Delta t_i + g(t_i,w_i)\Delta B_iwi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBi
    end

    其中,生成ΔBi=ziΔti,zi∼N(0,1)\Delta B_i = z_i \sqrt{\Delta t_i},z_i \sim N(0,1)ΔBi=ziΔti,ziN(0,1)是正态随机数

    阶数为12\frac{1}{2}21

  • Milstein法

    w0=y0w_0 = y_0w0=y0
    for i = 0, 1, 2, ⋯\cdots
    wi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBi+12∂g∂y(ΔBi2−Δti)w_{i+1} = w_i + f(t_i,w_i)\Delta t_i + g(t_i,w_i)\Delta B_i + \frac{1}{2}\frac{\partial g}{\partial y}(\Delta B_i ^2 -\Delta t_i)wi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBi+21yg(ΔBi2Δti)
    end

    12∂g∂y(ΔBi2−Δti)\frac{1}{2}\frac{\partial g}{\partial y}(\Delta B_i ^2 -\Delta t_i)21yg(ΔBi2Δti)即随机泰勒序列

    阶数为1,收敛更快。但是需要用户提供偏导数

  • 一阶随机龙格-库塔法

    w0=y0w_0 = y_0w0=y0
    for i = 0, 1, 2, ⋯\cdots
    wi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBi+12Δti[g(ti,wi+g(ti,wi)Δti)−g(ti,wi)](ΔBi2−Δti)w_{i+1} = w_i + f(t_i,w_i)\Delta t_i + g(t_i,w_i)\Delta B_i + \frac{1}{2\sqrt{\Delta t_i}}[g(t_i,w_i+g(t_i,w_i)\sqrt\Delta t_i)-g(t_i,w_i)](\Delta B_i ^2 -\Delta t_i)wi+1=wi+f(ti,wi)Δti+g(ti,wi)ΔBi+2Δti1[g(ti,wi+g(ti,wi)Δti)g(ti,wi)](ΔBi2Δti)

    end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值