Forum Liberty Basic France

Général » Les Aléas Prise de tete assurée
Le 06/07/2012 à 01h29

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
J'aimerais avoir l'avis des forts en maths sur ce programme dont je trouve les résultats surprenants.
J'ai l'impression que les calculs: Laplace A et B sont inversés
Et que dire des puissances de dix qui apparaissent dans les résultats
Au passage, si quelqu'un peut me confirmer que JB ne prend pas les nombres négatifs tels que: x= - 3
Mais qu'il faut faire: x= 0 - 3.

Code JB :
 
 
  'Aléas---De: Bernouilli---Poisson---Laplace---Gauss
  ' Clear est facultatif (vidage d'écran), les données sont lues à chaque "calcul"
   nomainwin
    WindowWidth  = 560
    WindowHeight = 510
    UpperLeftX   = (DisplayWidth-WindowWidth)/2
    UpperLeftY   = (DisplayHeight-WindowHeight)/2
 
    STATICTEXT #w, "ALEA DE :", 5, 10, 70, 20
    STATICTEXT #w, "Permet de calculer la probabilité:", 80, 10, 160, 20
    STATICTEXT #w.des1, "", 100, 35, 200, 20
    STATICTEXT #w.des2, "", 100, 55, 200, 20
    STATICTEXT #w.des3, "", 100, 75, 200, 20
    STATICTEXT #w.des4, "", 100, 95, 200, 20
    button #w.ber, "Bernoulli", [ber], UL, 5, 30, 80, 25
    button #w.poi, "Poisson", [poi], UL, 5, 55, 80, 25
    button #w.lap, "Laplace", [lap], UL, 5, 80, 80, 25
    button #w.gau, "Gauss", [gau], UL, 5, 105, 80, 25
    STATICTEXT #w.mod, "", 10, 150, 80, 40
    STATICTEXT #w.q1, "", 200, 75, 160, 20 ' Nombre Tirages Bernoulli
    TEXTBOX #w.rep1, 360, 72, 40, 20
    STATICTEXT #w.q1a, "", 140, 123, 210, 20 ' Proba /Tirage
    TEXTBOX #w.rep1a, 360, 120, 40, 20
    button #w.calcb, "Calcul Bernoulli", [calcb], UL, 405, 120, 90, 20
    STATICTEXT #w.q1b, "", 310, 10, 260, 20
    STATICTEXT #w.q1ba, "", 300, 37, 30, 20
    TEXTBOX #w.rep1ba, 335, 35, 40, 20
    STATICTEXT #w.q1bb, "", 420, 37, 30, 20
    TEXTBOX #w.rep1bb, 455, 35, 40, 20
    STATICTEXT #w.q2, "", 120, 150, 230, 20 ' Even / Temps Poisson
    TEXTBOX #w.rep2, 360, 147, 40, 20
    button #w.calcp, "Calcul Poisson", [calcp], UL, 405, 147, 90, 20
    STATICTEXT #w.q3, "", 120, 175, 230, 20 ' Even / Temps Laplace
    TEXTBOX #w.rep3, 360, 172, 40, 20
    STATICTEXT #w.q3pr, "", 5, 225, 345, 20
    TEXTBOX #w.rep3a, 360, 222, 40, 20
    button #w.calcla, "< Laplace Calcul A", [calcla], UL, 405, 222, 105, 20
    STATICTEXT #w.q3b, "", 150, 250, 200, 20
    TEXTBOX #w.rep3b, 360, 247, 40, 20
    button #w.calclb, "< Laplace Calcul B", [calclb], UL, 405, 247, 105, 20
    STATICTEXT #w.q3c, "", 110, 277, 115, 20
    TEXTBOX #w.rep3ca, 230, 275, 40, 20
    STATICTEXT #w.q3cpr, "", 280, 277, 70, 20
    TEXTBOX #w.rep3cb, 360, 275, 40, 20
    button #w.calclc, "< Laplace Calcul C", [calclc], UL, 405, 275, 105, 20
    STATICTEXT #w.q4, "", 10, 307, 60, 20 ' Moyenne Gauss
    TEXTBOX #w.rep4, 80, 305, 40, 20
    STATICTEXT #w.q4a, "", 170, 307, 60, 20 ' Ecart type
    TEXTBOX #w.rep4a, 235, 305, 40, 20
    STATICTEXT #w.q5, "", 10, 332, 120, 20 ' Limite Inf
    TEXTBOX #w.rep5, 135, 330, 40, 20
    STATICTEXT #w.q5a, "", 230, 332, 120, 20 ' Limite Super
    TEXTBOX #w.rep5a, 360, 330, 40, 20
    button #w.calcg, "< Calcul Gauss", [calcg], UL, 405, 330, 105, 20
    STATICTEXT #w.q5a, "", 230, 332, 120, 20
    STATICTEXT #w, "RESULTATS:", 230, 370, 80, 20
    STATICTEXT #w.repo1, "", 10, 400, 270, 20
    TEXTBOX #w.resu1a, 280, 400, 40, 20
    STATICTEXT #w.repo1b, "", 325, 400, 25, 20
    TEXTBOX #w.resu1b, 355, 400, 40, 20
    STATICTEXT #w.repo1a, "", 400, 400, 30, 20
    STATICTEXT #w.repo11, "EST:", 50, 433, 40, 20
    TEXTBOX #w.resu1c, 90, 430, 100, 20
    button #w, "CLEAR", [new], UL, 450, 400,45, 25
    STATICTEXT #w.verif, "Report Entrées-->:", 205, 443, 90, 20
    TEXTBOX #w.veria, 295, 440, 50, 20
    TEXTBOX #w.verib, 350, 440, 60, 20
    TEXTBOX #w.veric, 415, 440, 60, 20
    TEXTBOX #w.verid, 480, 440, 60, 20'  410
 
    open " Les Aléas..." for window_nf as #w
    #w "trapclose [quit]"
 
  wait
 
  [ber]
  gosub [eff]
    print  #w.des1, "qu'a un évenement de se produire"
    print  #w.des2, "un certain nombre de fois"
    print  #w.des3, "au cours de N tirages."
    print  #w.q1, "...........Nombre de tirages ? - ->"
    print  #w.q1a, "Proba Evenement: 0 < p < 1 par tirage ? -->"
    print  #w.q1b, "Donner k1 et k2 encadrants le nombre de fois"
    print  #w.q1ba, "k1 -->"
    print  #w.q1bb, "k2 -->"
    print  #w.mod, "En cours: BERNOULLI"
 
  wait
                                  '           k     n!
  [calcb]  '----------- calcul Bernoulli.....C = --------
                                  '           n   k!(n-k)!
     print #w.rep1, "!contents? var$"
     n = val(var$)
     print #w.rep1a, "!contents? var$"
     r = val(var$)
      print #w.rep1ba, "!contents? var$"
      k1 = val(var$)
     print #w.rep1bb, "!contents? var$"
     k2 = val(var$)
     print #w.veria, "n=";str$(n)
     print #w.verib, "r=";str$(r)
     print #w.veric, "k1=";str$(k1)
     print #w.verid, "k2=";str$(k2)
 
    c=0:p=0
    for k= k1 to k2
      p=r^k*(1 -r)^(n-k): if k=0 then goto [pon1]
      for a=1 to k
        p=p/a*(n-k+a)
      next a
  [pon1]
    c=c+p
    next k
    print #w.repo1, "La probabilité pour que l'évenement se produise entre >"
    print #w.repo1a, " Fois "
    print #w.repo1b, " Et >"
    print #w.repo11, "EST:"
    print #w.resu1a, str$(k1)
    print #w.resu1b, str$(k2)
    print #w.resu1c, str$(c)
  wait       '
   '..........................................
  [poi]
  gosub [eff]
    print  #w.des1, "qu'a un évenement de se produire"
    print  #w.des2, "plusieurs fois dans un intervalle"
    print  #w.des3, "de temps connaissant sa fréquence "
    print  #w.des4, "moyenne."
    print  #w.q2, "Nombre moyen d'évenements /unité temps ? - ->"
    print  #w.q1b, "Donner k1 et k2 encadrants le nombre de sorties"
    print  #w.q1ba, "k1 -->"
    print  #w.q1bb, "k2 -->"
     print  #w.mod, "En cours: POISSON"
  wait                                '                 k
                                      '           -m  m
  [calcp] '------------calcul Poisson.......P(k)=e   ---
                                      '               k!
     print #w.rep2, "!contents? var$"
     m = val(var$)
      print #w.rep1ba, "!contents? var$"
      k1 = val(var$)
     print #w.rep1bb, "!contents? var$"
     k2 = val(var$)
     print #w.veria, "m=";str$(m)
     print #w.verib, "k1=";str$(k1)
     print #w.veric, "k2=";str$(k2)
 
    c=0:p=0
    for k=k1 to k2
      p=m^k/exp(m): if k=0 goto [pon2]
 
      for a=1 to k
        p=p/a
      next a
  [pon2]
    c=c+p
    next k
    print #w.repo1, "La probabilité pour que l'évenement se produise entre >"
    print #w.repo1a, " Fois "
    print #w.repo1b, " Et >"
    print #w.repo11, "EST:"
    print #w.resu1a, str$(k1)
    print #w.resu1b, str$(k2)
    print #w.resu1c, str$(c)
  wait
  '................................................
  [lap]
  gosub [eff]
    print  #w.des1, "pour q'un évenement se produise"
    print  #w.des2, "avant un temps donné, connaissant"
    print  #w.des3, "sa fréquence moyenne"
    print  #w.des4, "par unité de temps."
    print  #w.q3, "Nombre moyen d'évenements /unité temps ? - ->"
    print  #w.q3pr, "Voulez vous la proba qu'a l'évenement:-- D'arriver avant un temps--> t -->"
    print  #w.q3b, "--De ne pas arriver avant un temps--> t -->"
    print  #w.q3c, "--D'arriver entre --> t 1 -->"
    print  #w.q3cpr, "-- Et --> t 2 -->"
     print  #w.mod, "En cours: LAPLACE"
  wait  '++++++++++++++++++++++++++    '               -mx
  [calcla]  '----------calculs Laplace A .....P(x)= 1-e
     print #w.rep3, "!contents? var$"
     m = val(var$)
     print #w.rep3a, "!contents? var$"
     x = val(var$)
     print #w.veria, "m=";str$(m)
     print #w.verib, "x=";str$(x)
 
    mm=0 - m: p=0
    p=1-exp(mm*x)
    print #w.repo1, "La probabilité recherchée"
    print #w.repo11, "EST:"
    print #w.resu1c, str$(p)
  wait  '+++++++++++++++++++++Laplace B ....
  [calclb]
     print #w.rep3, "!contents? var$"
     m = val(var$)
     print #w.rep3b, "!contents? var$"
     x = val(var$)
     print #w.veria, "m=";str$(m)
     print #w.verib, "x=";str$(x)
 
    mm=0 - m: p=0
    p=exp(mm*x)
    print #w.repo1, "La probabilité recherchée"
    print #w.repo11, "EST:"                '              -mx      mx
    print #w.resu1c, str$(p)               '                 1       2
  wait  '+++++++++++++++++++++Laplace C .......P(x2-X1)= e     -  e
  [calclc]
     print #w.rep3, "!contents? var$"
     m = val(var$)
     print #w.rep3ca, "!contents? var$"
     x1 = val(var$)
     print #w.rep3cb, "!contents? var$"
     x2 = val(var$)
     print #w.veria, "m=";str$(m)
     print #w.verib, "x1=";str$(x1)
     print #w.veric, "x2=";str$(x2)
 
    mm=0 - m: p=0
    p=exp(mm*x1) - exp(mm*x2)
    print #w.repo1, "La probabilité recherchée"
    print #w.repo11, "EST:"
    print #w.resu1c, str$(p)
  wait
  '.....................................................
  [gau]
  gosub [eff]
    print  #w.des1, "qu'a une variable de moyenne et"
    print  #w.des2, "d'écart type donnés de "
    print  #w.des3, "se trouver dans un intervalle."
    print  #w.q4, "Moyenne -->"
    print  #w.q4a, "Ecart type--> -->"
    print #w.q5, "Limite Basse Intervalle -->"
    print #w.q5a, "Limite Haute Intervalle -->"
     print  #w.mod, "En cours:   GAUSS"       '                                (u-m)^2
  wait                                    '              1             t    -(---------)du
   [calcg]  '---------------calcul Gausss.......P(t)=-----------  Somme    e    2sig^2
                                          '          sig sqr(2pi)     -inf
     print #w.rep4, "!contents? var$"
     m = val(var$)
     print #w.rep4a, "!contents? var$"
     sig = val(var$)
     print #w.rep5, "!contents? var$"
     x1 = val(var$)
     print #w.rep5a, "!contents? var$"
     x2 = val(var$)
 
     print #w.veria, "m=";str$(m)
     print #w.verib, "s=";str$(sig)
     print #w.veric, "x1=";str$(x1)
     print #w.verid, "x2=";str$(x2)
 
        '  coeff pour remplacement de l'intégrale par approx polynomiale
     a=0.2316419: b1=0.31938153: b2=0 - 0.35656378: b3=1.78147794
     b4=0 - 1.82125598: b5=1.33027443: pia=3.1416
     z=(x1-m)/sig: gosub [cyc]
     p1=p 'valeur de p issue de[cyc]
     z=(x2-m)/sig: gosub [cyc]
     p=p-p1   
     print #w.repo1, "La probabilité recherchée"
     print #w.repo11, "EST:"
     print #w.resu1c, str$(p)
  wait                                                              '                                           t^2
  [cyc]                                                       '                                              -  ---
    b=0: if z< 0 then z= 0 - z: b=1                     '                t-m          1               1          2
    v=1/(1+a*z) ' ........... approx polynomiale.....................Z= ------ ; v= ------ et P(t)= ----- . e       . v(b1+v.(b2+v.(b3+v.(b4+v.b5))))
    p=1 - 1/sqr(2*pia)*exp(0 -z*z/2)*v*(b1+v*(b2+v*(b3+v*(b4+v*b5)))) '    sig        1+a.Z            2pi
    if b=1 then p=1 - p
    return
  wait
 
  [new]
      print #w.rep1, "": print #w.rep1a,"": print #w.rep1ba, "": print #w.rep1bb, ""
      print #w.rep2, "":print #w.rep3, "":print #w.rep3a, "":print #w.rep3b, ""
      print #w.rep3ca, "":print #w.rep3cb, "":print #w.rep4, "":print #w.rep4a, ""
      print #w.rep5, "":print #w.rep5a, "":print #w.resu1a, "":print #w.resu1b, ""
      print #w.resu1c, "": print #w.veria, "": print #w.verib, "": print #w.veric, ""
      print #w.verid, ""
      m=0: r=0: k1=0: k2=0: x=0: x1=0: x2=0
  wait
  [eff]
     print #w.des1, "": print #w.des2, "": print #w.des3, ""
     print #w.des4, "": print #w.q1, "": print #w.q1a, ""
     print #w.q1b, "": print #w.q1ba, "": print #w.q1bb, ""
     print #w.q2, "": print #w.q3, "": print #w.q3pr, ""
     print #w.q3b, "": print #w.q3c, "": print #w.q3cpr, ""
     print #w.q4, "": print #w.q4a, "": print #w.q5, ""
     print #w.q5a, "": print #w.repo1, "": print #w.repo1b, ""
     print #w.repo1a, "": print #w.mod, ""
  return
 
