How to evaluate a cell of function handles?
25 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi,
suppose that we have cell arrays of function handles Rnum, for example:
fnum=matlabFunction(y);
Fnum=@(x)integral(fnum,0,x);
Rnum{i,:}=@(x) exp(-(Fnum(x)).^beta_hat(i,:));
with i-number of different beta_hats. y is a function which consists of i-number of symbolic variables.
Now, I would like to evaluate all functions at the points: x = 0:100:4000.
Does anyone know how it works?
PS: If I do it for only one point x = 400, I can use the following code which works very well: cellfun(@(c) c(x),Rnum).
0 Kommentare
Akzeptierte Antwort
Kirby Fears
am 20 Jan. 2016
Max,
If your function handles can accept an array of x values and return an array of results, then your current implementation works fine. It would look like this:
x = 0:100:4000;
resultsCell = cellfun(@(c) c(x),Rnum,'UniformOutput',false);
Otherwise you can use arrayfun or a loop to go over the different x values. A loop might actually be easier to read:
x = 0:100:4000;
resultCell = cell(numel(x),1);
for xval = 1:numel(x),
resultCell{xval} = cellfun(@(c) c(x(xval)),Rnum);
end
The arrayfun approach would look like this:
resultCell = ...
arrayfun(@(xval) cellfun(@(c) c(xval),Rnum),x,'UniformOutput',false);
Hope this helps.
Weitere Antworten (1)
Rebecca Krosnick
am 20 Jan. 2016
Using the "cellfun" function as you have pointed out is a good way to apply a function to each cell in a cell array.
If you would like to call the function on multiple input points x, then you should either call "cellfun" for each x value, or change your implementation of your function c such that it will take as an argument the vector 0:100:4000 and produces the appropriate results.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!