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

39 次查看(过去 30 天)
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

回答(3 个)

Markus
Markus 2021-7-19
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

Steven Lord
Steven Lord 2021-7-19
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
multTable = 5×5
1 2 3 4 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
multTable = 5×5
1 2 3 4 5 2 4 6 8 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
multTable = 5×5
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 0 0 0 0 0 0 0 0 0 0
multTable = 5×5
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 0 0 0 0 0
multTable = 5×5
1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25

Walter Roberson
Walter Roberson 2021-7-19
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)];

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

标签

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by