La moyenne des valeurs lues
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 47

La moyenne des valeurs lues



  1. #1
    Hichamrol

    La moyenne des valeurs lues


    ------

    salut j'espere que vous allez bien ,
    j'ai un petit de soucis au niveau de programmation d'un petit programme qui lit et en même temps faire la moyenne ,
    par exemple j'ai au total 3 valeurs que je vais lire d’après le clavier ,
    l’enchaînement est comme celui ci :
    j'ai une variable Moyenne, et dés que l'utilisateur écrit la première valeur, il va se stocker sur Moyenne, et après chaque lecture il faut l'affecter sur Moyenne,
    donc j'ai besoin de fur et a mesure lire en meme temps faire la moyenne , c'est pas une question de faire la somme de tous les valeurs et en fin faire la division sur le nombre des valeurs ajoutée
    j'ai trouvé un soucis au niveau de programmation de ce programme , ya qlq un qui peut m'aider
    voici un exemple les valeurs qui arrivent
    un exemple 2 - 3 - 5
    donc au total il me faut 3.333

    -----

  2. #2
    Ikhar84
    Animateur Informatique

    Re : La moyenne des valeurs lues

    Salut !

    Langage et code ?

    A première vue, pas besoin de variable "moyenne" puisque la moyenne est calculée en "dynamique" au fur et à mesure des saisies (si j'ai bien compris).

    Par contre, il faut stocker chaque saisie, ou au moins la somme de ces saisies, ainsi que le nombre de saisies... jdisçajdisrien...
    Dernière modification par JPL ; 16/09/2019 à 17h57. Motif: Titre corrigé
    J'ai glissé Chef !

  3. #3
    Hichamrol

    Re : La moyenne des valeurs lues

    Langage C ...
    oui c'est ça, la moyenne est calculée de façon dynamique au fur et a mesure ...
    vous avez une idée comment on peut le faire car j'ai trouvé des difficulté au niveau de la programmer ...
    merci

  4. #4
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    je vais te donner mon secret pour des algorithmes basiques tels que celui-ci.
    J'applique à l'ordinateur le même raisonnement que celui que j'aurais utilisé sans ordi.

    Essaie d'analyser ce que tu ferais si quelqu'un t'énonçait une série de nombres afin d'en calculer la moyenne. Penses-tu que tu serais obligé de mémoriser tous ces nombres avant d'en calculer la moyenne?

  5. A voir en vidéo sur Futura
  6. #5
    Hichamrol

    Re : La moyenne des valeurs lues

    Bonjour Jack , Merci pour ta réponse , en fait j'ai trouvé une relation mathématiques ( suite numérique ) qui va bien me servir

  7. #6
    danyvio

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    Bonjour Jack , Merci pour ta réponse , en fait j'ai trouvé une relation mathématiques ( suite numérique ) qui va bien me servir
    Je suis curieux (et ça intéressera ceux qui ont eu la gentillesse de se pencher sur ton épineux problème) de voir cette relation.

    Sinon, comment faire plus simple qu'un compteur des nombres entrés, et une zone de cumul de ces fameux nombres, et en divisant après chaque entrée le cumul par le nombre d'entrées ?
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  8. #7
    Ikhar84
    Animateur Informatique

    Re : La moyenne des valeurs lues

    +1 je suis aussi curieux !
    J'ai glissé Chef !

  9. #8
    Hichamrol

    Re : La moyenne des valeurs lues

    en fait , voila la relation , il me permet de stocker en même temps faire la moyenne au fur et au mesure ,
    par ce que si par exemple les données lue sont très grandes alors si tu cumule dans un tableau par exemple et à la fin tu vas diviser sur le nombre , alors tu vas perdre la mémoire ... cad tu va déclarer une variable avec une dimension plus grand ... tu vois ce que je veux dire..
    voila la relation que j'ai trouvé .. merci les amis.
    Xn=(ValueLuen+(n−1)Xn−1)/n

  10. #9
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Je ne vois pas comment ta formule de récurrence va te donner la moyenne. Il suffit de faire le test avec 3 valeurs.

    (n−1)Xn−1 : comment veux-tu pouvoir mémoriser le cumul des n-1 valeurs précédentes en multipliant le nombre de valeurs précédentes par la moyenne précédemment calculée?

    Xn=(ValueLuen + Xn−1) est suffisant pour calculer le cumul.

    Reste à coder tout ça en C.
    Dernière modification par Jack ; 18/09/2019 à 16h28.

  11. #10
    Hichamrol

    Re : La moyenne des valeurs lues

    Jack vous pouvez essayer avec 3 valeur par exemple 2 - 3 - 5 c'a fait 10 et N=3
    alors tu vas trouvé exactement 3.333333

  12. #11
    Ikhar84
    Animateur Informatique

    Re : La moyenne des valeurs lues

    Peut on voir un code ou au moins un algo ?

    "Cumuler" dans un tableau ne fera qu'utiliser inutilement de la mémoire, sans compter le fait que tu ne connais pas la taille du tableau au lancement (à moins que tu ne limites les saisies ?).

    Jack t'a expliqué comment retrouvé le cumul, avec une seul variable + la nouvelle valeur saisie.
    Tu n'as besoin de connaître que le nombre de saisies pour ensuite recalculer la nouvelle moyenne.
    J'ai glissé Chef !

  13. #12
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    Jack vous pouvez essayer avec 3 valeur par exemple 2 - 3 - 5 c'a fait 10 et N=3
    alors tu vas trouvé exactement 3.333333
    Houlà, je n'avais pas compris la subtilité.
    A chaque tour, tu multiplies la moyenne précédente par le nombre de valeurs précédentes pour recalculer le cumul. C'est un peu tordu et surtout complètement inefficace.

    Tu ferais mieux de suivre ce qu'Ikhar84 et moi te conseillons: calculer tout simplement le cumul des valeurs entrées et seulement une fois la saisie terminée, calculer la moyenne.

  14. #13
    Hichamrol

    Re : La moyenne des valeurs lues

    oui car à chaque tour il faut que j'affiche la moyenne, et en même temps ne pas perdre la mémoire, car si je cumule jusqu'à la fin il faut déclarer une variable plus grand ,

  15. #14
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    oui car à chaque tour il faut que j'affiche la moyenne
    Non, c'est contre productif.
    C'est comme ça que tu ferais si je te donnais une série de valeur pour en faire la moyenne?

    car si je cumule jusqu'à la fin il faut déclarer une variable plus grand
    C'est-à-dire ??? C'est quoi cette histoire de variable plus grande?

  16. #15
    Hichamrol

    Re : La moyenne des valeurs lues


    C'est-à-dire ??? C'est quoi cette histoire de variable plus grande?
    alors je vais t'expliquer, si tu a un tableau pour mémoriser 2000 échantillonne qu'ils arrivent d'un autre système ... supposons que tu a déclaré le tableau comme uint16_t tab[2000], cad pour une seule case mémoire il faut pas dépasser FFFF (65535 en décimal),
    mnt l'autre système envoie des valeurs entre 20000 et 30000 et supposons que le nombre total d'envoie est 10(cad a chaque coup il faut enregistrer 2000pts dans le tableau ) alors 10*(valeur entre 20000 et 30000) il va être grand, et une case mémoire de tab[i] va pas supporter des valeurs plus grand que 16bits ,
    donc si je fais la methode de cumule , il faut que je déclare mon tableau 32bit ou 64 bits .... et imagine 32bits*2000 ou bien 64*2000 ça va consommer énormément de la mémoire RAM ....
    j’espère que vous avez compris

  17. #16
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    donc si je fais la methode de cumule , il faut que je déclare mon tableau 32bit ou 64 bits .... et imagine 32bits*2000 ou bien 64*2000 ça va consommer énormément de la mémoire RAM
    Ton raisonnement ne tiens pas debout: encore une fois, il n'y a pas besoin de tableau, juste de 2 variables. Du coup il n'y a plus vraiment de problème de place en RAM.

  18. #17
    polo974

    Re : La moyenne des valeurs lues

    Bonjour,
    d'abord, il semble que la moyenne soit un float ou un double.
    Attention aux problèmes d'arrondis qui se cumulent.
    il est fortement déconseillé de diviser / re multiplier par le nb d'échantillons.
    et au-delà d'une certaine précision (nombre de digits), la sommation des échantillons finira aussi par être fausse.

    un float ou un double n'est pas un nombre réel (au sens mathématique). c'est une passoire avec plein de trous entre 2 valeurs successives, et ces trous s'agrandissent au fur et à mesure que le nombre grandi (en valeur absolue).
    Jusqu'ici tout va bien...

  19. #18
    Ikhar84
    Animateur Informatique

    Re : La moyenne des valeurs lues

    Citation Envoyé par polo974 Voir le message
    Attention aux problèmes d'arrondis qui se cumulent.*
    il est fortement déconseillé de diviser / re multiplier par le nb d'échantillons.
    C'est ce que l'on essaie d'expliquer en vain à Monsieur, avec le fait qu'un tableau c'est inutile et casse gueule...

    Evidemment la moyenne n'est pas un entier...

    Encore une fois, pas le moindre code ou algo en vue ...

    Cela permettrait de comprendre la logique envisagée, ainsi que comment est "terminé" le prog...
    Dernière modification par Ikhar84 ; 19/09/2019 à 11h22.
    J'ai glissé Chef !

  20. #19
    invite73192618

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    Xn=(ValueLuen+(n−1)Xn−1)/n
    Cela semblera marcher, et c'est effectivement une traduction directe de quelque chose qu'on pourrait faire à la main, mais comme mentionné c'est une solution qu'on essai d'éviter pour cause d'inefficience, mais aussi pour cause d'instabilité numérique (i.e. la division accumulera des erreurs d'arrondi).

    La solution de Jack est presque tout le temps la meilleure: conserver uniquement des additions , et la division est faite uniquement sur appel.

    Code:
    X = X + ValueLue
    N = N + 1
    si appel alors retourne X / N
    Une variation légère est d'accumuler uniquement les résidus avec trois variables: une moyenne M, un résidu R, et le N.

    Code:
    R = R + ValueLue - M
    N = N + 1
    si appel alors M = M + R // N; R = R % N; retourne M
    Dépendant des cas la seconde solution peut être un peu plus robuste ou un peu moins gourmande.

    Bref, c'est un problème faussement trivial, et si on est en C c'est qu'on veut de la performance. Parmi les autres améliorations possibles: se restreindre à des divisions par la base de numération, ce qui permet de faire la division de façon inhabituellement efficace (diviser par 10, en base 10, revient à déplacer la virgule d'un cran. Même chose pour la division par 2, en base 2).; et surtout, paralléliser l'algorithme.

  21. #20
    danyvio

    Re : La moyenne des valeurs lues

    J'ai à nouveau réfléchi au problème tel qu'il avait été posé initialement. On peut exhiber la moyenne à chaque entrée sans "trainer" le cumul des valeurs précédentes

    Soit Mn la moyenne des n premiers nombres entrés. Appelons V les valeurs.

    Alors Mn + 1 = Mn+(Vn+1-Mn)/(n+1)

    En développant à droite on retrouve bien = (Mn(n+1)+]+(Vn+1-Mn)(n+1)=(n.Mn+Mn+Vn+1-Mn)(n+1)

    =(n.Mn+Vn+1)(n+1)

    n.Mn étant Sn la somme des n premiers nombres, on retrouve bien la formule classique Mn +1 = (Sn+Vn +1)/(n + 1)

    Pas de garantie concernant les pertes de décimales..
    On trouve des chercheurs qui cherchent ; on cherche des chercheurs qui trouvent !

  22. #21
    Hichamrol

    Re : La moyenne des valeurs lues

    Oui effectivement , il ya un problème de cumul d'arrondi ... par contre si je déclare mon tableau de type float ça va prendre plus de RAM mémoire et je tombe dans le même problème de début ....

  23. #22
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    par contre si je déclare mon tableau ....
    J'abandonne!

  24. #23
    Hichamrol

    Re : La moyenne des valeurs lues

    Jack , je pense que vous avez pas bien compris le problème ... en fait je suis entrain de programmer un pic , et j'ai déjà
    98% de RAM utilisé , donc je suis dans la galère ....

  25. #24
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Donc, si je suis bien ta logique, tu manques de RAM, donc tu utilises un tableau d'entiers plutôt que 2 entiers

  26. #25
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Puisqu'il s'agit d'un cas concret, il serait bon de spécifier un vrai cahier des charges:
    - combien de valeurs
    - étendue des valeurs
    - précision attendue de la moyenne
    - etc.

    De plus, puisqu'il s'agit de la programmation d'un PIC, il serait bon de savoir lequel: avec un PIC24, on peut raisonnablement utiliser des flottant alors qu'avec un PIC16, c'est plutôt déconseillé.
    Dernière modification par Jack ; 21/09/2019 à 20h09.

  27. #26
    Hichamrol

    Re : La moyenne des valeurs lues

    oui j'utilise des tableau uint16_t voie[10000] car je stocke des échantillonnes , le problème se trouve quand N par exemple = 30 , et les échantillonnes sont des valeurs entre 0x07FF et 0x0FFF , alors les derniers valeur qui s'arrives vont pas etre cumulé dans voie[1] par exemple .... tu vois où est le problème mnt

  28. #27
    Hichamrol

    Re : La moyenne des valeurs lues

    donc à chaque fois que je reçois un déclenchement(cad N augmente ), je dois effectuer la moyenne tu voie[] précédent avec le nouveau voie[]... question de syncronisation

  29. #28
    Hichamrol

    Re : La moyenne des valeurs lues

    et à cause de ça je dois effectuer la moyenne au fur et a mesure , mais puisque j'ai déclaré le voie comme entier , je tombe dans le problème de cumule d'arrondi...

  30. #29
    Ikhar84
    Animateur Informatique

    Re : La moyenne des valeurs lues

    Citation Envoyé par Hichamrol Voir le message
    Jack , je pense que vous avez pas bien compris le problème ... en fait je suis entrain de programmer un pic , et j'ai déjà
    98% de RAM utilisé , donc je suis dans la galère ....
    C'est surtout que ne nous a pas dit grand chose du problème !

    Si tu pouvais détailler la problématique exacte (et surtout lire les réponses) ...

    Par exemple pourquoi cumuler les valeurs ?
    Vont elles être utilisées pour autre chose que le calcul de la moyenne

    Edit: croisement avec Jack !
    Dernière modification par Ikhar84 ; 21/09/2019 à 20h32.
    J'ai glissé Chef !

  31. #30
    Jack
    Modérateur

    Re : La moyenne des valeurs lues

    Il n'y a toujours aucun intérêt à utiliser un tableau, même en ayant besoin de la valeur de la moyenne à chaque nouvel échantillon: on cumule, dans un uint32_t pour éviter les débordements et on divise par le nombre d'échantillons. Donc une variable pour le cumul, une pour le nombre d'échantillons, une pour l'échantillon et une dernière pour la moyenne et voila comme on évite de gaspiller de la RAM inutilement.

    Quel est le but de ce calcul de moyenne?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Inventer valeurs correspondant à une moyenne
    Par lefgolas dans le forum Mathématiques du collège et du lycée
    Réponses: 27
    Dernier message: 19/01/2015, 09h37
  2. Clé USB 64 GB lues en 32 GB
    Par alfounet dans le forum Matériel - Hardware
    Réponses: 7
    Dernier message: 05/10/2014, 10h01
  3. Valeurs moyenne en physique quantique
    Par invite929717f9 dans le forum Physique
    Réponses: 2
    Dernier message: 30/03/2008, 22h42
  4. calculer la moyenne et l'ecart type a partir de 2 valeurs alpha?
    Par inviteb46631d8 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 06/10/2007, 14h23
  5. nb de plages lues par un lecteur.
    Par Keorl dans le forum Technologies
    Réponses: 5
    Dernier message: 23/03/2005, 20h02