# mvnrnd
多元正态随机数
函数库: TyStatistics
# 语法
# 说明
R,T = mvnrnd(mu,Sigma,n) 返回一个矩阵 R,该矩阵由从同一多元正态分布(具有均值向量 mu 和协方差矩阵 Sigma)中选择的 n 个随机向量组成。有关详细信息,请参见多元正态分布。 示例
R,T = mvnrnd(mu,Sigma) 返回一个 m×d 矩阵 R,该矩阵由从 m 个单独的 d 维多元正态分布(其均值和协方差分别由 mu 和 Sigma 指定)中采样的随机向量组成。R 的每行均为单个多元正态随机向量。 示例
# 示例
生成多元正态随机数
从同一个多元正态分布中生成随机数。
定义 mu 和 Sigma,并生成 100 个随机数。
using TyPlot
using TyMath
using TyStatistics
mu = [2 3]
Sigma = [1 1.5;1.5 3]
rng = MT19937ar(5489)
R = mvnrnd(rng,mu,Sigma,100)[1]
绘制这些随机数。
figure()
plot(R[:,1],R[:,2],"+")
从不同的多元正态分布中采样
从五个不同的三维正态分布中随机采样。
指定分布的均值 mu 和协方差 Sigma。让所有分布共用同一协方差矩阵,但均值向量不同。
using TyPlot
using TyBase
using TyMath
using TyStatistics
firstDim = collect(1:5);
mu = repeat(firstDim,1,3)
mu = 5×3 Matrix{Int64}:
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
Sigma = eye(3)
Sigma = ×3 Matrix{Int64}:
1 0 0
0 1 0
0 0 1
从五个分布的每个分布中随机采样一次。
rng = MT19937ar(5489)
R = mvnrnd(rng,mu,Sigma)[1]
R = 5×3 Matrix{Float64}:
1.53767 -0.307688 -0.349887
3.83389 1.56641 5.03492
0.741153 3.34262 3.7254
4.86217 7.5784 3.93695
5.31877 7.76944 5.71474
绘制结果
figure()
scatter3(R[:,1],R[:,2],R[:,3])
# 输入参数
mu — 多元正态分布的均值
数值向量 | 数值矩阵
多元正态分布的均值,指定为 1×d 数值向量或 m×d 数值矩阵。
如果 mu 是向量,则 mvnrnd 复制该向量以匹配 Sigma 的尾部维度;
如果 mu 是矩阵,则 mu 的每行均为单个多元正态分布的均值向量。
数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128
Sigma — 多元正态分布的协方差
对称半正定矩阵 | 数值数组
多元正态分布的协方差,指定为 d×d 对称半正定矩阵或 d×d×m 数值数组。
如果 Sigma 是矩阵,则 mvnrnd 复制该矩阵以匹配 mu 中的行数;
如果 Sigma 是数组,则 Sigma 的每页 Sigma[:,:,i] 均为单个多元正态分布的协方差矩阵,因此它是对称半正定矩阵。
如果这些协方差矩阵是对角矩阵,即对角线上为方差且对角线外为零协方差,您也可以将 Sigma 指定为 1×d 的向量或只包含对角线元的 1×d×m 的数组。
数据类型: Float32 | Float64 | Int8 | Int16 | Int32 | Int64 | Int128 | UInt8 | UInt16 | UInt32 | UInt64 | UInt128
n — 多元随机数的数量
正整数标量
多元随机数的数量,指定为正整数标量。n 指定 R 中的行数。
数据类型: Integer
# 输出参数
R — 多元正态随机数
数值矩阵
T — Cholesky 分解结果
三维数组
T - 大小为 (d,d,n) 的三维数组,用于存储每个样本对应的 Cholesky 分解结果。
# 详细信息
多元正态分布
多元正态分布是一元正态分布的双变量或多变量泛化。它有两个参数,即均值向量 μ 和协方差矩阵 Σ,它们类似于一元正态分布的均值和方差参数。Σ 的对角线元素包含每个变量的方差,而 Σ 的非对角线元素包含变量之间的协方差。
d 维多元正态分布的概率密度函数 (pdf) 是:
其中 x 和 μ 是 1×d 向量,而 Σ 是 d×d 对称正定矩阵。只有 mvnrnd 允许半正定 Σ 矩阵,它们可以是奇异矩阵。当 Σ 是奇异矩阵时,pdf 不能有相同的形式。
在 x 处计算的多元正态累积分布函数 (cdf) 是随机向量 v(以多元正态形式分布)位于上限由 x 定义的半无限矩形内的概率:
尽管多元正态 cdf 没有封闭形式,但 mvncdf 能够以数值方式计算 cdf 值。
# 提示
mvnrnd 要求矩阵 Sigma 是对称矩阵。如果 Sigma 只是略有不对称,您可以改用 (Sigma + Sigma')/2 来解决不对称问题;
在一维情况下,Sigma 是方差,而不是标准差。例如,mvnrnd(0,4) 与 normrnd(0,2) 相同,其中 4 是方差,2 是标准差。
# 参考文献
[1] Kotz, S., N. Balakrishnan, and N. L. Johnson. Continuous Multivariate Distributions: Volume 1: Models and Applications. 2nd ed. New York: John Wiley & Sons, Inc., 2000.