1
假設您想要使用MATLAB中定義的函數序列,並且只需將這些函數的名稱作爲字符串變量。假設您已經創建了fun1
,fun2
,...,funN
,並且您還有一個字符串向量,如['fun1','fun2',...,'funN']
。如何自動調用每個函數而不必強制每個函數的名稱逐一寫入?如何通過將其名稱作爲字符串來使用函數
假設您想要使用MATLAB中定義的函數序列,並且只需將這些函數的名稱作爲字符串變量。假設您已經創建了fun1
,fun2
,...,funN
,並且您還有一個字符串向量,如['fun1','fun2',...,'funN']
。如何自動調用每個函數而不必強制每個函數的名稱逐一寫入?如何通過將其名稱作爲字符串來使用函數
使用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
似乎對我來說功能手柄將是一條路。 – beaker
您可以使用'feval'來調用函數,但爲什麼函數名稱在字符串中?可能值得告訴我們你想要完成什麼,這樣我們可以幫助你想出更好的選擇。通常你只想存儲一個函數句柄的數組或者其他東西 – Suever
我有近五十個函數,我需要運行一個代碼並且通過它們中的每一個進行一些計算,主要是關於微分方程和ode45函數。每次更改函數時,我都不想更改我的代碼。我生成了一個字符串,以便以更一般的方式編寫根代碼,並且每次都會在開始處設置'N = ...'。 –
對,但爲什麼你有50個函數名稱爲'fun1','fun2'等?也許你應該有一個功能,你有一些額外的輸入來修改它的行爲,而不是跟蹤50個函數。 – Suever