Matlab从多维正态分布中随机抽取样本:mvnrnd
2016-04-12 16:14
573 查看
原帖地址:http://blog.sina.com.cn/s/blog_955cedd8010130m8.html
R = mvnrnd(MU,SIGMA)——从均值为MU,协方差为SIGMA的正态分布中抽取n*d的矩阵R(n代表抽取的个数,d代表分布的维数)。
MU为n*d的矩阵,R中的每一行为以MU中对应的行为均值的正态分布中抽取的一个样本。
SIGMA为d*d的对称半正定矩阵,或者为d*d*n的array。若SIGMA为array,R中的每一行对应的分布的协方差矩阵为该array对应的一个page。也就是说:R(i,:)由MU(i,:)和SIGMA(:,:,i)产生。
如果协方差矩阵为对角阵,sigma也可用1*d向量或1*d*n的array表示,如果MU是一个1*d的向量,则SIGMA中的n个协方差矩阵共用这个MU。R的行数n由MU的行数n或者SIGMA的page数n决定。
r = mvnrnd(MU,SIGMA,cases)——从均值为MU(1*d),协方差矩阵为SIGMA(d*d)的正态分布中随机抽取cases个样本,返回cases*d的矩阵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(R); % perform cholesky decomp R = C'C
X = randn(M,n); % draw M samples from N(0,I)
Y = X*C + ones(M,1)*u;
R = mvnrnd(MU,SIGMA)——从均值为MU,协方差为SIGMA的正态分布中抽取n*d的矩阵R(n代表抽取的个数,d代表分布的维数)。
MU为n*d的矩阵,R中的每一行为以MU中对应的行为均值的正态分布中抽取的一个样本。
SIGMA为d*d的对称半正定矩阵,或者为d*d*n的array。若SIGMA为array,R中的每一行对应的分布的协方差矩阵为该array对应的一个page。也就是说:R(i,:)由MU(i,:)和SIGMA(:,:,i)产生。
如果协方差矩阵为对角阵,sigma也可用1*d向量或1*d*n的array表示,如果MU是一个1*d的向量,则SIGMA中的n个协方差矩阵共用这个MU。R的行数n由MU的行数n或者SIGMA的page数n决定。
r = mvnrnd(MU,SIGMA,cases)——从均值为MU(1*d),协方差矩阵为SIGMA(d*d)的正态分布中随机抽取cases个样本,返回cases*d的矩阵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(R); % perform cholesky decomp R = C'C
X = randn(M,n); % draw M samples from N(0,I)
Y = X*C + ones(M,1)*u;
相关文章推荐
- MatLab 代码优化 Fast your MatLab code. (3) 预先给数组分配内存
- matlab在一阶动态电路时域分析的应用
- Matlab实现文件读写的几种方法
- opencv打开matlab保存的txt文件,并赋值为Mat矩阵
- Matlab实现简单的人脸识别程序
- matlab 遍历图像文件夹
- MATLAB的fft2和OpeCV的cvDFT的结果是一样的哦!但为什么有时候会相差255倍呢?
- C++ 和Matlab混合编程一些问题:如何让matlab不打开新的command windows窗口
- 离散余弦变换matlab
- Matlab Wavelet 工具箱的使用
- C/C++与Matlab混合编程
- matlab unique函数
- matlab矩阵操作
- Matlab如何安装新的工具箱
- MATLAB读取文件夹下所有图片
- MATLAB一个figure中显示多幅图像,并缩小空白区域
- 使用matlab处理图像的基础知识
- Matlab Language Index
- Source Insight阅读Matlab源码设置流程(其他语言也通用)
- Matlab协助调试ROS程序: matlab2015b + ros indigo