Find min and max value of vector without using built-in function

Hello, I know that this question has been already asked many times, however, I kind of struggle to execute it. Max shows correct result, but the not the minimum value. What could be the solution?
A = [9 6 8 3 6 8 2 1 3 9 1 0 2]
maxval = A(1);
minval = 1;
for i = 1:length(A)
if A(i) > maxval
maxval = A(i);
else A(i) < minval
minval = A(i)
end
end

 Accepted Answer

...
minval=maxval;
...
if ...
...
elseif A(i) < minval %%% HERE'S YOUR PROBLEM...SEE IT???
...
You missed the "if" part on the "else" clause -- so every thing that wasn't greater than went there and the {A(i) < minval) clause did nothing except display the result of the test to the command line; had no bearing on the logic.

4 Comments

Note that this implementation is not robust to the case where A(1)=nan,
A = [nan 6 8 3 6 8 2 1 3 9 1 0 2];
maxval = A(1);
minval = maxval;
for i = 1:length(A)
if A(i) > maxval
maxval = A(i);
elseif A(i) < minval
minval = A(i);
end
end
minval,maxval
minval = NaN
maxval = NaN
whereas minval=inf, maxval=inf will work.
True...but the else instead of elseif doesn't work at all...
The if/elseif should really be two independent ifs if initializing with Infs:
A = 1:10; % strictly increasing -> elseif condition never checked
maxval = -Inf;
minval = Inf;
for i = 1:length(A)
if A(i) > maxval
maxval = A(i);
elseif A(i) < minval
minval = A(i);
end
end
minval,maxval % minval remains Inf
minval = Inf
maxval = 10
A = 1:10;
maxval = -Inf;
minval = Inf;
for i = 1:length(A)
if A(i) > maxval
maxval = A(i);
end
if A(i) < minval
minval = A(i);
end
end
minval,maxval
minval = 1
maxval = 10

Sign in to comment.

More Answers (1)

Products

Release

R2022b

Asked:

on 19 Sep 2022

Commented:

on 19 Sep 2022

Community Treasure Hunt

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

Start Hunting!