使用triplequad计算密度(在Matlab中)

时间:2012-03-16 12:56:24

标签: matlab integration distribution

正如我之前在question中所解释的那样:我有一个由三维欧几里德空间中的大型半随机点集合组成的数据集。在这个点集合中,我试图找到最接近点密度最高的区域的点。

high performance mark回答;

  

最直接的做法是划分你的子集   欧几里德空间分为许多小单位体积(体素)和数量   每个人有多少分。点数最高的体素   是点密度最高的地方。也许最初   将您的空间划分为2 x 2 x 2体素,然后选择体素   最多的点和细分,反过来,直到你的标准   满意。

Mark建议我使用triplequad,但这不是我熟悉的功能,也不是很了解。有没有人有任何关于我如何在Matlab中使用此函数的指示我想要做什么?


例如,假设我有一个随机正态分布矩阵A = randn([300,300,300]),我如何使用triplequad找到我要找的点?因为据我所知,我在使用时还必须为triplequad提供函数fun。这个问题应该是哪个函数?

1 个答案:

答案 0 :(得分:2)

这是一个不使用triplequad的答案。

为了说明的目的,我定义了一个这样的数据数组:

A = rand([30,3])*10;

这使得我在框(0:10,0:10,0:10)中均匀分布了30个点。请注意,在此说明中,3D空间中的点由A中的每一行表示。现在为每个体素中的点数定义一个3D数组:

counts = zeros(10,10,10)

这里我选择了一个10x10x10的体素阵列,但这只是为了方便,在每个维度中选择一些其他数量的体素只会有点困难,而且没有必要沿每个轴是相同数量的体素。然后代码

for ix = 1:size(A,1)
   counts(ceil(A(ix,1)),ceil(A(ix,2)),ceil(A(ix,3))) = counts(ceil(A(ix,1)),ceil(A(ix,2)),ceil(A(ix,3)))+1
end

将计算counts中每个体素中的点数。

修改

不幸的是,今天下午我必须做一些工作,直到稍后才能回到triplequad解决方案。希望在此期间这是可以的。