Why break loop is not working?

2 ビュー (過去 30 日間)
Athira T Das
Athira T Das 2022 年 7 月 22 日
コメント済み: Walter Roberson 2022 年 7 月 22 日
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

採用された回答

SAI SRUJAN
SAI SRUJAN 2022 年 7 月 22 日
編集済み: SAI SRUJAN 2022 年 7 月 22 日
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 件のコメント
Walter Roberson
Walter Roberson 2022 年 7 月 22 日
isnan() and isinf() can be combined
if ~isfinite(gamma(1+m1-(2*s2-j1))); break; end

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2022 年 7 月 22 日
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()

カテゴリ

Help Center および File ExchangeNumeric Types についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by