IF statement wrongly checked

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

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

ok, that was the error but I don't get why, at least on the first iteration, it doesn't enter the IF statement
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

f==format %stotre old format
That does not store the format into f: that compares the format to f. It relies on an R2021a change to permit format to return the current format.
format f %restore format
That does not restore anything, it sets the current format to 'f' (which is not a valid format.) You would need
format(f)
True, that == was mistyped. change it to single =
... and change to
format(f)
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!