§9 随机数与应用
C1随机数
1)随机数:独立分布的数集
- 伪随机数不独立,使用纯数学方法生成的是伪随机数
2)线性同余生成器(LCG):xi=(axi−1+b)%mx_i = (ax_{i-1} + b) \% mxi=(axi−1+b)%m,a为乘子,b为偏移,m为模数,x0称为种子
-
最小标准随机数生成器:m=231−1,a=75=16807,b=0m = 2^{31} - 1,a = 7^5 = 16807, b = 0m=231−1,a=75=16807,b=0
形如2p−12^p - 12p−1的数称为梅森素数
-
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+2−6xi+1+9xi)%m=0,系数太小导致独立性不足
-
MATLAB不使用LCG,使用的是延迟斐波那契生成器,重复周期超过214002^{1400}21400
3)指数随机数:分布满足p(x)=ae−ax,a>0p(x) = ae^{-ax},a \gt 0p(x)=ae−ax,a>0的随机数
- 均匀随机数uuu转指数随机数x=−ln(1−u)ax = \frac{-\ln(1-u)}{a}x=a−ln(1−u)
- 由u∼U[0,1]u \sim U[0,1]u∼U[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,P−1(u)为所求
4)标准正态随机数:分布满足p(x)=12πe−x22p(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}p(x)=2π1e−2x2的随机数
- Box-Muller生成法:n=−2lnu1sin(2πu2)或−2lnu1cos(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,u2∼U[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,x2∼U[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}xb−a1∫abf(x)dx
-
Ⅱ型蒙特卡罗:计算满足条件的点集面积。使得特征函数取1的概率
-
Error∝n12\mathrm{Error} \propto n^\frac{1}{2}Error∝n21
2)拟随机数:数据间不独立,但自避(不聚集)
-
使用拟随机数的蒙特卡罗算法有更快的收敛速度,令ddd拟随机数的维度
- Ⅰ型:Error∝(lnn)dn−1\mathrm{Error} \propto (\ln n)^dn^{-1}Error∝(lnn)dn−1
- Ⅱ型:Error∝n−12−12d\mathrm{Error} \propto n^{-\frac{1}{2}-\frac{1}{2d}}Error∝n−21−2d1
以Ⅱ型为例,误差的主要来源是边界上点的取值。
使用nnn个点能够将ddd维空间分为n1dn^{\frac{1}{d}}nd1个网格点,在边界上的点数正比于nd−1dn^{\frac{d-1}{d}}ndd−1
因此估计方差为nd−1d÷n=n−1dn^{\frac{d-1}{d}} \div n = n^{-\frac{1}{d}}ndd−1÷n=n−d1,标准差n−12dn^{-\frac{1}{2d}}n−2d1,取均值后n−12−12dn^{-\frac{1}{2}-\frac{1}{2d}}n−21−2d1
-
p进制低差异序列法:将数1−n1-n1−n按ppp(素数)进制写出,记(bk…b0)p(b_k\dots b_0)_p(bk…b0)p,则生成的拟随机数为(0.b0…bk)p(0.b_0\dots b_k) _p(0.b0…bk)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_tWtk。E(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,(Bt1−Bt2)∼N(0,t2−t1),且与一切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=Δt→0limf(ti−1)ΔBi,ΔBi=Bti−Bti−1
- 布朗运动的噪声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=∂t∂fdt+∂x∂fdx+21∂x2∂2fdxdx
- 通过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,zi∼N(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+21∂y∂g(ΔBi2−Δti)
end12∂g∂y(ΔBi2−Δti)\frac{1}{2}\frac{\partial g}{\partial y}(\Delta B_i ^2 -\Delta t_i)21∂y∂g(Δ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
本文介绍了随机数的生成方法,包括伪随机数生成器和不同分布的随机数转换,如指数分布和高斯分布。重点讲述了蒙特卡罗模拟,包括I型和II型模拟及其误差分析,并探讨了一维和连续布朗运动。此外,还讨论了随机微分方程的解法,如Euler-Maruyama法和Milstein法。这些概念和方法在数值分析中有广泛应用。
2409

被折叠的 条评论
为什么被折叠?



