MATLAB: Keep element greater than immediate previous element

vector loop

Hi,
x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ]; I want to keep one vector whereby the next element is greater than the immediate previous element. keep = [[1 2 3 4 6 8 8.5 9 11 12 ]; to discard if the element is smaller than or equal to the immediate previous element. discard = [3 2 3 4 5 5 6] (the bold elements in x).
I am using loop to do that and I didn't get what I want. could help modify my code or advise any alternative way? thanks in advance!
clc; clear; close all
x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ];
m = length(x);
k=1; n = 1; i =1; j=2;
while i < m-1 & j < m
if x(j) >= x(i)
keep(n) = x(j);
n=n+1;
i=i+1;
j=j+1;
elseif x(j) < x(i)
discard(k) = x(j);
k = k+1;
i=i;
j=j+1;
end
end

Best Answer

This loops does what you want:
x = [1 2 3 4 3 2 3 4 6 8 5 5 6 8.5 9 11 12 ];
m = length(x);
keep = [x(1)];
discard =[];
for idx=2:m
if x(idx)>keep(end)
keep = [keep,x(idx)];
else
discard = [discard,x(idx)];
end
end
keep
discard
keep =
1.0000 2.0000 3.0000 4.0000 6.0000 8.0000 8.5000 9.0000 11.0000 12.0000
discard =
3 2 3 4 5 5 6
Although, depending of your goal, simply sorting the array could solve the problem in a more simplified way:
keep = unique(sort(x))
keep =
1.0000 2.0000 3.0000 4.0000 5.0000 6.0000 8.0000 8.5000 9.0000 11.0000 12.0000