How can I split measured data in separate vectors, depending on sign value?

1 次查看(过去 30 天)
Hello! Is it possible to split measured data f.e.v= [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1] in separate vectors, f.e. only the 'growing' values: v1=[1 2 3 4 5], v2=[1 2 3 4 5].
Maybe with a find(sign(diff(v))==1) ?
Thank you!

采纳的回答

Star Strider
Star Strider 2022-3-7
One approach —
v= [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1];
dv = gradient(v);
sel = v(dv>=0);
dsel = diff([1 find(diff([sel(1) sel])<0) numel(sel)+1]);
C = mat2cell(sel, size(sel,1), dsel)
C = 1×2 cell array
{[1 2 3 4 5]} {[1 2 3 4 5]}
v1 = C{1}
v1 = 1×5
1 2 3 4 5
v2 = C{2}
v2 = 1×5
1 2 3 4 5
.

更多回答(1 个)

Jan
Jan 2022-3-7
编辑:Jan 2022-3-7
Start with a simple loop approach:
v = [1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1];
dv = [false, diff(v) > 0, false];
ini = strfind(dv, [false, true]);
fin = strfind(dv, [true, false]);
C = cell(1, numel(ini));
for iC = 1:numel(ini)
C{iC} = v(ini(iC):fin(iC));
end
C
C = 1×2 cell array
{[1 2 3 4 5]} {[1 2 3 4 5]}

类别

Help CenterFile Exchange 中查找有关 Classical Control Design 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by