IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Variance et tables dynamiques


Sujet :

Free Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Variance et tables dynamiques
    Pour vous éviter de longues recherches, voici quelques observations que j'ai pu faire autour de l'utilisation de la variance, avec un parallèle par rapport aux fonctions similaires en Excel.

    - La fonction TotalVariance(array) est identique à la fct VAR.P() d'Excel mais non divisée par le nombre d'items de la série
    Il faut donc encore faire un TotalVariance(array) / N
    - NB: la fonction VAR() d'Excel correspond à ((V1-Moyenne)^2 + (V2-Moyenne)^2 + (V3-Moyenne)^2) /2, donc N-1 et non pas /3 !!
    VAR.P() divise bien quant à elle par le nombre d'items N

    - Si vous utilisez un tableau dynamique... il faudra préciser le nombres de valeurs à adresser, contrairement à un tableau statique,
    sinon le résultat sera pour moi quelconque:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Type
      Tab = Array of Float;
    Var
      TestTab : Tab;
    Begin
    Setlength(TestTab, 10);
    ...  ajoutez ici une alimentation de votre table TestTab...
    
    TabVariance(TestTab);  //  Résultat quelconque ici mais qui serait correct avec une table statique
    TabVariance(TestTab[1..10];  //  Résultat correct et attendu!
    Je n'ai personellement pas trouvé le moyen d'extraire une variance sur une table à deux dimensions...
    Si qq peut confirmer que c'est impossible...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    j:=1;
    TabVariance(array[j,1..10])
    ne donne rien

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Bienvenue dans le forum et merci pour cette contribution !

    Pour ma part, je ne connaissais ni cette notion ni cette fonction.

    J'ai testé cet exemple avec FreePascal 2.6.4 : le deuxième appel de la fonction donne une erreur.

    Can't determine which overloaded function to call
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par michelf001 Voir le message
    Je n'ai personnellement pas trouvé le moyen d'extraire une variance sur une table à deux dimensions...
    Le code suivant passe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    type
      T2 = array[1..100, 1..100] of float;
     
    var
      b: T2;
      v: float;
     
    begin
      ...
      v := TotalVariance(b[1]);
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  4. #4
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut Ah les stats...
    Salut,

    Il suffit de consulter le code de l'unité Math pour trouver les codes de calculs, il y a une série de fonctions identiques pour les trois types réels: Single, Double et Extended.
    Je ne ferai pas de parallèle avec les fonctions Excel (dont je ne dispose pas).

    Effectivement, TotalVariance retourne une quantité qu'il faut diviser par N (taille de la population) pour obtenir la variance au sens habituel (cf Wikipedia), ce que ne fait pas la fonction Variance de la bibliothèque Math, elle divise par N-1, attention donc... Cela ressemble au calcul de l'estimateur sans biais.
    Attention aussi à StdDev (écart type) qui travaille avec cette fonction Variance de Math.

    Ce sont les fonctions popnvariance et popnstddev qui correspondent à la variance et l'écart moyen type habituel (en tout cas comme je l'ai appris), dans celles-ci, la quantité TotalVariance est divisée par N.

    L'avis d'une personne maîtrisant mieux les calculs statistiques serait utile pour apprécier l'implémentation.

    L'emploi d'un tableau dynamique ne suppose pas de passer la taille de la population (le paramètre n'existe pas de toutes façons), la fonction fait l'hypothèse que le tableau contient exactement la population et en déduit la taille (identique à celle du tableau). La taille doit être préciser si l'on utilise un pointeur sur les données.

    Je n'ai personellement pas trouvé le moyen d'extraire une variance sur une table à deux dimensions...
    Si qq peut confirmer que c'est impossible...
    Facile à confirmer, en tout cas dans l'unité math, les fonctions disponibles ne concerne que des tableaux à une dimension.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  5. #5
    Candidat au Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de compte

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Super merci!
    Merci à tous pour vos contributions
    Je ne suis pas non plus un ferru de math, mais je viens de redébuter avec FPC, soit via DEV-Pascal pour des développements "batch" ou Lazarus, et je redécouvre une joie passée de développer par moi-même!

    Ces produits sont pour moi formidables, n'en déplaise aux aficionados de C++, JAVA, etc que je respecte, mais dont je ne suis malheureusement pas. Je développais auparavant en Turbo Pascal, vous l'aurez compris!

    A+ sur ce forum

    NB: merci pour les balises code - je n'avais pas vu cette fonction

  6. #6
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Bon retour dans le monde du développement.

    Avis perso :
    - laisse tomber Dev-Pascal dont le compilo FreePascal est ancien
    - la dernière version de Lazarus est alignée sur la celle de FreePascal

    Le langage a gagné beaucoup d'évolutions depuis Turbo Pascal que je trouve dépassé et à éviter tant que possible.

    La programmation en Pascal vaut bien celle en Java et en C++ pour la plupart des applications avec une syntaxe plus claire à mon sens.
    N'hésite pas à revenir en cas de besoin.

    Cdlt

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par e-ric Voir le message
    - laisse tomber Dev-Pascal dont le compilo FreePascal est ancien
    Rien n'empêche de remplacer le compilateur. Cela ne prend qu'une minute et un tutoriel est même disponible qui explique la procédure à suivre :

    Installation de Dev-Pascal en français sous Windows 7
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

  8. #8
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Oui Roland, mais:
    - DevPascal est uniquement Windows-ien (si michelf001 tente un jour de passer à Linux p.ex., il lui faudra de toutes façons apprendre un autre IDE).
    - Lazarus est fonctionnellement plus riche,
    - enfin, je ne suis pas sûr que la coloration syntaxique de Dev-Pascal suivent les dernières évolutions de FreePascal.

    Pour TurboPascal, la compatibilité est utile pour reprendre des vieux sources, mais je pense qu'une vraie migration (p.ex. class à la place d'object, sans parler des scories 16 bits de TP7 comme far, near ...) est à terme incontournable.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

  9. #9
    Membre à l'essai
    Homme Profil pro
    ingenieur
    Inscrit en
    Octobre 2012
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ingenieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 22
    Points : 17
    Points
    17
    Par défaut calcul d'une variance d'un tableau à N dimensions
    je ne connaissais pas non plus cette fonction.
    Personnellement lorsque je dois calculer une variance ou un écart type afin
    de mesurer une dispersion, je reviens à la formule mathématique
    seul moyen de ne pas se tromper
    V(x) = ∑ ni (Xi - Xb)2
    -------------
    N
    avec Xb la moyenne de toutes les valeurs
    ni le nombre de fois ou la valeur est présente
    et N le nombre totale des valeurs
    en programmation cela donne :
    - calculer la moyenne
    - calculer Xi - la moyenne puis l'élever au carre
    - multiplier par le nombre de valeurs semblables ou 1 si une valeur
    - faire la somme
    - puis diviser par N

  10. #10
    Membre expert
    Avatar de e-ric
    Homme Profil pro
    Apprenti chat, bienfaiteur de tritons et autres bestioles
    Inscrit en
    Mars 2002
    Messages
    1 550
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti chat, bienfaiteur de tritons et autres bestioles

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 550
    Points : 3 916
    Points
    3 916
    Par défaut
    Salut,

    Le syndrôme NIH ("not invented here") sans doute.

    Il reste intéressant d'employer les fonctions existantes :
    - gain de temps à l'écriture
    - gain de temps en mise au point, dans le cas où les fonctions ont été testées bien sûr, mais il n'y a pas vraiment moyen de vérifier ce dernier point.
    - gain en documentation, quand une documentation standard existe...

    Le problème est d'en connaître l'existence.

    L'absence d'une documentation claire et facile à trouver est plus embêtante, notamment pour les novices ou les personnes pressées. Je n'ai pas eu trop de mal à répondre à michelf001 car le code est accessible, bien écrit et que je peux évaluer et comprendre assez rapidement, du fait de mon expérience. Avec du code mal écrit ou portant sur un domaine que je ne connais pas, l'exercice aurait été plus compliqué, je n'aurais d'ailleurs certainement pas répondu de peur de dire des âneries.

    Dans un projet libre complexe comme un compilateur et son environnement, je comprend l'incomplétude des docs et d'éventuels bugs mais dans les logiciels payants (comme M$ Office p.ex.) c'est franchement de la provocation voire une escroquerie.

    Pour les tests, leur absence n'est pas irrémédiable car il est possible de mettre en place des tests unitaires pour les fonctions "standard" afin d'estimer leur qualité à partir de cas simples et maîtrisés par exemple.

    M E N S . A G I T A T . M O L E M
    Debian 64bit, Lazarus + FPC -> n'oubliez pas de consulter les FAQ Delphi et Pascal ainsi que les cours et tutoriels Delphi et Pascal

    "La théorie, c'est quand on sait tout, mais que rien ne marche. La pratique, c'est quand tout marche, mais qu'on ne sait pas pourquoi. En informatique, la théorie et la pratique sont réunies: rien ne marche et on ne sait pas pourquoi!".
    Mais Emmanuel Kant disait aussi : "La théorie sans la pratique est inutile, la pratique sans la théorie est aveugle."

Discussions similaires

  1. Réponses: 5
    Dernier message: 25/07/2005, 15h03
  2. [langage] Table Dynamique sous PERL ?
    Par Slippers dans le forum Langage
    Réponses: 9
    Dernier message: 09/02/2005, 09h30
  3. input ds une table dynamique
    Par mamouna dans le forum ASP
    Réponses: 32
    Dernier message: 30/06/2004, 19h12
  4. [C#] DropDownList dans un Table dynamiquement
    Par Mourad dans le forum ASP.NET
    Réponses: 12
    Dernier message: 30/04/2004, 16h09
  5. Gestion de table dynamique access avec delphi 7
    Par bob.marley dans le forum Bases de données
    Réponses: 7
    Dernier message: 22/04/2004, 14h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo