How to terminate the loop
Mostrar comentarios más antiguos
I want to terminate the loop. Condition is satisfying at i = 96, but loop is still running till the end.
after the termination, i want to know the value of i.
point_load(1) = 0;
for i = 1 : 100
point_load(i + 1) = point_load(i) + 1;
PL_BM(i) = point_load(i) * beam_length / 4;
PL_BM = repelem(PL_BM(i),n);
failure_domain_BM = ( RV_BM - PL_BM(i) ) < 0;
p_f_BM = sum(failure_domain_BM (:) == 1) / n;
if p_f_BM == 1
break
disp(point_load(i+1))
end
end
Respuesta aceptada
Más respuestas (1)
Ridwan Alam
el 25 de Nov. de 2019
Editada: Ridwan Alam
el 25 de Nov. de 2019
b18 = 3+0+0+7+6+0+4+9; % b18 = 29
b58 = 6+0+4+9; % b58 = 19
n = 10000000; % No of samples = 10,000,000
rng default
beam_length = 5; % Beam length = 5 m
% Bending Moment Capacity follows a log-normal distribution
mean_BM = 2 * b18; % mean of BM = 58 kNm
COV_BM = 0.01 * b58; % COV of BM = 0.19
variance_BM = (mean_BM * COV_BM)^2; % Variance of BM = 121.4404
mu_BM = log(mean_BM^2 / sqrt(mean_BM^2 + variance_BM)); % Location parameter of BM = 4.0427
sigma_BM = sqrt(log(1 + (variance_BM / mean_BM^2))); % Scale paramaeter of BM = 0.1883
RV_BM = lognrnd(mu_BM, sigma_BM, 1, n);
point_load(1) = 0;
for i = 1 : 100
point_load(i + 1) = point_load(i) + 1;
PL_BM(i) = point_load(i) * beam_length / 4;
%PL_BM = repelem(PL_BM(i),n);
failure_domain_BM = sum( RV_BM < PL_BM(i) );
p_f_BM = failure_domain_BM / n
if p_f_BM >= 0.9999
disp(['i=' num2str(i)])
break
end
end
this gave me i=93
5 comentarios
Jaydeep Kansara
el 25 de Nov. de 2019
Editada: Jaydeep Kansara
el 25 de Nov. de 2019
Ridwan Alam
el 25 de Nov. de 2019
If you increase the end limit of i to 120 (i=1:120), you will see that the break point is reached at i = 118. Because the display is rounding up the floating points, you thought the condition is met earlier, whereas it is not. Hope you understand.
b18 = 3+0+0+7+6+0+4+9; % b18 = 29
b58 = 6+0+4+9; % b58 = 19
n = 10000000; % No of samples = 10,000,000
rng default
beam_length = 5; % Beam length = 5 m
% Bending Moment Capacity follows a log-normal distribution
mean_BM = 2 * b18; % mean of BM = 58 kNm
COV_BM = 0.01 * b58; % COV of BM = 0.19
variance_BM = (mean_BM * COV_BM)^2; % Variance of BM = 121.4404
mu_BM = log(mean_BM^2 / sqrt(mean_BM^2 + variance_BM)); % Location parameter of BM = 4.0427
sigma_BM = sqrt(log(1 + (variance_BM / mean_BM^2))); % Scale paramaeter of BM = 0.1883
RV_BM = lognrnd(mu_BM, sigma_BM, 1, n);
point_load(1) = 0;
for i = 1 : 120
point_load(i + 1) = point_load(i) + 1;
PL_BM(i) = point_load(i) * beam_length / 4;
%PL_BM = repelem(PL_BM(i),n);
failure_domain_BM = sum( RV_BM < PL_BM(i) );
p_f_BM = failure_domain_BM / n
if p_f_BM >= 1
disp(['i=' num2str(i)])
break
end
end
Ridwan Alam
el 28 de Nov. de 2019
Jaydeep, did you get your answer?
Image Analyst
el 28 de Nov. de 2019
He did mark the cyclist's answer as "Accepted".
Jaydeep Kansara
el 30 de Nov. de 2019
Categorías
Más información sobre Loops and Conditional Statements en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!