6

次のコードを使用すると、単一の 2D ガウス関数のプロットを描画できます。

x=linspace(-3,3,1000);
y=x';               
[X,Y]=meshgrid(x,y);
z=exp(-(X.^2+Y.^2)/2);
surf(x,y,z);shading interp

これは生成されたプロットです:

ここに画像の説明を入力

ただし、これらの 2D ガウスの指定された数 x を持つグリッドをプロットしたいと思います。次の図は、作成したいプロットの上図と考えてください (特に、グリッドは 5x5 2D ガウスで構成されています)。各ガウスは、ガウスが負の場合は z 軸の負の値 (下のグリッドの黒い点) を指し、正の場合は上の画像のようになるような係数で重み付けする必要があります (下のグリッドの白い点)。 .

ここに画像の説明を入力

いくつかの数学的な詳細を提供しましょう。グリッドは、次の式のように合計された 2D ガウス分布の混合に対応します。

ここに画像の説明を入力

各ガウスには独自の平均と偏差があります。

混合物の各ガウス分布は、互いに等距離になるように、決定された (X,Y) 座標に配置する必要があることに注意してください。たとえば、(0,0) の中央のガウス分布を考えると、他のものは (-1,1) (0,1) (1,1) (-1,0) (1,0) (-1, -1) (0,-1) (1,-1) 次元が 3x3 のグリッドの場合。

そのようなプロットをどのように行うことができるかを教えて (そして説明して) もらえますか? 助けてくれてありがとう。

4

1 に答える 1

5

確かにあなたは自分自身を言った、置く(手段のための例として)

[X,Y]=meshgrid(x,y);  % //mesh

g_centers = -3:3;    
[x_g,y_g] = meshgrid(g_centers,g_centers); % //grid of centers (coarser)
mu = [x_g(:) , y_g(:)];  % // mesh of centers in column


z   = zeros(size(X));
for i = 1:size(mu,1)
     z= z + exp(-((X-mu(i,1)).^2+(Y-mu(i,2)).^2)/( 2* .001) );
end
surf(X,Y,z);shading interp

ここに画像の説明を入力

于 2012-12-01T11:14:13.727 に答える