4

给定M x M所需的协方差R和所需的样本向量数量,在 vanilla MATLAB 中N计算N x M高斯随机向量X(即不能使用r = mvnrnd(MU,SIGMA,cases))。

不太确定如何解决这个问题,通常你需要一个协方差和均值来生成一个高斯随机变量。我认为sqrtm并且chol可能有用。

4

2 回答 2

3

例子:

% Gaussian mean and covariance
d = 2;             % number of dimensions
mu = rand(1,d);
sigma = rand(d,d); sigma = sigma*sigma';

% generate 100 samples from above distribution
num = 100;
X = mvnrnd(mu, sigma, num);

% plot samples (only for 2D case)
scatter(X(:,1), X(:,2), 'filled'), hold on
ezcontour(@(x,y) mvnpdf([x y], mu, sigma), xlim(), ylim())
title('X~N(\mu,\sigma)')
xlabel('X_1'), ylabel('X_2')

二维高斯样本

上面的代码使用统计工具箱中的函数(mvnrndmvnpdf)。如果您无权访问它,请考虑以下替换(使用其他人提到的相同概念):

mvnrnd = @(mu,S,num) bsxfun(@plus, randn(num,numel(mu))*cholcov(S), mu);

mvnpdf = @(x,mu,S) exp(-0.5*(x-mu)*(S\(x-mu)')) / sqrt((2*pi)^d*det(S));

多元正态分布 PDF

于 2013-09-22T15:07:54.060 回答
3

如果您可以访问 MATLAB 统计工具箱,您可以edit mvnrnd在 MATLAB 中输入以查看他们的解决方案。

[T p] = chol(sigma);
if m1 == c
  mu = mu';
end
mu = mu(ones(cases,1),:);
r = randn(cases,c) * T + mu;

指出这一点感觉就像在作弊,但是编辑 MATLAB 的源代码对于理解一般情况非常有用。mvnrnd.m如果没有工具箱,也可以在 google 上搜索。

于 2013-09-20T02:37:16.783 回答