使用meshgrid获取二元正态分布的特征函数的值

时间:2014-12-13 12:41:18

标签: matlab

我正在尝试在Matlab中使用meshgrid“function”来生成二元正态分布的特征函数phi的值。目前我正在使用两个for循环来执行此操作。

for i = 1:M
   for j = 1:M
   U = [u1(i); u2(j)];
   phi(i,j) = exp(-1i*mu*U-0.5*U'*SIGMA*U); 
   end
end

这里u1和u2是跨越空间的两个向量,其值可以是phi。但是,这个双重for循环是非常耗时的,我想使用meshgrid方法来做到这一点。

U = meshgrid(u1,u2);
PHI = exp(-1i*mu*[U1(:) U2(:)]-0.5*[U1(:) U2(:)]'*SIGMA.*[U1(:) U2(:)]);

我正在尝试使用上面的代码执行此操作。但由于mu和[U1(:) U2(:)]的不同尺寸,这绝对不起作用。有没有人知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

[U1, U2] = meshgrid(u1,u2);
U = [U1(:) U2(:)]';
PHI = reshape(exp(-1i*mu*U-0.5*sum(U.*(SIGMA*U),1)),M,M).';

PS:在这种情况下,使用ndgrid似乎也是preferable to meshgrid,因为之后我们不需要转置。

[U1, U2] = ndgrid(u1,u2);
U = [U1(:) U2(:)]';
PHI = reshape(exp(-1i*mu*U-0.5*sum(U.*(SIGMA*U),1)),M,M);

答案 1 :(得分:0)

通过写出矩阵乘法来解决它:

    [U1,U2]= meshgrid(u1,u2);
PHI = exp(-1i.*(mu_adj(1)*U2+mu_adj(2)*U1)...
    -0.5*(SIGMA(1,1)*U2.^2+(SIGMA(2,1)+SIGMA(1,2))*U1.*U2+SIGMA(2,2)*U1.^2));