4

関数 Z(x,y) に対して Matlab で等高線図を作成する通常の方法は
[X,Y] = meshgrid(-2:.2:2,-2:.2:3);
Z = X.*exp(-X.^2-Y.^2);(たとえば)
contour(X,Y,Z);

ただし、この方法は次の関数 f(x,y) では機能しません:
h_{ij}(x,y) が大きな (たとえば 100x100) 行列であり、各コンポーネントが (自己定義の) 関数であるとします。 x と y の 別の関数を定義します

f(x,y)=det(h_{ij}(x,y))

関数 f(x,y) の等高線図を作成します。

f=det(h) の行列式では、行列 h の各コンポーネントが数値である必要があります。そのため、x と y がベクトルではなく数値である場合にのみ、Matlab で f(x,y) を計算できます。[X,Y]=meshgrid(...) を使用すると、行列 h の各コンポーネントがベクトルであり、f(X,Y) を計算できないことを意味します。

x と y がベクトル値を取ることができない上記の関数 f(x,y) の等高線図を作成する方法はありますか?

4

1 に答える 1

2

hそれぞれが 2 つのスカラー引数を取り、行列 (または関数への任意の有効な入力det)を出力する関数の行列であると事前に定義されていると仮定すると、添字はその引数の X と Y のインデックスを参照しますij次のコードのようなものが機能するはずです (X と Y は h と同じサイズである必要があります)。

applyh = @(fn, x, y) fn(x, y);
[I, J] = meshgrid(1:m, 1:n);
Z = arrayfun(@(i, j) det(applyh(h(i, j), X(i), Y(j))), I, J);

あなたは何をしているのか誤解していると思いますmeshgrid.meshgridの出力は、上記のように関数に簡単に渡すことができます. これらは各要素のベクトルではありません (単なる 2 次元行列)。Zその後、通常どおりにプロットできます。

于 2012-07-19T07:14:39.653 に答える