How to evaluate a cell of function handles?
25 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Kirby Fears
on 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.
More Answers (1)
Rebecca Krosnick
on 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 Comments
See Also
Categories
Find more on Matrix Indexing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!