2026a

# mvnrnd


多元正态随机数

函数库: TyStatistics

# 语法

R,T = mvnrnd(mu,Sigma,n)

R,T = mvnrnd(mu,Sigma)

# 说明

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 — 多元正态随机数
数值矩阵

多元正态随机数,以下列形式之一返回:

  • m×d 数值矩阵,其中 m 和 d 是由 muSigma 指定的维度;

  • n×d 数值矩阵,其中 n 是指定的输入参数,d 是由 mu 和 Sigma 指定的维度。

如果 mu 是矩阵,而 Sigma 是数组,则 mvnrnd 使用 mu[i,:] 和 Sigma[:,:,i] 来计算 R[i,:]。

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.

# 另请参阅

mvnpdf | mvncdf | normrnd

# 主题

多元正态分布