2012-07-19 80 views
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);如何在matlab中爲x和y不能取矢量值的自定義函數f(x,y)繪製輪廓圖?

然而,這種方式不適合工作函數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不能取矢量值?

+0

我誤解了'meshgrid'在我問這個問題時做了什麼。我應該修改問題「如何在matlab中爲用戶定義函數f(x,y)繪製輪廓圖,其中x和y不能取MATRIX值?」答案是使用'arrayfun'作爲'Z = arrayfun(@ f,X,Y)',我從http://stackoverflow.com/questions/3784059/contour-plot-a-custom-function?rq = 1。 – renphysics 2012-07-20 03:44:44

+0

這正是我的答案所暗示的:)如果有用,請接受答案。 – Ansari 2012-07-20 06:28:04

回答

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那樣 - 輸出如上所述,網格可以很容易地輸入到函數中。它們不是每個元素中的向量(只是一個2-D矩陣)。然後,您可以像往常一樣繪製Z

相關問題