我想在Matlab中实现以下高斯过程。到目前为止,我尝试过normpdf和normrnd,但结果并不是我所期待的。 B
是NxN
矩阵,en的预期结果是Nx1向量。使用这两种方法,我得到一个NxN
矩阵。
有什么建议吗?
答案 0 :(得分:1)
randn
的文档页面显示了以下用于从双变量正态分布生成样本的示例:
mu = [1 2];
sigma = [1 0.5; 0.5 2];
R = chol(sigma);
z = repmat(mu,10,1) + randn(10,2)*R
mu
是您应该设置为适当大小的零向量的平均向量。 sigma
是协方差矩阵,在您的示例中为B^-1
。上面的示例绘制了10个样本,您可以将其更改为您需要的许多样本。另请记住在应用程序中将维度2
更改为N
。
答案 1 :(得分:1)
我认为这就是你要找的东西:
% Number of samples for each variable:
k = 100;
% Your parameters:
mu = [0; 0]; % Vector of Means (0 in your case)
cov = [3 1; 1 3]; % Covariance Matrix (your B)
% Draw the samples...
s = mvnrnd(mu,cov,k);
如果您想手动执行相同的计算(通过生成独立标准正态变量的样本,然后应用适当的转换):
% Number of samples for each variable:
k = 100;
% Your parameters:
mu = [0 0]; % Vector of Means (0 in your case)
cov = [3 1; 1 3]; % Covariance Matrix (your B)
% Draw the samples...
s_ind = randn(k,size(cov,1));
s = repmat(mu,k,1) + (chol(cov) * ind_s);