2013-05-26 65 views
3

我想繪製一個使用等值線圖的球函數,但我不斷收到以下錯誤。Matlab中球函數等高線圖輸入錯誤

??? 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軸。

如何消除錯誤?

+0

你已經定義了你的函數帶1個參數,但你傳遞了2 ... –

+0

這就是函數應該如何定義的。如果我通過一個,比如說 z = sphere(X1),我仍然有這個錯誤: 「Z必須是2x2或更大的尺寸」。 – user2179716

+0

@OliCharlesworth,應該如何定義函數。如果我通過一個,說z =球體(X1),我仍然有這個錯誤:「Z必須是2×2或更大的尺寸 – user2179716

回答

1

問題是您的sphere函數中的sum。雖然X1X225x25矩陣,ph25x1載體。試試這個:

function ph = sphere(x) 

ph = x.*x; 

在這種情況下,你的價值ph將是相同的dimenion爲網格變量。

編輯

如果您使用更新方法:

Z = arrayfun(@sphere, X1); 

你會得到不斷線,因爲你只是傳遞X1您spheres功能。其中,在這種情況下是相同的:

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

爲了得到一個球,你想傳遞兩個參數,X1X2

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

而且撥打:

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

如果你打電話給你的修改函數,你會得到這個結果:

enter image description here

編輯2

注意:如果你在你的腳本中使用sphere別的地方,你必須更新每次調用它包括兩個輸入參數。

編輯3

根據如何仔細您實現這個代碼,我建議不要使用sphere作爲一個函數的名稱,因爲Matlab's own function with that name

+0

我認爲它現在正在工作,我使用這種說法: Z = arrayfun(@sphere,X1) ; – user2179716

+0

如果我編輯球體函數採取兩個參數,這行代碼將無法正常工作: eval = sphere(pop); – user2179716

+0

讓我給你發送包含該部分的代碼 – user2179716