2016-12-02 58 views
5

匿名函數我創建了一個匿名函數處理這樣:情節沒有明確的變量名

f = @(x,y)sqr(x)+sqr(y) 

這是兩個變量xy一個球體。這似乎工作,因爲我可以調用類似

f(2,3) 

和MATLAB給了我正確的結果ans = 13

在最後一步中,我想將這個函數從-7到7繪製爲xy。所以我打電話

fmesh(f,[-7 7]) 

並彈出正確的數字。到現在爲止還挺好。

由於種種原因,我不想在這裏指定,我現在要編輯的功能句柄這樣的:

f = @(x)sqr(x(1))+sqr(x(2)) 

這應該是相同的領域,但這次用2個變量x(1)x(2)。 由於函數現在想要一個數組作爲參數我編輯的測試呼叫

f([2,3]) 

,它仍然給了我正確的結果ans = 13

但是,這裏是問題:你如何繪製想要數組作爲參數的函數? 與之前相同的網格命令當然會失敗,因爲[-7,7]的維數不正確。 [[-7 7] [-7 7]][[-7 7];[-7 7]]也是如此。

如何從該新功能手柄中獲得工作情節? 在此先感謝!

+1

你不能真正做到這一點。你可以在接受兩個輸入的另一個匿名函數中包裝'f'並創建一個:'g = @(x,y)f([x,y])' – Suever

回答

4

您無法獲得fmeshxy的值作爲您所期望的數組傳遞。 可以做的是將您的匿名函數f包裝在另一個匿名函數中,該函數只需重新排列輸入。

g = @(x,y)f([x, y]); 
fmesh(g, [-7 7]) 

一個更廣義的解決方案,它需要所有的輸入,並將它們放入一個數組將

g = @(varargin)f([varargin{:}])