如何在matlab中为自定义函数f(x,y)绘制等高线图,其中x和y不能取向量值



我们知道,在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的每个分量都是一个数。因此,只有当x和y是数字而不是矢量时,f(x,y)才能通过Matlab计算。如果我们使用[X,Y]=meshgrid(…),这意味着矩阵h的每个分量都是一个向量,并且f(X,Y)无法计算。

有没有一种方法可以为上面的函数f(x,y)绘制等高线图,其中x和y不能取向量值?

假设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的作用——网格的输出可以很容易地输入到上面的函数中。它们不是每个元素中的向量(只是一个2-D矩阵)。然后可以像往常一样绘制Z

最新更新