1 view (last 30 days)

Hi there! I'm somewhat new to using MATLAB and wanted to know what commands would help me create a script like this:

I have a set of 5 data points that look like this:

x = [40 ; 43 ; 50; 52; 60]

y = [12 ; 15 ; 20; 21; 26]

I want to create a script that I can apply to any set of data such that if the difference between consecutive x-values is less than 3, only keep the data point that has a larger y-value. On the other hand, if the consecutive x-values are greater than or equal to 3, keep both points as part of the data set. I tried using a for loop and an if statement to create a script that looks like this but am unsure what should go after the difference function to keep both data points included. Likewise, how should I format the code after the else statement to account for the scenario in which the consecutive x-value difference is less than 3 and should only keep the data point with the higher y-value?

for ii = x

if diff(x)>=3

......

else

.......

end

Thanks

Rub Ron
on 29 Jul 2020

x = [40 ; 42; 43 ; 50; 52; 60; 70; 71 ; 73; 80];

y = [12 ; 3; 5 ; 20; 21; 26; 3; 10; 1; 15];

xy = [x y];

v = [0; diff(x)<3]';

idSt=strfind([0,v==1],[0,1])-1;

idEn=strfind([v==1,0],[1,0]);

for k=1:numel(idSt)

temp = xy(idSt(k):idEn(k),:);

[~,idMax] = max(temp(:,2));

xy(idSt(k):idEn(k),:)=repmat(temp(idMax,:),size(temp,1),1);

end

x = xy(:,1);

y = xy(:,2);

Input:

xy =

40 12

42 3

43 5

50 20

52 21

60 26

70 3

71 10

73 1

80 15

output;

xy =

40 12

40 12

40 12

52 21

52 21

60 26

71 10

71 10

71 10

80 15

Rub Ron
on 29 Jul 2020

I think you should specify what you want to do when there is 3 or more consecutives points with delta minor than 3.

For intance here:

40 12

42 3

43 5

and here:

70 3

71 10

73 1

Rub Ron
on 29 Jul 2020

then, the procedure is different. Thy this.

x = [40 ; 42; 43 ; 50; 52; 60; 70; 71 ; 73; 80];

y = [12 ; 3; 5 ; 20; 21; 26; 3; 10; 1; 15];

xy = [x y];

watchVar = 1;

while watchVar

for k= 2:size(xy,1)

if xy(k,1)-xy(k-1,1)<3

[~,idMax] = max(xy(k-1:k,2));

xy(k+1-idMax,:)=[];

break;

end

end

watchVar = ~(k==size(xy,1));

end

x = xy(:,1);

y = xy(:,2);

input:

xy =

40 12

42 3

43 5

50 20

52 21

60 26

70 3

71 10

73 1

80 15

output:

xy =

40 12

43 5

52 21

60 26

71 10

80 15

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

Start Hunting!
## 0 Comments

Sign in to comment.