<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Désolé d'avance pour cette question de débutant:
J'ai simplement un x et un y colonnes. Avec un script j'essaie d'obtenir une table avec:
- le maximum y (pas de problème avec ça),
- la moyenne dans une plage définie autour du maximum,
- la valeur x correspondant au maximum y.
C'est probablement un script très facile, mais je n'ai pas pu progresser sur celui-ci!
Merci de votre aide!
C'est parfait, merci beaucoup Ian pour votre réponse exhaustive!
Quelque chose comme ça ferait. Mais notez que 'LocMax ()' renvoie la position du premier maximum, et s'il existe plusieurs maxima, vous devrez faire plus de travail. De plus, si la fenêtre est tronquée, vous pouvez ajuster le calcul de la moyenne en fonction de vos besoins.
NamesDefaultToHere ( 1 ) ;
// faire des données
dt = NewTable ( "X et Y" ,
NewColumn ( "X" , Numérique , Continu , Formule ( AléatoireNormal ())) ,
NewColumn ( "Y" , Numérique , Continu , Formule ( AléatoireNormal ())) ,
AddRows ( 100 )
) ;
// Obtenir les données en vecteurs
xVals = Colonne ( dt , "X" ) << getAsMatrix ;
yVals = Colonne ( dt , "y" ) << getAsMatrix ;
// Trouver la position de la plus grande valeur y
yMaxPos = LocMax ( yVals ) ;
// Récupère les valeurs x et y correspondantes à cette position
yMax = yVals [ yMaxPos ] ;
xMax = xVals [ yMaxPos ] ;
// Définir la taille de la fenêtre (composée d'un nombre impair de valeurs)
winSize = 9 ;
// Calcule les positions des bords de la fenêtre
la gauche = yMaxPos - ( winSize - 1 ) / 2 ;
droite = yMaxPos + ( winSize - 1 ) / 2 ;
// Assurez-vous que les bords sont dans la plage
si ( la gauche < 1 , la gauche = 1 ) ;
si ( droite > NRow ( yVals ) , droite = NRow ( yVals )) ;
// Calcule la valeur y moyenne dans la fenêtre
yMoy = Signifier ( yVals [ la gauche :: droite ]) ;
// Fenêtre Imprimer dans le journal
ClearLog () ;
Impression ( yMaxPos , yMax , xMax , winSize , la gauche , droite , yMoy ) ;