wait
    [quit]
    close #w
    end
 
 
 
 
 
 




Edité par Roland Le 08/07/2012 à 18h33
____________________
Roro

   
Le 06/07/2012 à 09h55

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Oui, JB a ce petit défaut stupide : on doit bien écrire x= 0 - 3, sauf si c'est une var tableau apparemment !!!
Je l'ai testé dans Cresus.bas ou Chainreaction.bas avec les tableaux de direction :
dirX(1) = 0 : dirY(1) = -1 'up par exemple et ça fonctionne !


à part ça tu devrais donner un nom à tous tes contrôles STATICTEXT ...

Roland:
STATICTEXT #w, "ALEA DE :", 5, 10, 70, 20
STATICTEXT #w, "Permet de calculer la probabilité:", 80, 10, 160, 20


@+



Edité par cassiope01 Le 06/07/2012 à 09h57
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 06/07/2012 à 11h55

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Veux-tu dire que:
a)- Au lancement les statictext vides devraient afficher des étoiles en nombre égal au texte à venir.
b)- Qu'il vaut mieux mettre une extension, meme aux statictext qui ne seront pas modifiés.
(Qui seraient des enfants sans prénom, que JB pourrait ne pas reconnaitre)
Je l'ai fait avec les boutons ( en me disant que ça ne servait à rien...et que tu allais me le signaler)
D'aprés ta citation, je comprend que se serait: b)
____________________
Roro

   
Le 06/07/2012 à 14h14

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
b)
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 07/07/2012 à 08h27

