3

等高線図を使用して球関数をプロットしようとしていますが、次のエラーが発生し続けます。

??? Error using ==> Z must be size 2x2 or greater.

エラーは次のコード行にあります。

contour(X1, X2, Z);

球関数は次のとおりです。

function ph = sphere(x)
         ph = sum(x.*x, 2);
end

等高線図を使用して球をプロットするコードは次のとおりです。

min = -25;
max = 25;
h = 25;
c= linspace(min, max, h); % Create the mesh
[X1, X2] = meshgrid(c, c); % Create the grid

Z = sphere(X1,X2);

figure;
icontour(X1, X2, Z);

Z が少なくとも 2x2 行列を返すことを期待しています。Z は球の高さ、X1 は x 軸、X2 は y 軸です。

どうすればエラーを解消できますか?

4

1 に答える 1

1

問題はsumあなたのsphere機能にあります。X1X225x25行列ですがph、 は25x1ベクトルです。これを試して:

function ph = sphere(x)

ph = x.*x;  

この場合、値phはグリッド変数と同じ次元になります。

編集

更新されたアプローチを使用する場合:

Z = arrayfun(@sphere, X1);

X1 を関数に渡すだけなので、一定の行が得られますspheres。その場合、次と同じです。

ph = sum(x.^2,2);  

球体を取得するには、両方の引数を渡す必要がありX1ますX2

function ph = sphere(x1,x2)
     ph = sum(x1.*x2, 2);
end  

そして呼び出します:

Z = arrayfun(@sphere, X1, X2);

変更した関数をそのように呼び出すと、次の結果が得られます。

ここに画像の説明を入力

編集 2

注意: スクリプト内の別の場所を使用している場合はsphere、スクリプトへの各呼び出しを更新して、2 つの入力引数を含める必要があります。

編集 3

このコードをどれだけ慎重に実装するかに応じて、関数の名前として使用しないことをお勧めします。これは、その名前を持つ Matlab 独自の関数のsphereためです。

于 2013-05-26T17:10:01.377 に答える