高斯概率围绕轨迹绘制

时间:2013-10-28 20:55:45

标签: matlab plot gaussian

我正在尝试编写一些代码来生成类似于下面的matlab图(取自here):

我在曲线上有一组点(x_i,y_i,z_i)。每个点产生高斯分布(均值(x_i,y_i,z_i)和协方差矩阵I_3)。 我所做的是将空间网格划分为n点x n点x n点,并计算每个点(x,y,z)中每个“源”(x_i,y_i,z_i)的概率密度之和。然后,如果我得到的值足够大(比如最大密度的95%),我保持这一点。否则我丢弃它。

我的代码的问题是它太慢了(很多用于循环)而且我得到的图形看起来不像下面那样:

有谁知道是否有一个包来获得类似下面的情节?

enter image description here

1 个答案:

答案 0 :(得分:1)

使用isosurface我们可以做得相当好。 (虽然我不确定你想要什么,但我认为这很接近:

% Create a path
points = zeros(10,3);
for ii = 2:10
    points(ii, :) = points(ii-1,:) + [0.8 0.04 0] + 0.5 * randn(1,3);
end

% Create the box we're interested in
x = linspace(-10,10);
y = x;
z = x;
[X,Y,Z] = meshgrid(x,y,z);

% Calculate the sum of the probability densities(ish)
V = zeros(size(X));
for ii = 1:10
    V = V + 1/(2*pi)^(3/2) * exp(-0.5 * (((X-points(ii,1)).^2 + (Y-points(ii,2)).^2 + (Z-points(ii,3)).^2)));
end

fv = isosurface(X,Y,Z,V, 1e-4 * 1/(2*pi)^(3/2), 'noshare');
fv2 = isosurface(X,Y,Z,V, 1e-5 * 1/(2*pi)^(3/2), 'noshare'); 
p = patch('vertices', fv.vertices, 'faces', fv.faces);
set(p,'facecolor', 'none', 'edgecolor', 'blue', 'FaceAlpha', 0.05)
hold on;
p2 = patch('vertices', fv2.vertices, 'faces', fv2.faces);
set(p2,'facecolor', 'none', 'edgecolor', 'red', 'FaceAlpha', 0.1)
scatter3(points(:,1), points(:,2), points(:,3));