MATLAB: Automatically creating an array of variables and assigning to a function with changing number of outputs

array of variablesevalMATLAB

I am writing a script that creates an array (A) of vectors. The value of each vector is the set subscripts that describe it's position within the array. eg, for a three dimensional square array with side length 4:
A{1} = [1,1,1]
A{4} = [4,1,1]
A{9} = [1,1,3]
Each vector is then passed to another function which calculates my final result. eg,
results(i)=myfunction(A(i))
Im trying to automate the first stage, ie, assigning the value of the vector A{i} to be its subscript place within A. This will be variable on both the number of dimensions that A has and the side length (the sides are always the same length).
The method I have devised involves using ind2sub(). The number of outputs from in2sub is dependent on the dimensionality of the input matrix. To overcome this I am creating a character array with a variable for each dimension of A. eg for 3 dimensions.
vector_name='[x,y,z]';
and then concatenate it with the string '=ind2sub(size(results),i)' :
command_sting=strcat(vector_name,'ind2sub(size(results),i)')
so for my 3 dimension example command_string would store the character array:
command_string=
'[x,y,z]=ind2sub(size(results),i)'
I am then trying to use eval() to evaluate this statement but I get an error message:
eval(command_string)
Index exceeds matrix dimensions.
However if I type what is stored in command_string straight into the command line I do get the right result:
i=1
[x,y,z]=ind2sub(size(results),i)
x =
1
y =
1
etc.
Why is the eval(command _string) not working? If anyone has a more elegant solution than this use of eval() I'd be grateful to hear it.

Best Answer

You don't need to use eval to cope with varying number of outputs. Use cell arrays and their implicit conversion to comma-separated lists:
indices = cell(1, ndims(results)); %create a cell array the right size
[indices{:}] = ind2sub(size(results), someindex); %assign c-s-l output to cell array
indexvector = [indices{:}]; %convert cell array to vector.