# Saving all output of for loop

14 views (last 30 days)
Tchilabalo on 12 May 2019
Commented: madhan ravi on 16 May 2019
for i=1:1500
X1=J(i)-sqrt((D(i)^2)/((sqrt(A(i))+1)))
Y1=I(i)-A(i)*(J(i)-X1)
X2=J(i)+sqrt((D(i)^2)/((sqrt(A(i))+1)))
Y2=I(i)+A(i)*(X2-J(i))
end
coord=[X1(:),Y1(:),X2(:),Y2(:)]
%coord
writematrix(coord,'Coord_15.csv')
I am trying to save the coordinates (X1, X2, Y1,Y2) from a for loop as shown in the code above. All inputs (I, J, A, D) are columns vectors , but i only the last iteration is saved. I will appreciate any help.

Sulaymon Eshkabilov on 12 May 2019
Hi,
Simply add (i) after your output variables, viz. X1, Y1, X2, Y2:
for i=1:1500
X1(i)=J(i)-sqrt((D(i)^2)/((sqrt(A(i))+1)))
Y1(i)=I(i)-A(i)*(J(i)-X1)
X2(i)=J(i)+sqrt((D(i)^2)/((sqrt(A(i))+1)))
Y2(i)=I(i)+A(i)*(X2-J(i))
end
coord=[X1(:),Y1(:),X2(:),Y2(:)]
%coord
writematrix(coord,'Coord_15.csv')
Good luck

Show 1 older comment
Tchilabalo on 13 May 2019
Thanks for your answer. I have tried your suggestion but i am getting this error message: "Unable to perform assignment because the left and right sides have a different number of elements".
madhan ravi on 16 May 2019
Then why did you accept the answer if it doesn’t solve the problem??
Sulaymon Eshkabilov on 16 May 2019
Before commenting any point verify what you have stated. That is the correct answer. Vectorization is another solution.

madhan ravi on 12 May 2019
Edited: madhan ravi on 16 May 2019
You don't need a loop , this is straight forward just vectorize your code:
Note: The other answer doesn‘t show the importance of preallocation.
X1=J-sqrt((D.^2)./((sqrt(A)+1)));
Y1=I-A.*(J-X1);
X2=J+sqrt((D.^2)./((sqrt(A)+1)));
Y2=I+A.*(X2-J);
coord=[X1(:),Y1(:),X2(:),Y2(:)];
writematrix(coord,'Coord_15.csv')

Stephen Cobeldick on 16 May 2019
+1 simple and efficient
madhan ravi on 16 May 2019
Thank you Stephen.