IF statement wrongly checked

2 views (last 30 days)
I have wrote a simple matlab script that calculate a function given 2 variables and tell me when it's smaller than a given value and save the two initial variables that have triggered the IF statements in a matrix; code below
clear all
close all
f = 17.5*10^9;
a = 3*10^-2;
b = 2*10^-2;
c = 3*10^8;
j = 1;
k = 0;
modi = zeros(2,25);
for m = 1:1:5
for n = 1:1:5
f_mn = (c/2)*(sqrt(((m/a)^2)+((n/b)^2)));
if f_mn < f
modi(1,j+k)=n;
modi(2,j+k)=m;
j+1;
end
end
k+1;
end
I don't know if I'm dumb or I'm missing something but, the first iteration of the code (m=1 and n=1) should produced a f_mn=9.01e+09 which is definetly smaller than f=1.75e+10 but the code doesn't enter the IF statement...

Accepted Answer

Walter Roberson
Walter Roberson on 7 Apr 2021
j+1;
That line retrieves the current value of j and invokes the plus() method between j and 1 (whatever that happens to be for the datatype of j), assigns the result to the ans variable, and then discards the result otherwise, since the semi-colon says not to display the result.
That line does not increase j by 1, as it does not assign to j.
  2 Comments
Walter Roberson
Walter Roberson on 7 Apr 2021
It did enter the if body.
clear all
close all
f = 17.5*10^9;
a = 3*10^-2;
b = 2*10^-2;
c = 3*10^8;
j = 1;
k = 0;
modi = zeros(2,25);
for m = 1:1:5
for n = 1:1:5
f_mn = (c/2)*(sqrt(((m/a)^2)+((n/b)^2)));
if f_mn < f
fprintf('if entered m = %d, n = %d\n', m, n);
modi(1,j+k)=n;
modi(2,j+k)=m;
j+1;
end
end
k+1;
end
if entered m = 1, n = 1 if entered m = 1, n = 2 if entered m = 2, n = 1 if entered m = 3, n = 1

Sign in to comment.

More Answers (1)

Khalid Mahmood
Khalid Mahmood on 7 Apr 2021
Edited: Khalid Mahmood on 7 Apr 2021
clear all
%close all, %no need to close all, as nothing was opened by this code.. no figure, port etc
f = 17.5*10^9; %same as f=1.75e+10
a = 3*10^-2; %same as a=3e-2
b = 2*10^-2; %same as b=2e-2;
c = 3*10^8; %same as c=3e8
j = 1;
k = 0;
i=1; %for saving values of successive f_mn
modi = zeros(2,25);
for m = 1:1:5
for n = 1:1:5
f_mn(i) = (c/2)*(sqrt(((m/a)^2)+((n/b)^2))); %store in array, to view all values in history of f_mn calculations
if f_mn(i) < f
modi(1,j+k)=n;
modi(2,j+k)=m;
j=j+1; % Must update j by assigning new value to j
end
i=i+1;
end
k=k+1 % Must update k by assigning new value to k
end
f=get(0,'Format') %store old format of display
format compact %display in compact format
format short e %additionally, short exponential format
f_mn
modi
format(f) %restore format
  4 Comments
Khalid Mahmood
Khalid Mahmood on 7 Apr 2021
I checked format in R2020a. f=format; and format f; commands both dont work.
instead use:
f = get(0,'Format')
format short e
format compact
.. and at last
format(f)

Sign in to comment.

Products


Release

R2020b

Community Treasure Hunt

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

Start Hunting!

Translated by