.555
Version imprimable
.555
Bonjour et bienvenue au forum.
Personne ne l'est! et à lire ton message, la base existe.Citation:
Ps : je ne suis ni mathématicien, ni programmeur professionnel. J’ai quelques notions par ci par là
Au forum on s'entraide sur des points précis.
Si tu peux détailler plus: la forme de tes données, le résultat escompté, si tu as déjà commencé des essais (même infructueux)...
un aperçu de ton fichier serait préférable (tu peux poster seulement un petit échantillon ou exemple)...
Explique davantage ceci, tous nous n'avons pas un unique profilCitation:
Je souhaiterais pouvoir utiliser une méthode de discrétisation sur différents niveaux (au minimum 2)
Cordialement
Bonjour,
J'ai du mal a saisir ton problème, tu pourrais nous montrer de petites image du graphique avant et après?
Les niveau tu parle du nombre de "marche" de ta fonction créneau
exemple pour 3
Sinon comme la dit mercatog c'est un forum d'entre aide sur des point précis et tu as peu de chance de récupérer un algorithme tout fait façon les autres bosse, je me tourne les pousse et le chef me félicite :mouarf:.Code:
1
2
3
4
5 ________ ________ _________
Bon après tu peu tomber sur quelqu'un que ca interesse et qui a le temps. La ca m'intéresse reste a savoir si je trouve le temps :roll:
La j'ai une petite idée d'algo, si j'ai bien compris la question, mais a mon avis je n'aurais pas le temps de me coller a la programmation et encore moins a la majoration de l'erreur du schéma numérique utilisé mais si tu veux un truc a la louche ca devrais le faire
Moi je cherche du boulot a partir de septembre, fin du stage début de la galère :aie:
Plus sérieusement, la ou ca va être difficile c'est de trouver une loi qui permet de choisir les niveaux. Donc quelques questions :
-ce programme doit-il être lancé souvent?
-quel est le nombre de point (ordre de grandeur) et la résolution nécessaire ainsi que la plage bien entendu
-quel est le temps de calcul que tu juge raisonnable?
Ce que je verrais si on peut se permettre d'être bourrin c'est de définir un pas pour les niveaux. De tester les différentes combinaison possible de pour chaque combinaison possible calculer l'écart type des distance entre le point et le niveau qui lui correspond.
En fonction de la quantité de donnée du temps que tu es près a attendre et de la machine ca peut suffire sinon il va falloir te pencher vers des solutions un peu plus complexe et commencer par faire un peu de biblio pour trouver différentes méthode les tester et les comparer
Oui oui,
Cela me passionne
Je réfléchie sur cela.
je te tiendrai au courant si j'ai qlq chose d'intéressant!
Justement c'est a cause de lui que je n'aurais pas le temps d'attaquer la programmation.Citation:
Et n'oublie pas de faire ton rapport !
Donc mon idées
tu demande a l'utilisateur la résolution sur les pas
Si c'est une tension il donnera par exemple 1V
Tu regarde la valeur min et la valeur max (0.1 et 5.4)
Donc ton programme pourra mettre des pallier à
0,1,2,3,4 et 5V
Tu veux 3 paliers tu commences
palier 1 :0V
palier 2 :1V
palier 3 :2V
pour chaque point tu calcule la distance avec le palier le plus proche tu fait l'écart type.
(un simple parcours du tableau qui contient les valeur on ne vas pas passer par un pointeur pour si peu ;) ) Tu stock la valeur de l'écart type et la valeur des paliers
Puis tu teste la combinaison de palier suivante
palier 1 :0V
palier 2 :1V
palier 3 :3V
même calcule même stockage,
palier 1 :0V
palier 2 :1V
palier 3 :4V
etc....
A la fin tu regarde la combinaison qui minimise l'écart type et tu la conserves
Tu as tes paliers à partir de la reconstituer la droite n'est qu'un formalités.
Je dirais que si le nombre de combinaisons de palier n'est pas trop importante ca devrais passer 63000 valer c'est quelque chose mais ca reste viable. tu devrais faire un test pour mesurer le temps nécessaire pour parcourir un tableau de 63k élément et effectuer 5 comparaison sur chaque élément ca te permettra d'avoir le temps de calcul approximatif en fonction du nombre de combinaison
Pour chronométrer utilise gettickcount
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 Option Explicit Public Declare Function GetTickCount Lib "kernel32" () As Long Sub Macro8() Dim deb As Long Dim fin As Long 'la suite de la déclaratio de variable deb = GetTickCount 'le calcul fin = GetTickCount MsgBox "Durée" & fin - deb & " ms"
Je pense qu'à la fin, il désir avoir un signal carrée le plus parfait possible en fonction de la précision désirée.
déjà, je réfléchis à éliminer les résidus (ou points singuliers)
puis après, tester pour chaque point s'il sort de la marge d'erreur souhaités, il faut le ramener dedans. (toujours en fonction de la précision désirée)
Au vu du dessin les point singulier son conservé il passe du plus au palier au plus petit pour un seul point.
Mais effectivement la solution concernant la marge d'erreur pourrait améliorer les chose mais il faut commencer par définir les paliers.
Mais ce que tu dit me donne une nouvelle idée pour choisir les palier
Une autre solution serait de définir une marge autour de chaque palier (exemple 10%) et de minimiser le nombre de point qui ne sont dans aucune marge.
On peu bien sur choisir une méthode mixte qui optimiserais les deux critères ou en choisir d'autres....
Tou ca pour dire que les solution sont extrêmement nombreuses qu'il va falloir que tu t'y colle sérieusement (ce n'est pas un programme que l'on fait sur un coin de table entre deux plats au resto, je parle des humains pas de certaines brute que j'ai pu rencontrer)
Commence par faire l'algo qui permet de générer tous les paliers avec un nombre dynamique de palier
Ensuite au milieu de tes boucle quand tu as tes palier de fixé lance une fonction de teste, l'avantage c'est que tu pourra facilement modifier tes critère de teste en modifiant la fonction pour pouvoir les comparer.
On peux aussi chercher des méthode qui définisse les paliers de manière directe sans tester toutes les combinaisons, mais la je trouve que ca serai plus lourd au niveau théorie
:ccool: Exactement Mercatog!
En fait, je viens de finir une routine qui dégrossit le terrain, et permet de réduire le nombre de données.
C'est alors là qu'il faudrait coupler cette routine, avec celle sur laquelle je vous fait bucher (je buche également, normal c'est la mienne :mouarf:)
Encore merci!
Cheerio!
Tu peux mettre un fichier de données excel (une centaine de données pas toutes) (2 périodes sera parfait)?
Je suis entrain d'enlever les points singuliers.
J'ai remarque qu'en faisant cela, on pu déjà répéter le processus pour le lissage.
J'ai fais un peu de documentation, avec les B-spines. mais ça risque d'être trop vu le volume de données que tu as.
Je ne travaille que sur ça maintenant
Quand, j'aurai qlq chose de présentable; je te tiendrai au courant
Pour vous mettre au courant où en suis je!
je suis dans la donne Xj, je regarde Xj+1 et Xj+2
Je me dis que Xj+1 est probablement singulier, si la variation de Xj+1 par rapport à Xj et la variation de Xj+2 par rapport à Xj+1 sont de signe contraire.
dans ce cas que faire de Xj+1
Soit le rapprocher de Xj ou de Xj+2
alors on compare les écarts type de Xj+1 par rapport à Xj et à Xj+2
et on substitue la valeur de Xj+1 à l'une des 2 valeurs précédentes
de ce faite, comme si nous avions éliminé la vraie valeur singulière de Xj+1
Voilà où en suis je!
J'ai mijoté une petite proposition composée de 2 étapes:
1. Lissage des données (en adaptant avec beaucoup de simplifications certaines théories statistiques et d'analyse numérique) mais loin d'être conformiste! donc j'obtiens une petite corrélation des données!
Le cas simple, a nécessité 2 ou 3 cycles de la procédure tant dis que le cas extrême a nécessité une dizaine! (avec l'inconvénient de la distorsion des données, mais globalement à l'œil nue, c'est acceptable).
J'avoue que le place du tâtonnement dans cette étape n'était pas fortuite.
2. En fonction de la marge d'erreur tolérée, une autre procédure permet d'uniformiser les données par paliers pour donner le résultat final.
Comme l'a dit Krovax, Cela est gourmand en matière de temps d'exécution (je n'ai que qlq lignes en comparaison de la base total 60000données!!!). D'ailleurs, j'attendrai les remarques pertinentes de Krovax et autres membres de ce magnifique forum pour l'amélioration. Et aussi celles de Cheers.
Cordialement
Comme le demandeur du sujet n'a pas donné signe de vie, je me permets de proposer où en suis je avec ce problème pour toutes fins utiles (Et je m'arrête ici):
J'ai ajouté une procédure pour affiner les paliers; en effet, même après les étapes précédentes des paliers singuliers subsistent. Donc, la routine suivante permet de comparer le nombre de points par palier par rapport aux exigences de l'utilisateur. Chaque palier ne répondant pas "aux normes" est ramené au palier le plus proche. cette routine est répétée jusqu'à ce qu'aucun palier ne comporte de points inférieur au minimum exigé.
Pour les autres qui liront ce post et pour ma défence :D nous avons communiqué par mail...
Un grand merci à Mercato
:ccool: