Why break loop is not working?

2 vues (au cours des 30 derniers jours)
Athira T Das
Athira T Das le 22 Juil 2022
Commenté : Walter Roberson le 22 Juil 2022
The value of e at certain points is infinity. But the break loop is not working.
clc; clear all; close all;
M=3
M = 3
for m1=0:M
m1;
for s1=0:1/2:m1/2
s1;
for s2=0:1/2:(M-m1)/2
s2;
if (m1-(2*s2)) < 0
break
end
for j1=0:m1-2*s1
j1;
if gamma(1+m1-(2*s2-j1))== nan;
break
end
if gamma(1+m1-(2*s2-j1))== Inf;
break
end
if gamma(1+m1-(2*s2-j1)) == 0
break
end
for j2=0:(M-m1-(2*s2))
j2;
q=factorial(m1-(2.*s2));
w=factorial(j1);
e=gamma(1+m1-(2.*s2)-j1)
end
end
end
end
end
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = Inf
e = Inf
e = 1
e = 1
e = 1
e = 1
e = 1
e = 2
e = 2
e = 1
e = 1
e = 1
e = 1
e = 1
e = 1
e = Inf
e = 2
e = 2
e = 1
e = 1
e = 1
e = 1
e = 2
e = 2
e = 1
e = 6
e = 2
e = 1
e = 1
e = 6
e = 2
e = 1
e = 6
e = 2
e = 6

Réponse acceptée

SAI SRUJAN
SAI SRUJAN le 22 Juil 2022
Modifié(e) : SAI SRUJAN le 22 Juil 2022
Hi Athira T Das,
From my understanding of your question,the value of e is Inf in some cases and you want to avoid that using break statements.We can see that the value of e is inf because you are checking for a different condition in the if statement.Check for the comments in the following code snippet for better understanding,
clc; clear all; close all;
M=3;
for m1=0:M
m1;
for s1=0:1/2:m1/2
s1;
for s2=0:1/2:(M-m1)/2
s2;
if (m1-(2*s2)) < 0
break
end
for j1=0:m1-2*s1
j1;
if gamma(1+m1-(2*s2-j1))== nan;
break
end
% Here you are checking for gamma(1+m1-2*s2+j1).
if gamma(1+m1-(2*s2-j1))== Inf;
break
end
if gamma(1+m1-(2*s2-j1)) == 0
break
end
for j2=0:(M-m1-(2*s2))
j2;
q=factorial(m1-(2.*s2));
w=factorial(j1);
% Whereas here you are assigning gamma(1+m1-2*s2-j1.)
% We can see that sign of j1 is different.
% Change this to avoid assigning inf to e.
e=gamma(1+m1-(2.*s2)-j1);
end
end
end
end
end
% Consider using isnan and isinf
  1 commentaire
Walter Roberson
Walter Roberson le 22 Juil 2022
isnan() and isinf() can be combined
if ~isfinite(gamma(1+m1-(2*s2-j1))); break; end

Connectez-vous pour commenter.

Plus de réponses (1)

Walter Roberson
Walter Roberson le 22 Juil 2022
if gamma(1+m1-(2*s2-j1))== nan;
That will never be true. Observe:
x = nan
x = NaN
x == x
ans = logical
0
x ~= x
ans = logical
1
You need to use isnan()

Catégories

En savoir plus sur Numeric Types dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by