MATLAB: Storing a matrix using new variables established by ‘eval’

evalmatrix

I am trying to get a for loop introduce a new variable for every loop using the 'eval' function and store a matrix in the new variable.
elements = 3;
nodes = 2;
phi = [pi / 3,pi-pi/3,0];
for i = 1:elements
eval(['stiffness_' num2str(i) '=zeros(2)'])
eval(['stiffness_' num2str(i) '=[(cos(phi(i)))^2,sin(phi(i)) * cos(phi);sin(phi(i)) * cos(phi(i)),(sin(phi(i)))^2]'])
end
but it's not working. Anyone out there know how to do this?

Best Answer

There were two syntax errors:
  • Extra bracket at the end of the last line.
  • In one of the terms, you forgot to index into phi(i), using instead just "phi".
More importantly, there is a much better way to code this, using cell arrays. (Notice, in my code below, the curly brackets indexing into the variable "stiffness".) Search the documentation for "cell array" for details. You'll be glad you did.
elements = 3;
nodes = 2;
phi = [pi / 3,pi-pi/3,0];
for i = 1:elements
stiffness{i}=zeros(2)
stiffness{i}=[cos(phi(i))^2,sin(phi(i)) * cos(phi(i));sin(phi(i)) * cos(phi(i)),sin(phi(i))^2]'
end
There is also a good explanation here: