我是靠谱客的博主 甜美缘分,最近开发中收集的这篇文章主要介绍matlab随机抽取数字,Matlab 从多维正态分布中随机抽取样本:mvnrnd,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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随机抽取数字,Matlab 从多维正态分布中随机抽取样本:mvnrnd的全部内容,希望文章能够帮你解决matlab随机抽取数字,Matlab 从多维正态分布中随机抽取样本:mvnrnd所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部