How to choose data with conditions?

9 views (last 30 days)
Hello!! I'm new in programming world and I’m trying to select the data of a column with some condition; I need to select only when the data is increasing in the column, and when is decreasing in the same column. I did it in excel with: =IF((BA3-BA2)<0,BA2+(BA3-BA2)) --- for decreasing, and =IF((BA3-BA2)>0,BA2+(BA3-BA2)) for increasing. But I’m not able to do it in mat lab with the entire column.
If somebody can help me I really appreciative!
data = xlsread('Data1.xlsx')
data = 213×1
109.4632 109.3436 108.9267 108.2206 107.2488 106.1058 104.9447 103.8366 102.7987 101.7733

Accepted Answer

Sulaymon Eshkabilov
Sulaymon Eshkabilov on 17 Aug 2022
This can be done a few different ways. MATLAB has several very efficient built-in functions to compute any value change dynamics. In your exercise, you would need to take the following steps:
Step 1. Data import
D = readmatrix('Data1.xlsx')'
Step 2. Compute the data chaneg dynamics
dD = diff(D);
Step 3. Find out if the data is increasing or decreasing order
IDX1 = find(dD>0); % Locate Indices for increase
IDX2 = find(dD<0); % Locate Indices for decrease
Step 4. Do something ...
  1 Comment
Mario
Mario on 17 Aug 2022
Thanks so much, it works. It is possible to keep help me it would be great. Now that I located the increasing and decreasing data, I need to sum all the increasing data and all the decreasing data. I'm not able to do it when I sum the location (IDX1 or IDX2).
Also, I was trying to identify in the plot (with some symbols) the increasing and decreasing data, without successful results. How can I do it??
Thanks again, have a nice day
Mario N.L.

Sign in to comment.

More Answers (1)

Cris LaPierre
Cris LaPierre on 17 Aug 2022
Create a logical array and use that to select the values you want. See Ch 11 of MATLAB Onramp.
A simple example
A = [109.4632
109.3436
108.9267
108.2206
107.2488];
% logical array of locations where sequential rows are increasing or
% decreasing (will be one row shorter than A)
d = diff(A);
ind = d~=0;
% Create a new vector based on your formula: next value is current value
% plus difference of next row and current row
B = A([ind;false]) + d(ind)
B = 4×1
109.3436 108.9267 108.2206 107.2488

Community Treasure Hunt

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

Start Hunting!