2017-01-22 38 views
1

假設您想要使用MATLAB中定義的函數序列,並且只需將這些函數的名稱作爲字符串變量。假設您已經創建了fun1fun2,...,funN,並且您還有一個字符串向量,如['fun1','fun2',...,'funN']。如何自動調用每個函數而不必強制每個函數的名稱逐一寫入?如何通過將其名稱作爲字符串來使用函數

+1

您可以使用'feval'來調用函數,但爲什麼函數名稱在字符串中?可能值得告訴我們你想要完成什麼,這樣我們可以幫助你想出更好的選擇。通常你只想存儲一個函數句柄的數組或者其他東西 – Suever

+0

我有近五十個函數,我需要運行一個代碼並且通過它們中的每一個進行一些計算,主要是關於微分方程和ode45函數。每次更改函數時,我都不想更改我的代碼。我生成了一個字符串,以便以更一般的方式編寫根代碼,並且每次都會在開始處設置'N = ...'。 –

+2

對,但爲什麼你有50個函數名稱爲'fun1','fun2'等?也許你應該有一個功能,你有一些額外的輸入來修改它的行爲,而不是跟蹤50個函數。 – Suever

回答

6

使用str2func。當然,如果函數被定義爲函數句柄(例如fun1 = @(x)x+x.^2+sqrt(x))),那麼可以跳過下面的str2func步驟。

strList= {'sum','mean','max','min'}; 
funList = cellfun(@str2func,strList,'uniformOutput',false); 

nFunctions = length(funList); 
data = rand(10,1); 
results = zeros(nFunctions,1) 

for iFunction = 1:nFunctions 
    results(iFunction) = fulList{iFunction}(data); 
end 
+0

似乎對我來說功能手柄將是一條路。 – beaker

相關問題