1

私はmatlabで以下のようなプロットを生成するためのコードを書き込もうとしています(ここから取得):

曲線上に一連の点があります (x_i、y_i、z_i)。各ポイントは、(平均 (x_i,y_i,z_i) と共分散行列 I_3 の) ガウス分布を生成します。私がしたことは、空間を npoint x npoints x npoints にメッシュ化し、各ポイント (x、y、z) の「ソース」 (x_i、y_i、z_i) ごとに確率密度の合計を計算することです。次に、取得した値が十分に大きい場合 (最大密度の 95% など)、ポイントを保持します。それ以外の場合は破棄します。

私のコードの問題は、それが遅すぎて (多くの for ループ)、得られるグラフが以下のように見えないことです:

以下のようなプロットを取得するためのパッケージがあるかどうかを知っている人はいますか?

ここに画像の説明を入力

4

1 に答える 1

1

等値面を使用すると、かなりうまくいくことができます。(あなたが何を望んでいるのか正直わかりませんが、これは近いと思います:

% 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));
于 2013-10-29T09:50:19.943 に答える