Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在matlab中从精度参数化的多元高斯分布中提取样本_Matlab_Matrix_Probability - Fatal编程技术网

如何在matlab中从精度参数化的多元高斯分布中提取样本

如何在matlab中从精度参数化的多元高斯分布中提取样本,matlab,matrix,probability,Matlab,Matrix,Probability,我想知道如何在matlab中绘制样本,在这里我有精度矩阵和平均值作为输入参数 我知道mvnrnd是一种典型的方法,但它需要协方差矩阵(即精度的倒数)作为参数 我只有精度矩阵,由于计算问题,我无法反转精度矩阵,因为它会花费太长的时间(我的维数约为2000*2000)好问题。请注意,您可以使用标准正态分布中的样本,通过中描述的过程从多变量正态分布生成样本 基本上,这归结为评估A*z+mu,其中z是从标准正态分布中采样的独立随机变量向量,mu是均值向量,A*A'=Sigma是协方差矩阵。由于你有后一个

我想知道如何在matlab中绘制样本,在这里我有精度矩阵和平均值作为输入参数

我知道mvnrnd是一种典型的方法,但它需要协方差矩阵(即精度的倒数)作为参数


我只有精度矩阵,由于计算问题,我无法反转精度矩阵,因为它会花费太长的时间(我的维数约为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),这仍然可以通过求解线性系统(例如,通过反斜杠操作符)而不执行矩阵求逆来实现”这样它就可以被其他语言模仿了?