Libertynaute

Groupe: Membre

Inscrit le: 18/10/2011
Messages: 73
Bonjour Roland,

Ne pourrais-tu pas indiquer quelques valeurs numériques qui conviennent, et pour lesquelles tu connais à coup sûr le résultat ? Cela permettrait déjà de les essayer et de voir ce qu'on obtient.

D'autre part il faudrait essayer les calculs dans une fenêtre texte (le MainWin), et ne les introduire dans un programme GUI que lorsqu'on est sûr qu'ils fonctionnent. C'est plus simple à débrouiller.

A+

Claude
____________________
Omnium populorum gallicorum bravissimi sunt Belgae.

Web    
Le 07/07/2012 à 13h10

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Les miennes conclusions: ( en étudiant les variations)
Le Bernoulli a l'air bon, rapport à l'exemple que j'ai dans le bouquin:
une femme espère 4 filles sur 6 enfants (proba nationale fille=0.487), tirage=6, k1=4, k2=6, p=0.319 (conforme à l'exemple). J'ai du mal avec le terme: "encadrant"
Le Poisson, est cohérent:
k1=1, k2=3, n/ut=0.3-->p=0.258 ;
k1=1, k2=3, n/ut=0.8-->p=0.541 ;
k1=2, k2=4, n/ut=0.8-->p=0.189
Le Laplace A est dans les choux: quoi que l'on donne comme "n event", et comme "t", il sort toujours: "0"
Le Laplace B, (ne pas arriver avant...) a l'air bon:
"n event"=1, "t"=3 --> "p"=0.49e-1 ;
"n event"=0.9, "t"=3 --> "p"=0.67e-1 ;
"n event"=0.9, "t"=4 --> "p"=0.27e-1
Le Gauss est cohérent, mais avec un problème.
Cohérent: ( sig-->écart-type )
moyenne=5, sig=0.5, limite = >1>10, p=1 ;
moyenne=5, sig=1, limite = >1>10, p=0.99
moyenne=5, sig=3, limite = >1>10, p=0.86
Le problème: si on donne: sig < 0.14 on reçoit une: "float underflow"(Ils donnent un exemple avec un sig=0.15, c'est donc bon, pour leur exemple) j'ai mis la formule, mais avec l'utilisation de l'approx polynomiale, c'est difficilement creusable, à part pour une super tronche)
Je suis loin d'etre de taille à me mesurer à ce genre de calcul....mais j'aime bien les proba's..Cordial salut.
____________________
Roro

   
Le 07/07/2012 à 14h55

Libertynaute

Groupe: Membre

Inscrit le: 18/10/2011
Messages: 73
En effet, je viens de vérifier à la main (mais avec mon crayon magique) ton calcul de distribution binomiale de Bernoulli, c'est tout à fait exact pour les trois essais que j'ai calculés, et l'affichage est correct.

Le terme "encadrants", je ne l'ai pas encore vu ailleurs, mais comme tu l'expliques, pour moi c'est bon.

Pour l'aide presqu'impossible, il faudrait un certain délai, difficile à déterminer. Remarque le conditionnel.

J'ai copié tes données pour usage ultérieur éventuel, à consommer d'ailleurs avec modération.
Et en tout cas pas avant que j'aie pris des giga-vitamines à dose massive.

@+

Claude



Edité par claudevdw Le 07/07/2012 à 15h08
____________________
Omnium populorum gallicorum bravissimi sunt Belgae.

Web    
Le 07/07/2012 à 21h39

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Je viens de rectifier, d'un misérable "a" minuscule. Le Laplace A fonctionne. Le terme " encadrant", il est en haut k1...k2.
Il ne reste que cette "underflow" avec sig < 0;14 bans "Gauss" qui demeure une enigme.



Edité par Roland Le 07/07/2012 à 21h43
____________________
Roro

   
Le 08/07/2012 à 09h03

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Code VB :
'  coeff pour remplacement de l'intégrale par approx polynomiale
     a=0.2316419: b1=0.31938153: b2=0 - 0.35656378: b3=1.78147794
     b4=0 - 1.82125598: b5=1.33027443: pia=3.1416
    if sig>0 then    '<----------- pour éviter une éventuelle division par zéro !
     z=(x1-m)/sig: gosub [cyc]
     p1=p
     z=(x2-m)/sig: gosub [cyc]
     p=p-p1
    end if
     print #w.repo1, "La probabilité recherchée"
     print #w.repo11, "EST:"
     print #w.resu1c, str$(p)
  wait                                                              '                                           t^2
  [cyc]                                                       '                                              -  ---
    b=0: if z< 0 then z= 0 - z: b=1                     '                t-m          1               1          2
    v=1/(1+a*z) ' ........... approx polynomiale.....................Z= ------ ; v= ------ et P(t)= ----- . e       . v(b1+v.(b2+v.(b3+v.(b4+v.b5))))
    p=1 - 1/sqr(2*pia)*exp(0 -z*z/2)*v*(b1+v*(b2+v*(b3+v*(b4+v*b5)))) '    sig        1+a.Z            2pi
    if b=1 then p=1 - p
    return
 ' wait   '<---- pas utile


pour rendre un nombre positif il vaut mieux faire -1*z même si ça semble la même chose que 0-z

donc pour l'EXP( ) ce serait plutôt exp(-1*(z*z)/2) peut-être...

voir l'ordre d'execusion des opérateurs mathématiques dans l'aide...
Expressions are evaluated in this order:

( ) expressions within parentheses are evaluated first

^ exponents are evaluated next

* / multiplication and division are evaluated next

+ - addition and subtraction are evaluated last




sinon l'erreur "float underflow" semble venir du calcul de l'EXP( ). Essaye en passant par une variable pour le paramètre que tu donnes à EXP( ) peut-être...!?

@+



Edité par cassiope01 Le 08/07/2012 à 09h05
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 08/07/2012 à 11h35

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
D'ac, je vais voir si ça change quelque chose.
Si ça ne change rien, je préfère le 0 - ,parce que le -1*, on peut croire qu'il appartient à l'équation, avec le: 0 -, je trouve que c'est plus "parlant"....J'essaie la variable.....
PS: Citation:
pour rendre un nombre positif
:lol
rePS: ce que je n'ai pas dit, c'est que ce code, (qui est du "Apple"), je l'ai mis en "Amstrad", et dans le simulateur, ( avec exactement la meme syntaxe), et il ne renvoie pas de: "float underflow", mais un résultat cohérent....Je creuse....à+
...........J'ai mis le nombre négatif en variable...La parenthèse en variable...essayé: exp(-1*(z*z)/2)... Rien n'y fait...
Je donne ma langue au chat....noir. ;)



Edité par Roland Le 08/07/2012 à 12h20
____________________
Roro

   
Le 08/07/2012 à 12h53

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
alors ce doit être un pb d'ordre d'execution des opérateurs mathématiques car c'est pas forcément standart selon les langages utilisés...
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Le 08/07/2012 à 13h55

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Bon, je reprend la bèche, je vais imposer l'ordre, on va bien voir.....
____________________
Roro

   
Le 08/07/2012 à 15h50

Libertynaute

Groupe: Membre

Inscrit le: 18/10/2011
Messages: 73
Je suis encore branché sur Bernoulli, je n'ai pas encore progressé vers les subtilités de Poisson.

Pour chaque élément du développement du binôme (de Newton), il faut calculer une combinaison de m termes pris n par n, que je note <m C n> à l'ancienne, sinon on n'en a pas fini avec la typographie.

Il me semble qu'on pourrait procéder comme suit, de manière simple et rapide, voire reposante, surtout si on supprime mes commentaires surabondants:

Code VB :
 
'Combinaisons.bas
'===========

'calcul des < mCn > combinaisons de m termes pris n par n

'resultat = m! / n! (m-n)!

'on utilise le calcul <ascendant> avec un petit avantage de simplicité et de vitesse,
'au lieu du calcul <descendant> traditionnel avec <...STEP -1>, plus lent

'exemples vérifiés "main"
'exemple: 6 éléments pris 4 par 4 => 15 combinaisons
'autre exemple : 10 éléments pris 8 par 8 => 45 combinaisons

m = 10
n = 8
 
resultat = 1    'si pas initialisé à 1, resultat = 0, pour tous les calculs et ce jusqu'à la fin

'/// on calcule d'abord  < m! / (m-n)! >,  càd < m * m-1 * m-2 * ... * m-n+1 >

    'au lieu de : FOR i = m TO (m - n + 1) STEP -1
FOR i = m - n + 1 TO m
resultat = resultat * i
NEXT i
 
'/// et maintenant on divise par n!

    'au lieu de : FOR i = n TO 1 STEP -1
FOR i = 1 TO n
resultat = resultat / i
NEXT i
 
'/// voyons donc ce résultat

PRINT STR$(m); " C "; STR$(n); " = "; resultat
 
 


Et pourquoi pas dans une Function Combi (m, n) ?
Ca peut encore servir à une autre occasion.




Edité par claudevdw Le 08/07/2012 à 16h14
____________________
Omnium populorum gallicorum bravissimi sunt Belgae.

Web    
Le 08/07/2012 à 17h06

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Supprimer les commentaires ! ? ! ? :| :heink . Meme pas en reve !
Les commentaires, il n'y en a jamais trop, voire jamais assez....Bon, voyons cette "Bernouillade"..... ;)
____________________
Roro

   
Le 08/07/2012 à 18h48

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
J'ai initialisé les variables, comme tu le fais pour " resultat", et j'ai ajouté un report des entrées.
____________________
Roro

   
Le 10/07/2012 à 16h33

Administrateur

Groupe: Administrateur

Inscrit le: 04/03/2012
Messages: 2083
Salut de l'aprem', ...Cassiope, j'ai un code en cours de défrichage (encore un petit jeu débile...)
Veut-tu le voir ?....sans engagement... oeuf corse! :p
____________________
Roro

   
Le 10/07/2012 à 16h35

Libertynaute Expert

Groupe: Membre

Inscrit le: 19/02/2011
Messages: 767
Moi aussi...
Mais envois toujours :top

@+
____________________
Devise Shadocks : "Mieux vaut mobiliser son intelligence pour des conneries, que mobiliser sa connerie pour des choses intelligentes"
Coluche disait : "C'est parce que la vitesse de la lumière est plus rapide que celle du son que certains peuvent paraîtrent brillants jusqu'à ce qu'ils ouvrent la bouche."

Web    
Général » Les Aléas Prise de tete assurée  

 |  |

1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie