How to evaluate a cell of function handles?

98 views (last 30 days)
Max
Max on 18 Jan 2016
Commented: Max on 21 Jan 2016
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).

Accepted Answer

Kirby Fears
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.
  1 Comment
Max
Max on 21 Jan 2016
Hey Kirby, thnx for your solution. Now, it works very well. That´s exactly what I was searching for.

Sign in to comment.

More Answers (1)

Rebecca Krosnick
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.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!