2012-06-22 17 views
2

當我傳遞一個函數(讓我們稱它爲f)到我的基地功能,基本功能不承認 的f功能,無需使用''引號,下面的代碼:將函數作爲參數傳遞到另一個函數不會使用引號「'進行編譯?

function y = test(a, b, n ,f) 

if (rem(n,2) ~= 0) 
    error ('n is not even') 
end 

% create a vector of n+1 linearly spaced numbers from a to b 
x = linspace (a, b, n+1); 

for i = 1:n+1 
    % store each result at index "i" in X vector 
    X(i) = feval (f, x(i)); 
end 
y=sum(X); 
end 

這是f.m

function [y] = f (x) 
y = 6-6*x^5; 

當我從引號命令行中運行:

>> [y] = test(0,1,10,'f') 

y = 

    52.7505 

,但是當我將其刪除:

>> [y] = test(0,1,10,f) 
Error using f (line 2) 
Not enough input arguments. 

哪裏是我的錯?爲什麼我不能執行[y] = test(0,1,10,f)

由於

+0

嘗試通過@f作爲參數,而不是? – Ansari

+0

你寫的代碼,正如錯誤提示,正試圖評估函數f並將結果傳遞給函數測試。 – Edric

回答

3

功能feval期望函數名(即,字符串)或功能句柄作爲輸入。在您的代碼中,f既不是名稱也不是句柄。調用基本功能test時,請使用字符串'f'或句柄@f

如果在註釋中發佈的函數句柄不允許在調用基本函數的每個賦值中使用,則仍然可以使用函數句柄創建一個包含該函數名稱的字符串。

functionName = func2str(@f); 

test(0,1,10,functionname); 
+0

我不能傳遞'@ f'(賦值規則),我只需要傳遞'f',也許有其他建議? – ron

+1

「分配規則」是什麼意思?傳遞'@ f'是在這裏做的正確的事情。換句話說,'test.m'很好,你需要把它作爲'test(0,1,10,@ f)'來調用。 – Edric

+0

@ron函數句柄通常是禁止的還是僅僅在調用'text()'時? –

2

嘗試通過@f作爲參數,而不是'f',並且也改變

X(i) = f(x(i)); 

的東西是線,僅僅f不是一個函數句柄:此功能是通過功能func2str提供。在這種情況下也不需要使用feval

+0

我不能傳遞'@ f'(賦值規則),我只需要傳遞'f',也許有其他建議?謝謝 – ron

相關問題