Trouver les points d'inflexion d'une série de données

Re,

Je t'avoue que je me suis pas trop penché la-dessus après le problème de la macro.

J'ai fait comme t'as dit pour l'interpolation mais en fait je vois pas comment ça marche!

Il y a 451 valeurs pour la phase 2 et un peu moins pour la phase 3.

J'ai fait le calcul pour les valeurs de la phase 2 mais comment faire en sorte qu'il y ait le même nombre de valeurs pour la phase 3? Même avec l'interpolation?

Réponds le plus précisément possible manuverbe parce que je ne pourrai me repencher là-dessus que ce soir.

A+

Bon, et bien j'ai peut-être trouvé une méthode assez simple... enfin, assez...

alors, il s'agit dans un premier temps de faire l'arrondi de la moyenne d'un groupe de 10 valeurs de la donnée d'entrée (centrée).

là on se retrouve avec au centre, un groupe de quelques valeurs à 0.26.

Après analyse de plusieurs fichiers, j'ai pu déterminer qu'en moyenne, les points 1 et 3 étaient éloignés de 442 lignes du point 2, de chaque côté.

On peut à mon avis, étant donné l'inertie du système d'acquisition, se contenter de ces 442 lignes, et les prendre pour généralité.

il n'y a plus alors qu'à sélectionner le centre des valeurs à 0.26, copier telles quelles les valeurs résultat de la phase 2, les coller dans une première colonne, puis sélectionner les valeurs résultat de la phase 3, les inverser (pour moi c'est le hic, je sais pas comment faire), et les coller dans la deuxième.

le mieux, se serait de faire la soustraction de ces deux colonnes directement dans la moulinette VBA, pour ne faire apparaître que la colonne résultant de cette soustraction, ça évite de charger la feuille...

Voilà l'idée...

Pour l'interpolation, on se retrouve alors avec 0.49/(442x2)=0.00055

Donc 0.26+0.00055,

0.26055+0.00055, etc... jusque 0.75

On devrait être à notre compte de lignes...

Je crois qu'on tient le bon bout là !

Salut manuverbe,

Je laisse l'interpolation de côté pour l'instant.

J'ai testé avec le deuxième set de données que tu m'as passé.

Est-ce normal que des zéros se trouvent dans le tableau?

Parce que c'est ça qui fait planter la macro.

En effet, dans la macro, je calcule le minimum de la colonne A. Et j'ai créé une boucle qui tourne tant que les valeurs sont supérieures au Mini.

Par conséquent le Mini étant égal à 0 dans le deuxième set de données, on sort pas de la boucle!!

Donc je réitère ma question, les zéros (au début et à la fin) sont-ils nécessaires?

Ou bien est-il possible de supprimer les lignes contenant des zéros?

Car j'ai testé en les supprimant et ma macro marche.

RE,

Je pense avoir trouvé une solution pour détecter la phase stable (PHASE 1) des données d'entrée.

Je vais tenter une explication (bien que j'aie peur que ce ne soit pas assez clair )

Mon idée est que j'affiche, dans une autre colonne, QUE les données d'entrée qui sont différentes.

Exemple : au lieu d'avoir :

0.75;0.75;0.75;0.75;0.75;0.75;0.75;0.76;0.76;0.76;0.76;0.74...

J'ai :

0.75;"";"";"";"";"";"";0.76;"";"";"";0.74

Ensuite, pour voir autour de quelle valeur tourne la phase stable, je compte le nombre de "" qu'il y a entre chaque valeur différente.

Plus il y a de "" et plus je suis presque sûr que la phase stable tourne autour de 0.75 (pour notre cas).

C'est un peu complexe pour l'instant mais je préfère ne pas joindre le fichier maintenant parce que je travaille sur le "comment détecter la phase décroissante".

A+

Salut !

Alors, par rapport aux zéros, en effet, ils sont inévitables... mais pas nécessaires.

La solution serait peut être de faire tourner une première boucle qui recherche les lignes correspondant à la valeur 0 et les supprime. Cette boucle s'arrêterait lorsqu'elle ne détecterait plus de zéro...

Ca, c'est valable dans la méthode de recherche sur l'intégralité de la table.

T'es tu penché un peu sur la méthode simplifiée que je t'ai exposée, avec le point central des valeurs à 0.26 et les 442 lignes avant et après ?

Moi, je ne sais pas programmer du tout, mais en gros la démarche serait la suivante :

1) faire une moyenne sur 10 valeurs de données d'entrée (centrée, on perd donc les 5 premières valeurs et les cinq dernières... on commence dans la cellule correspopndant à la ligne contenant la 5ème valeur).

2) faire l'arrondi de ces moyennes (on se retrouve avec des groupes de 0.75; 0.74; 0.73; etc.).

