Getting the minimum value from a row vector

Hi, I am calculating a min value in a row vector one after the other. There are two repetitions in the row vector. I want to pick 3 and 6 twice. The way i am doing is like this but it doesn't take care of the repetition in the vector
a=[1,2,3,3,4,5,6,6,7,8,9,10];
min_value=0;
for i=1:length(a)
min_value=min(a(a>min_value));
end

5 Kommentare

Adam
Adam am 26 Jul. 2016
What exactly is the result you are looking for? Your code currently gives an error when I paste it into Matlab so I can't even see what your current code is giving.
Well, i'm sorry as i don't know that why it is giving you an error but it working fine with me. If you see in the vector, 3 and 6 is repeated. I want that the min function somehow should return the 3 and 6 twice.
Stephen23
Stephen23 am 26 Jul. 2016
Bearbeitet: Stephen23 am 26 Jul. 2016
@Aftab Ahmed Khan: your code:
a = [1,2,3,3,4,5,6,6,7,8,9,10];
min_value = 0;
for k = 1:length(a)
min_value = min(a(a>min_value));
end
Give this error:
Error using >
Matrix dimensions must agree.
Error in Untitled1 (line 6)
min_value = min(a(a>min_value));
because on twelfth iteration min_value is empty and so the comparison tries to compare an empty array with a 1x12 array. Thus the error.
"I want that the min function somehow should return the 3 and 6 twice."
Your code does not "return" or store any values, so it is not clear what you want.
Well, i am running it with a breakpoint and didn't run it up to the twelfth iteration and didn't notice the error. Thanx. On the third iteration, min_value is 3 and on the fourth iteration it picks the value 4, skipping the 2nd 3 value. Similarly for the value 6.
I have made the necessary changes to the code.
a=[1,2,3,3,4,5,6,6,7,8,9,10];
min_value=0;
for i=1:length(a)
if isempty(min_value)
break;
end
min_value=min(a(a>min_value))
end

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Stephen23
Stephen23 am 26 Jul. 2016
Bearbeitet: Stephen23 am 26 Jul. 2016

0 Stimmen

Why make it complicated ?
>> a = [1,2,3,3,4,5,6,6,7,8,9,10];
>> b = sort(a); % guarantees the order
>> for k = 1:numel(b), disp(b(k)), end

Weitere Antworten (1)

Stephen23
Stephen23 am 26 Jul. 2016

0 Stimmen

a = [1,2,3,3,4,5,6,6,7,8,9,10];
f = find([1,diff(a),1]);
x = f(2:end)-f(1:end-1);
c = mat2cell(a,1,x);
where
>> c{:}
ans =
1
ans =
2
ans =
3 3
ans =
4
ans =
5
ans =
6 6
ans =
7
ans =
8
ans =
9
ans =
10

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by