2017-08-21 2 views
0

Ich versuche zu finden, bei welchem ​​Index eine Sinuskurve (die an irgendeinem Punkt entlang der Kurve beginnen kann) ihr erstes Maximum erreicht, und nur die erste. Dazu führe ich eine Schleife aus, die einen Wert mit dem vorherigen vergleicht. Wenn ein Punkt größer als sein vorheriger Wert ist, wird er nach oben und ähnlich für das Gegenteil angezeigt.Erste Spitze der Sinuswelle finden/Variable ändern C#

In C#, wie erkennen Sie, wenn sich die Variable vom Trend zum Trend geändert hat? Mit anderen Worten: Wie erkennen Sie, wenn sich die Variable geändert hat? In LabVIEW kann dies unter Verwendung eines Schieberegisters erfolgen. Was ist das Äquivalent in C#?

+2

Was haben Sie bisher gemacht? Es gibt viele Möglichkeiten, dies zu tun; Es wäre nützlich zu wissen, worauf wir Antworten aufbauen können. – Fildor

+0

Bis jetzt ist meine Struktur wie folgt: Verzeihen Sie meine Notation. " for (i = 1; [Ende des sinus array] if (sinearray [i] msegctc

+0

Sie könnten die 1. Ableitung berechnen und nach einer Änderung im Zeichen suchen.Sie können das wahrscheinlich on-the-fly ohne zu tun um alles durch das Array zu berechnen St breche die Schleife bei ersten> 0 bis <= 0 ändern. – Fildor

Antwort

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; 
} 

Ich habe das nicht getestet. Dies ist nur, um Ihnen eine Idee zu geben, wie Sie das lösen können. (Ich schrieb es so nah wie möglich an das, was Sie in einem Kommentar geschrieben haben.)

+1

Downvoter: Möchten Sie erklären, was damit nicht stimmt? Es macht absolut Sinn ... – Fildor

+0

Dies würde nicht funktionieren, weil es nicht berücksichtigt, was der ursprüngliche Trend der Kurve ist. Wenn es anfängt, nach unten zu laufen, wird sofort der erste Wert zurückgegeben. Ich muss finden, wenn es ändert sich von oben nach unten, nicht nur zurück, wenn es – msegctc

+0

@msegctc Nein ist, wird es nicht. "up" ist zunächst falsch. Und 'return i;' ist nur *** if (up) *** (was bedeutet: wenn up ist wahr). – ispiro

Verwandte Themen