3) rechercher le groupe de cellules de la colonne des moyennes d'arrondi =0.26.

4) on repére les lignes correspondant à ce groupe de cellule, et on sélectionne la ligne du milieu de groupe (qui correspond donc au point 2)

5) on sélectionne les valeurs de la colonne résultat correspondant aux 442 lignes précédant le point 2 (je sais pas si on peut les identifier comme une entité...)

6) on sélectionne, et on inverse l'ordre des valeurs de la colonne résultats correspondant aux 442 lignes suivant le point 2 (si on peut identifier les deux groupes de valeurs comme entités, parfait, sinon on les colle dans deux colonnes)

7) on soustrait ll'entité 1 à l'entité 2, ou la colonne 1 à la colonne 2, et on colle les valeurs obtenues dans une nouvelle colonne (ou on l'identifie comme entité).

8) on calcule la racine carrée de la somme des carrés de toutes les valeurs de la dernière colonne (ou de la dernière entité) et on indique la valeur tant cherchée dans une cellule sacrée !!! Alleluia !!!

J'espère ne pas être trop brouillon, j'ai fait de mon mieux !!!

Salut manuverbe!

Ok. Supprimer les lignes contenant des zéros ne posera pas de problème (normalement).

En ce qui concerne ta méthode, elle me paraît beaucoup plus simple, dans le raisonnement.

Par contre, si je ne me suis pas penché la-dessus, c'est parce que j'ai commencé le VBA ya pas longtemps, et j'ai peur de prendre trop de temps pour mettre en application ton idée!

En fait, je me dis : lequel prendra plus de temps? : continuer ce que j'étais en train de faire? Ou traduire en VBA le raisonnement simplifié que tu proposes?

