<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Entschuldigung im Voraus für diese Newbie-Frage:
Ich habe einfach eine x- und eine y-Spalte. Mit einem Skript versuche ich einen Tisch zu bekommen mit:
- das Maximum y (kein Problem damit),
- der Durchschnitt in einem definierten Bereich um das Maximum,
- der x-Wert entspricht dem Maximum y.
Wahrscheinlich ist es ein sehr einfaches Skript, aber ich kann nicht weiterkommen!
Danke für deine Hilfe!
Das ist perfekt, vielen Dank Ian für Ihre ausführliche Antwort!
So etwas würde tun. Beachten Sie jedoch, dass 'LocMax ()' die Position des ersten Maximums zurückgibt, und wenn mehrere Maxima vorhanden sind, müssen Sie mehr arbeiten. Wenn das Fenster abgeschnitten ist, möchten Sie möglicherweise die Berechnung des Mittelwerts je nach Bedarf anpassen.
NamesDefaultToHere ( 1 ) ;
// mache Daten
dt = NewTable ( "X und Y" .
NewColumn ( "X" . Numerisch . Kontinuierlich . Formel ( RandomNormal ())) .
NewColumn ( "Y" . Numerisch . Kontinuierlich . Formel ( RandomNormal ())) .
Zeilen hinzufügen ( 100 )
) ;
// Holen Sie die Daten in Vektoren
xVals = Säule ( dt . "x" ) << getAsMatrix ;
yVals = Säule ( dt . "y" ) << getAsMatrix ;
// Finde die Position des größten y-Wertes
yMaxPos = LocMax ( yVals ) ;
// Holen Sie sich die entsprechenden x- und y-Werte an dieser Position
yMax = yVals [ yMaxPos ] ;
xMax = xVals [ yMaxPos ] ;
// Fenstergröße definieren (bestehend aus einer ungeraden Anzahl von Werten)
WinSize = 9 ;
// Berechne die Positionen der Fensterkanten
links = yMaxPos - ( WinSize - 1 ) / 2 ;
Recht = yMaxPos + ( WinSize - 1 ) / 2 ;
// Stellen Sie sicher, dass sich die Kanten in Reichweite befinden
ob ( links < 1 . links = 1 ) ;
ob ( Recht > NRow ( yVals ) . Recht = NRow ( yVals )) ;
// Berechne den durchschnittlichen y-Wert im Fenster
yMean = Bedeuten ( yVals [ links :: Recht ]) ;
// In Protokollfenster drucken
Protokoll löschen () ;
Drucken ( yMaxPos . yMax . xMax . WinSize . links . Recht . yMean ) ;