如何在matlab中从精度参数化的多元高斯分布中提取样本
我想知道如何在matlab中绘制样本,在这里我有精度矩阵和平均值作为输入参数 我知道mvnrnd是一种典型的方法,但它需要协方差矩阵(即精度的倒数)作为参数如何在matlab中从精度参数化的多元高斯分布中提取样本,matlab,matrix,probability,Matlab,Matrix,Probability,我想知道如何在matlab中绘制样本,在这里我有精度矩阵和平均值作为输入参数 我知道mvnrnd是一种典型的方法,但它需要协方差矩阵(即精度的倒数)作为参数 我只有精度矩阵,由于计算问题,我无法反转精度矩阵,因为它会花费太长的时间(我的维数约为2000*2000)好问题。请注意,您可以使用标准正态分布中的样本,通过中描述的过程从多变量正态分布生成样本 基本上,这归结为评估A*z+mu,其中z是从标准正态分布中采样的独立随机变量向量,mu是均值向量,A*A'=Sigma是协方差矩阵。由于你有后一个
我只有精度矩阵,由于计算问题,我无法反转精度矩阵,因为它会花费太长的时间(我的维数约为2000*2000)好问题。请注意,您可以使用标准正态分布中的样本,通过中描述的过程从多变量正态分布生成样本 基本上,这归结为评估
A*z+mu
,其中z
是从标准正态分布中采样的独立随机变量向量,mu
是均值向量,A*A'=Sigma
是协方差矩阵。由于你有后一个量的倒数,即inv(Sigma)
,你可能可以进行Cholesky分解(参见)来确定a的倒数。然后需要计算A*z
。如果您只知道inv(A)
,则仍然可以通过求解线性系统(例如,通过反斜杠操作符)而不执行矩阵求逆
Cholesky分解对您来说可能仍然有问题,但我希望这会有所帮助。如果您想从N(μ,Q-1)中采样,并且只有Q可用,您可以对Q,L进行Cholesky分解,这样LLT=Q。接下来从标准正态分布N(0,I)中取LT,L-T和样本Z的倒数
考虑到L-T是上三角dxd矩阵,Z是d维列向量,
μ+L-TZ将以N(μ,Q-1)的形式分布
如果你不想取L的逆,你可以用反代换法解三角方程组LTv=Z。μ+v随后将被分配为N(μ,Q-1)
一些示例性matlab代码:
%制作2x2协方差矩阵和平均向量
covm=[30.4*(sqrt(3*7));0.4*(sqrt(3*7))7]
mu=[100;2]
%得到精度矩阵
Q=投资(covm)
%取Q的Cholesky分解(matlab中的chol已经返回上三角因子)
L=chol(Q)
%从标准的二元正态分布中抽取2000个样本
Z=正常值(0,1[22000])
%求解系统并添加平均值
X=repmat(mu,12000)+L\Z
%检查结果
平均值(X′)
var(X′)
柯柯夫(X’)
%与协方差矩阵中的采样进行比较
Y=mvnrnd(mu,covm,2000年)
平均值(Y')
var(Y′)
柯柯夫(Y′)
散射(X(1,:),X(2,:),'b')
等一下
散射(Y(1,:),Y(2,:),'r')
为了提高效率,我想你可以搜索一些能有效求解三角系统的软件包。你能扩展这部分的数学吗,“如果你只知道inv(A),这仍然可以通过求解线性系统(例如,通过反斜杠操作符)而不执行矩阵求逆来实现”这样它就可以被其他语言模仿了?