matlab mvnrnd 函数用法

R = mvnrnd(MU,SIGMA)——从均值为MU,协方差为SIGMA的正态分布中抽取n*d的矩阵R(n代表抽取的个数,d代表分布的维数)。

MU为n*d的矩阵,R中的每一行为以MU中对应的行为均值的正态分布中抽取的一个样本。

SIGMA为dd的对称半正定矩阵,或者为ddn的array。若SIGMA为array,R中的每一行对应的分布的协方差矩阵为该array对应的一个page。也就是说:R(i,:)由MU(i,:)和SIGMA(:,:,i)产生。
如果协方差矩阵为对角阵,sigma也可用1
d向量或1dn的array表示,如果MU是一个1d的向量,则SIGMA中的n个协方差矩阵共用这个MU。R的行数n由MU的行数n或者SIGMA的page数n决定。
r = mvnrnd(MU,SIGMA,cases)——从均值为MU(1
d),协方差矩阵为SIGMA(dd)的正态分布中随机抽取cases个样本,返回casesd的矩阵r。

不使用现成的函数,可以通过一个线性变换来实现:

我们知道,matlab产生的n维正态样本中的每个分量都是相互独立的,或者说,它的协方差矩阵是一个数量矩阵mI,如:X = randn(10000,4);产生10000个4维分布的正态分布样本,协方差矩阵就是单位矩阵I。

定理 n维随机变量X服从正态分布N(u,B),若m维随机变量Y是X的线性变换,即Y=XC,其中C是n×m阶矩阵,则Y服从m维正态分布N(uC,C’BC)。

根据这条定理,我们可以通过一个线性变换C把协方差矩阵为I的n维正态样本变为协方差矩阵为C’C的n维正态样本。如果我们要产生协方差矩阵为R的n维正态样本,由于R为对称正定矩阵,所以有Cholesky分解: R=C’C

附:matlab程序

function Y = multivrandn(u,R,M)
% this function draws M samples from N(u,R)
% where u is the mean vector(row) and R is the covariance matrix which must be positive definite

n = length(u); % get the dimension
C = chol®; % perform cholesky decomp R = C’C
X = randn(M,n); % draw M samples from N(0,I)

Y = X*C + ones(M,1)*u;

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: mvnrnd函数matlab中用于生成多元正态分布随机数的函数。它的语法格式为: X = mvnrnd(mu, Sigma) 其中,mu是一个1×d的向量,表示多元正态分布的均值向量;Sigma是一个d×d的矩阵,表示多元正态分布的协方差矩阵;X是一个n×d的矩阵,表示生成的n个d维多元正态分布随机数。 例如,生成一个均值为[1,2],协方差矩阵为[1,.5;.5,2]的二维多元正态分布随机数,可以使用以下代码: mu = [1,2]; Sigma = [1,.5;.5,2]; X = mvnrnd(mu, Sigma); 生成的X矩阵中每一行都是一个二维多元正态分布随机数。 ### 回答2: mvnrnd函数是在MATLAB中用于生成多元正态分布随机数的函数。它的语法是y = mvnrnd(mu, sigma)或y = mvnrnd(mu, sigma, n),其中mu是一个一维数组,代表多元正态分布的均值向量,sigma是一个方阵,代表多元正态分布的协方差矩阵,n是一个标量,代表需要生成的随机数的个数。 当mu和sigma都是一维数列时,mvnrnd函数生成的随机数是两维的,每一行代表一个样本的多维特征。如果n大于1,则随机数将按行排列,形成一个n行的矩阵y。 当sigma不是一个方阵时,mvnrnd函数会默认生成一个方差为单位矩阵的多元正态分布,即sigma被转化为单位矩阵I。 除了mu和sigma以外,mvnrnd函数还可以通过设置rng(seed)和rng(state)来控制随机数的种子或状态。如果没有设置rng,则mvnrnd函数会使用默认的随机数生成器。 在使用mvnrnd函数时,需要注意以下几点: 1. 当协方差矩阵sigma不是正定矩阵时,生成的随机数将无法保证是多元正态分布。 2. 当需要生成的随机数个数较大时,该函数的计算效率可能较低,因此建议将n值设置为较小的数。 3. 如果需要生成的随机数需要满足一些特定的约束条件,比如非负性或者和为常数等,可以通过生成符合多元正态分布的随机数后再进行变换来实现。 综上所述,mvnrnd函数在实际应用中具有广泛的作用,可以用于生成随机数据、模拟实验、评估算法性能等方面。但在使用时需要根据实际情况仔细选择参数,并进行必要的后处理。 ### 回答3: mvnrnd函数Matlab中用于生成多元正态分布随机数的函数。通俗来讲,就是用它来模拟多维高斯分布的随机数。本函数的完整语法如下: Y = mvnrnd(mu,Sigma) Y = mvnrnd(mu,Sigma,n) Y = mvnrnd(mu,Sigma,n,opt) 其中,mu是一个长度为d的列向量,表示多元正态分布的均值向量;Sigma是一个d×d的协方差矩阵;n是一个正整数,表示输出的随机数个数;opt是一个结构体变量,可以指定一些额外的选项,比如是否使用cholesky分解等。 首先,我们需要明确一个概念:多元正态分布。多元正态分布,也叫多维高斯分布,是指一个d维向量X,它的每个元素都是一个标准正态分布随机变量,并且各个元素之间存在一定的相关性。多元正态分布的概率密度函数可以表示为: P(X) = (2π)^(-d/2)|Σ|^(-1/2)exp(-(1/2)(X-μ)Σ^(-1)(X-μ)') 其中,μ是一个长度为d的列向量,表示均值;Σ是一个d×d的协方差矩阵。 利用mvnrnd函数,我们可以生成符合上述分布的随机数。假设我们要生成一个1000×3的矩阵,其中每一行都是一个三维向量,且这些向量是从多元正态分布中随机抽取的。首先,我们需要指定均值向量和协方差矩阵: mu = [1,2,3]; Sigma = [1,0.5,0.2; 0.5,2,0.4; 0.2,0.4,0.8]; 然后,我们可以调用mvnrnd函数: Y = mvnrnd(mu,Sigma,1000); 其中,第一个参数是均值向量,第二个参数是协方差矩阵,第三个参数是输出的随机数个数。 运行完上述程序,我们得到了一个1000行3列的矩阵Y,其中每一行都是一个三维向量,且这些向量是从指定的多元正态分布中随机抽取的。 除了以上的基本用法之外,mvnrnd函数还支持更多的选项。比如,我们可以使用cholesky分解来加速随机数的生成,只需要在opt中指定'chol'即可: opt = struct('chol',true); Y = mvnrnd(mu,Sigma,1000,opt); 当然,使用cholesky分解的前提是协方差矩阵必须是正定的,否则会出现错误。所以,在实际使用中,需要对协方差矩阵进行判断并加以修正。另外,mvnrnd函数还支持均值向量和协方差矩阵的输入方式有所不同,比如将它们作为一维数组输入。具体用法可以参考Matlab官方文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值