2017-08-21 65 views
0

我想找到一个正弦曲线(可能从曲线上任何一点开始)到达第一个最大值,并且只有第一个最大值。为此,我正在运行一个循环,将一个值与前一个值进行比较。如果一个点大于其先前的值,则它趋于上升,而相反则相似。查找正弦波/检测变量变化的第一个峰值c#

在c#中,如何检测变量何时从趋势变为趋势向下?换句话说,如何检测变量何时发生变化。在LabVIEW中,这可以使用移位寄存器来完成。什么是在C#中的等效物?

+2

你到目前为止提出了什么?有很多方法可以做到这一点;了解我们可以基于哪些答案将是有用的。 – Fildor

+0

到目前为止,我的结构如下:请原谅我的记法。 “ 为(I = 1; [正弦阵列的端] 如果(sinearray [I] msegctc

+0

您可以计算1.导数并寻找符号的变化,您可能无需执行即时操作通过阵列计算所有数据st首先打破循环> 0到<= 0的变化。 – Fildor

回答

0
public static int FirstMaxIndex(int[] values) 
{ 
    bool up = false; 
    for (int i = 1; i < values.Length; i++) 
     if (values[i] < values[i - 1]) 
     { 
      if (up) return i; 
      else up = false; 
     } 
     else if (values[i] > values[i - 1]) 
     { 
      up = true; 
     } 
    return -1; 
} 

我没有测试这个。这只是给你一个如何解决这个问题的想法。 (我把它写得尽可能接近你在评论中写的东西。)

+1

Downvoter:小心解释这有什么问题?这绝对是有道理的...... – Fildor

+0

这是行不通的,因为它没有考虑曲线的原始趋势。如果它开始趋势下降,它会立即返回第一个值。我需要找到它从什么时候开始改变,不仅仅是在它下降时返回 – msegctc

+0

@msegctc不,它不会。 “up”是错误的。并且'返回我;'只是***如果(up)***(意思是:如果up是真的)。 – ispiro