在曲线MATLAB中找出增加和减少的趋势

Dr.*_*Raj 4 matlab

a=[2 3 6 7 2 1 0.01 6 8 10 12 15 18 9 6 5 4 2].
Run Code Online (Sandbox Code Playgroud)

这是一个数组,我需要提取增加和减少趋势开始的确切值.

数组的输出a将是[2(first element) 2 6 9]

a=[2 3 6 7 2 1 0.01 6 8 10 12 15 18 9 6 5 4 2].
   ^       ^        ^               ^
   |       |        |               |
Run Code Online (Sandbox Code Playgroud)

请帮助我在MATLAB中获得任何类似类型的数组的结果.

Gun*_*uyf 5

您只需要找到连续数字之间差异的符号变化的位置.通过一些常识和函数diff,signfind,您可以获得以下解决方案:

a = [2 3 6 7 2 1 0.01 6 8 10 12 15 18 9 6 5 4 2];
sda = sign(diff(a));
idx = [1 find(sda(1:end-1)~=sda(2:end))+2 ];
result = a(idx);
Run Code Online (Sandbox Code Playgroud)

编辑:

当有两个相同的连续数字时,符号函数会混淆,因为sign(0) = 0它被错误地识别为趋势变化.你必须过滤掉这些.您可以通过首先从原始数据中删除连续的重复项来完成此操作.由于您只想要趋势变化开始的值,而不是实际开始的位置,这是最简单的:

a(diff(a)==0) = [];
Run Code Online (Sandbox Code Playgroud)