蒙特卡罗:单位磁盘和更高维度的重要性采样

时间:2015-12-15 10:04:41

标签: matlab optimization random sampling montecarlo

我正在蒙特卡罗的重要抽样工作。提供了以下代码:

    clear dim=2;power=3;const1=?;const2=?;N=10^5;

       X=(rand(dim,N).^power);
       %creates a random sample of N vectors of dimension 2
       %the coordinates of these vectors are not uniformly
       %random: they have P(coordinate<a)=a^(1/3)

    Density=prod(const1*X.^(const2)); 
    Sample=(sum(X.^2)<1);
    %count the number of vectors < 1 

    ISSample=Sample./Density*4; 
    aM=mean(ISSample);
    bM=std(ISSample); 
    [aM-1.96*bM/sqrt(N),aM+1.96*bM/sqrt(N)]

问题是双重的:

如何查找常量,以及如何使其在更高维度上工作。 我一直在研究这个问题,但我似乎无法控制重要性抽样。我预计当样本以第三个幂产生时,常数2也将在第三个幂中,但是这给出了具有虚数的置信区间。任何有关我应该采取的方向的帮助将不胜感激!

此致 杰夫

1 个答案:

答案 0 :(得分:0)

好的,我现在不会写任何代码,我的Matlab太生锈了。但这是一般的想法。

您的采样在单位磁盘上是均匀的,并采用拒绝方法完成。实际上,它可能分为两个问题。一个是单位圆上的点的采样。其次,是根据某些幂律对半径进行采样。

让我们从半径采样开始。很容易看出,由于雅可比二维情况下径向分布与r*dr成正比,可以采样为

r = sqrt(U(0,1)); % or
r = pow(U(0,1), 1/2);

如果由雅可比PDF导致的3D与r^2*dr成比例,可以采样为

r = pow(U(0,1), 1/3);

一般来说,nD情况有一个明显的结论,即半径可以采样为

r = pow(U(0,1), 1/n);

好的,现在我们应该在3D情况下选择单位球面上的点,或者在更高尺寸的情况下在单位超球面上选择点,将其乘以半径并在球体/超球面内均匀获得点

为了对球体上的点进行采样,我建议从

中选择Marsaglia方法

http://mathworld.wolfram.com/SpherePointPicking.html

为了对超球面上的点进行采样,我建议从

中选择类似的方法

http://mathworld.wolfram.com/HyperspherePointPicking.html