Et j'en conclue que c'est la 2è option qui me prendrait plus de temps (à vue d'oeil ).

Mais sans avoir testé, je n'en suis pas sûr!

Ensuite, une petite remarque : vu que si on fait la moyenne des valeurs, on aura moins de valeur (10 X moins).

Donc le 442 n'a plus lieu d'être non? Ce sera une 40aine de lignes non?

PS: Ca va pour le côté brouillon! J'arrive à comprendre c'est le principal

Re-

Non non.

En fait ça ne fait pas moins de valeurs... la méthode est juste là pour faire le repérage du centre, mais on conserve le nombre de lignes de 442, de manière à conserver le même échantiollonnage.

J'essaie de me pencher de mon côté avec un collègue qui touche un peu à vba... on va voir ce qu'il en pense...

Ok! Autant pour moi!

Euh... À ce compte là, pourquoi ne pas chercher tout simplement la valeur minimale des données d'entrée (en enlevant les lignes contenant zéros bien sûr)

Qui sera donc égale à 0.26

Re

Et bien, simplement, la valeur mini n'est pas toujours 0.26, mais ça peut être 0.258, ou 0.29... enfin l'important c'est même pas sa valeur, puisque quoi qu'il arrive, elle est mini... le problème, c'est qu'elle n'est pas centrée à cause de la fluctuation du signal. Sur certains fichiers, un 0.258 peut même arriver avant ou après le groupe d'arrondis de moyenne = 0.26 !

A la limite, ça reste quand même du cas isolé, où au pire je pourrais supprimer la ligne concernée manuellement avant de lancer la macro...

Si tu veux, vas-y, on peut partir sur la valeur mini direct, on aura une légère incertitude sur le centrage, mais je verrai à l'usage si c'est vraiment trop important...

Ah oui j'y avais pas du tout pensé

Euh... en fait moi je parlais de chercher la valeur mini des données d'entrée arrondies à 2 décimales!

Donc si la donnée d'entrée est égale à 0.258, la valeur arrondie sera 0.26. Donc pas de problème de ce côté-là!

Le problème est s'il y a une donnée d'entrée isolée égale à 0.254 par exemple. L'arrondi sera égal à 0.25.

Mis à part ce petit cas isolé, je suis en train de travailler sur le 2è set de données! Et particulièrement sur la détection de la rampe négative

Je galère un peu mais encore une fois c'est parce que j'ai un peu de mal à traduire mes idées en VBA!

Mais on va y arriver (j'espère!).

J'essaie de me pencher de mon côté avec un collègue qui touche un peu à vba... on va voir ce qu'il en pense...

Sinon ça avance avec ton collègue? Si ya du nouveau n'hésites pas à m'en faire part.

A+

(Question subsidiaire : à quoi ça sert toutes ces données? C'est en rapport avec l'activité que t'exerces? Si c'est pas indiscret )

Re -

Oui oui, c'est professionnel, mais en fait, ça ne me concerne pas vraiment, je me penche dessus parce que ça m'intéresse... j'aime bien apprendre des chose sur la programmation et l'utilisation de Excel... mais en fait, c'est pas vraiment mon boulot !

Pour l'histoire de l'arrondi =0.25, pas de problème... le cas pourrait éventuellement se présenter, mais dans une proportion tout à fait infime, quasi inexistante...

Au niveau du collègue, ça avance pas mal !

En fait c'est même assez simple... comme je te l'ai dit, on détecte le groupe d'arrondis de moyennes à 0.26, on calcule le nombre de lignes concernées divisé par deux arrondi au supérieur, on regarde la première ligne inférieure à 0.27, et on additionne. ça nous donne le centre.

Ensuite, on sélectionne la cellule résultat de la ligne -1 du centre, on colle sa valeur dans une cellule, on sélectionne de la même maniere la +1, on fait la meme chose dans une deuxième colonne. On répète ça -2,+2 ; -3,+3.... jusque -442,+442.

Ok merci pour l'info!

Moi aussi ça me permet d'améliorer mes connaissances en VBA!

Tu as dit :

on regarde la première ligne inférieure à 0.27, et on additionne. ça nous donne le centre.

J'ai pas bien compris là!

Salut !

Ok, bon, admettons que le groupe de cellules à 0.26 soit composé de 10 cellules.

10/2=5.

Donc on repère la dernière ligne à 0.27 (qui ne peut être que précéder la première ligne contenant la valeur 0.26), et on lui ajoute 5.

On obtient donc le numéro de ligne qui sépare les deux rampes...

Pas mal tout ça !!!!

RE,

N'ayant pas de nouvelle de l'avancement de votre côté je dois dire que du mien ça a pas mal avancé!

La mise en oeuvre de ta méthode est plus simple que je ne l'imaginais! Je dirais 10X plus simple que ce sur quoi j'étais en train de travailler!!

Voici donc une première version : voir fichier

Dis-moi ce qu'il en est.

Quelques remarques :

-il est primordial de créer au préalable 2 colonnes avant la colonne des données d'entrée

-la macro marche que pour la première feuille d'un classeur (si autre feuille -> petite modification dans le code

-Quelque soit le nombre de données d'entrées, la macro ne calcule les valeurs résultats qu'avec une amplitude de 442 lignes autour du centre

-Si ya un problème, un truc à modifier, à améliorer, à ajouter...n'oublie pas de me faire signe

Bonjour,

je reviens vers ce sujet car je cherche sur le fichier joint, une méthode automatique pour trouver le 1er point d'inflexion, que l'on a sur le graphique en valeur "48.32"

merci

Rechercher des sujets similaires à "trouver points inflexion serie donnees"