Advertisement

MATLAB编程实例-(41)标注大幅变化的位置

阅读量:

题目

源自Mathwork平台的Cody,Problem 729 - 标记出现的最大幅度波动。
存在一种现象,其结果严格为正值或负值。
delta = [1 -3 4 2 -1 6 -2 -7];
从列表的起始位置依次遍历至末尾,若当前数值为迄今为止所遇到的最大绝对值负数(必须严格大于,而非相等),则将其标记为-1;若当前数值为迄今为止所遇到的最大绝对值正数(同样必须严格大于,而非相等),则将其标记为1;若上述两种情况均不满足,则标记为0。
以上示例的最终输出应为:
result = [1 -1 1 0 0 1 0 -1]

延伸

该问题与实时追踪信号变化中幅度最大的位置具有相似性。

代码实现

复制代码
    function y = magnitude_swing(x)
    
      y1(1)=1;
      x1=x(x>0);
      for i=2:length(x1)
       y1(i)=sign(x1(i))*double(sum(abs(x1(i))>abs(x1(1:i-1)))==(i-1));
      end
      
      x2=x(x<0);
      y2(1)=-1;
      for i=2:length(x2)
      y2(i)=sign(x2(i))*doub

全部评论 (0)

还没有任何评论哟~