# how to store each for loop iteration output in a row of a matrix and then eventually get the full matrix for all iterations?

5 views (last 30 days)

Show older comments

hello, I have the variables ax,ay,az and r that for each iteration they give different output and should be stored in a atrix and eventually we need each row of that matrix to describe one iteration from the loop, I keep getting the error that says 'Error in receiver_location3 (line 45) H(i)=[ax ay az 1];

so baisiclly we need to find the ax,ay,az and r store them in a row vector and then somhow store that row vector from each iteration in a bigger matrix contaning all the iterations output. so anyone has any idea how to do that?

I attach below the code I am working on, there might be some lines in the code that are not related but just to make the bigger picture clear

for S=1:length(data3)

if(data3(S,6)>15)

newdata(i,:)=data3(S,:);

i=i+1;

end

end

while N<length(newdata)

for r=1:length(newdata)

if(SecOfDay==newdata(r,1))

counter_1=counter_1+1;

end

xs=newdata(N:counter_1,3);

ys=newdata(N:counter_1,4);

zs=newdata(N:counter_1,5);

dist=newdata(N:counter_1,6);

end

Fun = @(u) [sqrt((xs-u(1)).^2 + (ys-u(2)).^2 + (zs-u(3)).^2) - (c*u(4)) - (dist)];

x0 = [0;0;0;0];

u = lsqnonlin(Fun,x0);

SecOfDay=SecOfDay+30;

X=u(1);

Y=u(2);

Z=u(3);

e=u(4);

r= sqrt((xs-X).^2-(ys-Y).^2-(zs-Z).^2);

ax= (xs-X)/r;

ay=(ys-Y)/r;

az=(zs-Z)/r;

H(i)=[ax ay az 1];

N=counter_1+1;

for j=1:length(newdata)

H_j=[ax(j) ay(j) az(j) 1];

end

##### 1 Comment

Aakash Deep Chhonkar
on 19 Jul 2021

### Answers (3)

Markus
on 19 Jul 2021

I put your code in the code environment to get a clearer view:

for S=1:length(data3)

if(data3(S,6)>15)

newdata(i,:)=data3(S,:);

i=i+1; % i= previously defined? - now prev. i+amount of true if-cases

end

end

while N<length(newdata)

for r=1:length(newdata)

if(SecOfDay==newdata(r,1))

counter_1=counter_1+1;

end

xs=newdata(N:counter_1,3);

ys=newdata(N:counter_1,4);

zs=newdata(N:counter_1,5);

dist=newdata(N:counter_1,6);

end

Fun = @(u) [sqrt((xs-u(1)).^2 + (ys-u(2)).^2 + (zs-u(3)).^2) - (c*u(4)) - (dist)];

x0 = [0;0;0;0];

u = lsqnonlin(Fun,x0);

SecOfDay=SecOfDay+30;

X=u(1);

Y=u(2);

Z=u(3);

e=u(4);

r= sqrt((xs-X).^2-(ys-Y).^2-(zs-Z).^2);

ax= (xs-X)/r;

ay=(ys-Y)/r;

az=(zs-Z)/r;

H(i)=[ax ay az 1]; % i is now at the value from the first for-loop

You are working with i from the for-loop from above. I am not certain if that is what you really want. Maybe H(N) gives you what you want?

N=counter_1+1;

for j=1:length(newdata)

H_j=[ax(j) ay(j) az(j) 1];

end

##### 0 Comments

Steven Lord
on 19 Jul 2021

Try adapting this example that creates the 5-by-5 multiplication table to your needs. I've left off the semicolon inside the loop so it displays the intermediate results. [I know there's a shorter way to create the multiplication table, but this is to demonstrate the technique.]

x = 1:5;

multTable = zeros(5);

for y = 1:5

z = y*x;

multTable(y, :) = z

end

##### 0 Comments

Walter Roberson
on 19 Jul 2021

Replace

for j=1:length(newdata)

H_j=[ax(j) ay(j) az(j) 1];

end

with

H_j = [ax(:), ay(:), az(:), ones(numel(ax),1)];

##### 0 Comments

### See Also

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!