# find max of vector

3 views (last 30 days)
Commented: James Tursa on 5 Dec 2019
i want to find the maximum of a vector and its position, if i have for example v=[-1,3,4,5,-2,5] , the max is 5 but i have two positions , how can i find these two positions using for loops , here is my program but it doesn't work :
v=[-1,3,4,5,-2,5]
maxi=v(1);
j=1;
for i=2:length(v)
if v(i)>maxi
maxi=v(i);
pos(j)=i;
j=j+1;
end
end

the cyclist on 2 Dec 2019
m = max(v);
idx = find(v==m);

#### 1 Comment

thank you mr cyclist for your answer, but i want the loops for way

James Tursa on 2 Dec 2019
Edited: James Tursa on 2 Dec 2019
Two things. FIrst, you need to initialize pos = 1 before the loop starts. And second, you need to modify your if-test to do two things: If v(i) == maxi, then add another pos(j) similar to what you are currently doing, but if v(i) > maxi then you need to start over and save a new max. Currently you keep adding in new pos(j) values when a new max is found but not getting rid of the old ones. E.g.,
if v(i) == maxi
j=j+1;
pos(j)=i;
elseif v(i) > maxi
% code to save new max value in maxi, and start over with pos = i etc.
end
I will leave it to you to fill in the missing code.

Show 1 older comment
James Tursa on 3 Dec 2019
else if v(i)>maxi
pos(j) = i;
No. Here you are just adding another index to the pos(j) spot. You need to overwrite all of those stored pos values and start over your index saving completely:
pos = i;
j = 1;
Also, remember you need to initialize your pos vector prior to the start of the loop:
pos = 1;
Finally, I suggest you use the code I gave you for the condition of v(i) == maxi
v=[-1,3,4,5,-2,5]
maxi=v(1);
j=1;;
pos=1;
for i=2:length(v)
for j= 1:length(v)
if v(i) == maxi
maxi=v(i);
pos(j)=i;
else if v(i)>maxi
pos = i;
maxi=v(i);
j=1;
end
end
end
end
it doesn't work alsopos =
6 6 6 6 6 6
maxi =
5
James Tursa on 5 Dec 2019
We seem to be diverging here, and you are not implementing my advice. For example, now you have two for-loops:
for i=2:length(v)
for j= 1:length(v)
Why are you suddenly introducing an additional for-loop?
And you still haven't implemented the code I gave you for the v(i) == maxi case.