4

我们知道在 Matlab 中为函数 Z(x,y) 绘制等高线图的常用方法是
[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 的每个分量都是一个数字。所以 f(x,y) 只有当 x 和 y 是数字而不是向量时才能由 Matlab 计算。如果我们使用[X,Y]=meshgrid(...),则表示矩阵h的每个分量都是一个向量,而f(X,Y)无法计算。

有没有办法为上述函数 f(x,y) 制作等高线图,其中 x 和 y 不能取向量值?

4

1 回答 1

2

假设它h被预定义为一个函数矩阵,每个函数接受两个标量参数并输出一个矩阵(或det函数的任何有效输入),以及下标ij引用该参数的 X 和 Y 中的索引函数,类似下面的代码应该可以工作(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 的输出可以很容易地输入到上面的函数中。它们不是每个元素中的向量(只是一个二维矩阵)。然后,您可以Z像往常一样绘制。

于 2012-07-19T07:14:39.653 回答