IF statement wrongly checked
조회 수: 1 (최근 30일)
이전 댓글 표시
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...
댓글 수: 0
채택된 답변
Walter Roberson
2021년 4월 7일
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
Walter Roberson
2021년 4월 7일
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
추가 답변 (1개)
Khalid Mahmood
2021년 4월 7일
편집: Khalid Mahmood
2021년 4월 7일
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
Khalid Mahmood
2021년 4월 7일
편집: Khalid Mahmood
2021년 4월 7일
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)
참고 항목
카테고리
Help Center 및 File Exchange에서 Dates and Time에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!