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 = 1etc.
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