Matlab: While loop use end values
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
I have a script with a for loop in matlab which runs 3 scripts multiple times (ex: k=100). These scripts generate different input values each time that need to be used in the last script. The last script includes a while loop, which need to use the input values from the previous scripts in every run . I would like to then use the final x(end) value of each run of the while loop for these k inputs, for further calculations. Problem = i only get 1 identical value for my 100 times i run these scripts. From the other scripts i get 100 correct, different results, following the predefined variations.
nsamples=100;
for k = 1:nsamples;
scriptA
scriptB
scriptC
k=k+1;
end
ScriptC contains the while loop.
while min(y)> -0.01;
t = t + dt;
i = i + 1;
xf(i) = xf(i-1)+ Vx.*dt;
AxD = - ( D / Mass ) * V * Vx;
AyD = -G - ( D / Mass ) * V * Vy;
Vx = Vx + AxD * dt;
Vy = Vy + AyD * dt;
x(i) = x(i-1) + Vx * dt + 0.5 * AxD * dt^2;
y(i) = y(i-1) + Vy * dt + 0.5 * AyD * dt^2;
end;
I get 100 of the same values for x(end), instead of 100 different ones, based on the different input from the previous scripts (which i can verify in a table with all the different relevant (k) values). That is my problem = how can i obtain and use the x(end) or max(x) value of each of the (k) runs?
0 comentarios
Respuestas (1)
Mathieu NOE
el 30 de Mzo. de 2022
hello
try my little demo below
clc
clearvars
nsamples=10;
for k = 1:nsamples
% constants init (my guess / demo)
D = 1;
Mass = 1;
G = 0.1;
V = -1e-3;
Vx = 1e-2+ 1e-2*k;
Vy = 1e-3+ 1e-2*k;
% init recursion arrays
clear t xf x y % mandatory !
t(1) = 0;
n = 1 ;
dt = 1e-2;
x(1) = -1;
xf(1) = 0.5;
y(1) = 0.1;
while min(y)> -0.01
n = n + 1;
t(n) = t(n-1) + dt;
xf(n) = xf(n-1)+ Vx.*dt;
AxD = - ( D / Mass ) * V * Vx;
AyD = -G - ( D / Mass ) * V * Vy;
Vx = Vx + AxD * dt;
Vy = Vy + AyD * dt;
x(n) = x(n-1) + Vx * dt + 0.5 * AxD * dt^2;
y(n) = y(n-1) + Vy * dt + 0.5 * AyD * dt^2;
end
t_end(k) = t(end-1); % sample before "end" to make sure the criteria is met
x_end(k) = x(end-1); % sample before "end" to make sure the criteria is met
y_end(k) = y(end-1); % sample before "end" to make sure the criteria is met
figure(k)
plot(t,y,'-*',t_end(k),y_end(k),'dr')
end
0 comentarios
Ver también
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!