Maximum value in a vector

9 views (last 30 days)
NT
NT on 23 Mar 2016
Commented: sunil shetty on 17 May 2019
Problem statement: Use the max function to find the value and location of the maximum y value. Use fprintf to show the maximum y and the x value for which it occurs. When I use the max function it always returns -1?
x = [linspace(-pi,pi,10)]
n = [length(x)];
for i = 1:n
fprintf(' %.0f: %f ', i, x(i))
end
for i = 1:n
y = [cos(x(i))];
fprintf(' %f ',y)
end
max(y)

Accepted Answer

Stephen23
Stephen23 on 23 Mar 2016
Edited: Stephen23 on 23 Mar 2016
The problem is that you don't have a vector, although you think that you do. Actually y is a scalar value -1, so of course min(-1) will give you that output. This happens because you simply reallocate y on every loop iteration, so at the end of the loop it only has the last value. You could use indexing to fix this.
A much better way to solve this problem is entirely without loops:
>> X = linspace(-pi,pi,10);
>> Y = cos(X);
>> [maxY,idx] = max(Y);
>> maxX = X(idx)
maxX = -0.34907
>> maxY
maxY = 0.93969
Loops are often an inefficient way of solving problems in MATLAB.
  3 Comments
Stephen23
Stephen23 on 23 Mar 2016
Like I said: use indexing to store the y values in the loop. Then apply max after the loop. Indexing is covered in thousand of tutorials online, so you won't have any problem with that.
sunil shetty
sunil shetty on 17 May 2019
Hi ,
Is this solution applicable for 2D or 3D vector ?
Thanks & Regards ,
Sunil

Sign in to comment.

More Answers (0)

Categories

Find more on Startup and Shutdown in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!