▪ 随机数

1. random

(1)生成0-1的均匀分布的随机数: random.random() (2)从序列中随机选取一个元素: random.choice() (3)随机生成一个int整数型,可指定范围: random.randint()

2.numpy.random

(1)正态分布函数:np.random.normal()    标准正态分布:np.random.randn() (2)泊松分布函数:np.random.poisson()
(3)均匀分布:np.random.rand()   指定范围均匀分布:np.random.uniform (4)随机整数:np.random.randint()


▪ 其它常用函数、第三方库

1. 操作符号变量: import sympy

(1)定义符号变量:Symbol() (2)定义函数:Function() (3)求解微分方程(组):dsolve(Eq(等式左边,等式右边)) (4)数值计算:expr.sub(old,new); lambdify((varName1,varName2),expr,modules)

## sub example
# 数值计算
expr = x**2+1
expr.subs(x, 2)
# 也可做数值替换
new_expr = expr.subs(x, y+z)

## lambdify example
log_normal = 0.5 + 0.5 * sym.erf((sym.log(x) - mu) / sym.sqrt(2 * sigma**2))
F = sym.lambdify([x, mu, sigma], log_normal)
F(1.0, 0.0, 1.0)

# 参考[35][36]
2. 动图:animation.Funcanimation()

fig:figure对象
updata:不断更新图像的函数,生成新的xdata和ydata
frames:不断提供frame给updata用于生成新的xdata和ydata
init_func=init:初始化函数为init,自定义开始帧。
interval=1:时间间隔为1ms,interval的单位以ms计算。
blit=True:选择更新所有点,还是仅更新产生变化的点。应选择True,但mac用户请选 择False,否则无法显示。
【以上函数Funcanimation()的参数解释来源参考博文[10]】

  主要需要编写两个函数,init()初始化函数和update(n)更新函数,update()中的参数n类似于第几帧,update()写的每一帧呈现的图像。例子可参考博文[4]。

3. 三维图:mpl_toolkits.mplot3d.Axes3D()
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = Axes3D(fig)
# 还有一种表现形式:ax = fig.add_subplot(111,projection = '3d') 
# ax = fig.gca(projection='3d')

# 参考[32]

▪ 微分方程

1.解微分方程组
(1)Python函数

 I. scipy.integrate.odeint()  II. sympy.dsolve() 【用这个函数求不出来,我放弃了】

(2)

 I.常微分方程

  做模拟的时候,方程组实在求解不出,就利用差分的形式做更新,eg:对下面的微分方程,令dS(t) = S(t+△t) - S(t) (△t -> 0)。

python 获取均匀分布的随机数 python生成均匀分布_python 获取均匀分布的随机数

 II.偏微分方程

  对于偏微也类似的,可以先固定其它参数,再做差分,我先用symbol()定义参数,之后再做赋值。eg:

python 获取均匀分布的随机数 python生成均匀分布_概率论_02


像是这样的方程类似的,令∂u/∂t为u(t+△t) - u(t) /dt做更新,但存在一个问题就是u在更新的过程中会越来越复杂(初始为三角函数)以至于计算机在后面的求解中变得很慢。

  解决:将二阶导也进行分解

python 获取均匀分布的随机数 python生成均匀分布_python 获取均匀分布的随机数_03

2. 随机微分方程求密度函数

 I. Fokker-Planck equation

python 获取均匀分布的随机数 python生成均匀分布_Python_04


▪ 随机过程

1. 布朗运动过程
(1)定义:

设{W(t),-inf < t < inf}为随机过程,如果:
I. W(0) = 0
II. {W(t),-inf < t < inf}是独立、平稳增量过程
III. 对任意s,t,增量W(t)-W(s)~N(0, σ^2|t-s|) 则称{W(t),-inf < t < inf}为维纳过程,也称布朗运动过程

(2)模拟:

 根据定义中的III,可利用其进行更新:
 W(t) = W(s) + W(t) - W(s)
 W(t) - W(s)可以根据np.random.normal()函数进行模拟

2. 泊松分布过程
(1)定义:

设计数过程{X(t), t>=0}满足下列条件:
I. X(0) = 0
II. X(t)是独立增量过程
III. 在任意长度为t的区间中,事件A发生的次数服从参数λt>0的泊松分布,即对任意s,t>=0有
P{X(t+s) - X(s) = n} = exp(-λt)·(λt)^n/n!

(2)模拟:

 利用np.random.poisson()

3. lévy过程
(1)定义:

随机过程{L(t),t>=0}成为lévy过程,如果:
I. L(0) = 0
II. L(t)是独立平稳增量过程
III. L(t)是随机连续的,i.e. 对于任意的a>0,对于每个s>=0均满足
P(|L(t)-L(s)|>a) -> 0 (t -> s)

(2)模拟:

  在想要做lévy过程的随机模拟时,从定义上看是lévy过程是一个大类,没有具体的分布去做模拟,直到看到参考[31],如下:

python 获取均匀分布的随机数 python生成均匀分布_python_05


 I. Mantegna方法

python 获取均匀分布的随机数 python生成均匀分布_random_06


python 获取均匀分布的随机数 python生成均匀分布_random_07


 按照Mantegna方法的公式计算得到的s作为levy过程的增量

 II. (补充修正

由Levy辛钦定理和伊藤分解定理知Levy过程可分解为高斯过程和复合泊松过程[40]:

python 获取均匀分布的随机数 python生成均匀分布_python_08

4.分数布朗运动

python 获取均匀分布的随机数 python生成均匀分布_Python_09