# MATLAB: cell arrays of function handles

1. Apr 23, 2010

### mikeph

Hello

I am trying to store function handles in an array. First attempt was to do something like the following:

Code (Text):
for i = 1:5
r(i) = @(x) [grid(i) - x(1)*(x(2) + value(i))];
end
So I would store 5 function handles, each one using the <5x1> vectors "grid" and "value". Result:

Nonscalar arrays of function handles are not allowed; use cell arrays instead.

Next I try preallocating r as a cell (r = cell(1,5)). Result:

Conversion to cell from function_handle is not possible.

Basically I am having a lot of trouble with the cell arrays and function handles and I don't really know enough about them to be able to interpret the error messages as useful information.

Can anyone see what I'm doing wrong?

---

Also, I am confused about function handles with more than one argument. Here I am using two (x(1) and x(2)), but when I type feval(r(1),2,3) to evaluate r(1) at x = [2,3] it says "Index exceeds matrix dimensions."!

Eventually I want to define a function handle with arbitrarily large number of arguments, so r(i) will vary for i=1:100 or so, and then a function all = @(x) [r(1); r(2); ... r(100);], to be able to evaluate all these functions at once. But that seems like a long way away right now.

Thanks,
Mike

2. Apr 23, 2010

### matonski

I'm not quite sure what you want, but this does give something for me:

grid = 1:5;
value= 1:5;

for i = 1:5
r{i} = @(x) [grid(i) - x(1)*(x(2) + value(i))];
end

r{1}([2 3])

note the curly braces after the r

3. Apr 26, 2010

### mikeph

Thanks, this has given me a good starting point.

I now have a load of function handles stored in an array, but I want to put them all into a single one.

I am trying to manipulate my functions into the format accepted by a complicated MATLAB algorithm which takes a set of equations in a single function handle.

So I naturally try to put these into the function like this:

Code (Text):
r_total = @(x) [r{1}; r{2}; r{3}; r{4}; r{5}];
>> r_total([1 2])
[COLOR="Red"]??? Error using ==> vertcat
Nonscalar arrays of function handles are not allowed; use cell arrays