Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
math_decimal_bernoulli [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


math_decimal_bernoulli

Warning: Undefined array key 4 in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/html.php on line 1453

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision Les deux révisions suivantes
math_decimal_bernoulli [2010/03/16 11:39]
tyrtamos créée
math_decimal_bernoulli [2010/03/16 13:01]
tyrtamos
Ligne 15: Ligne 15:
   * avec <m>B_0 = 1</m>   * avec <m>B_0 = 1</m>
  
-  * et <m>B_i = 0</m> si i nombre impair >1+  * et <m>B_i = 0</m> si i est un nombre impair supérieur à 1 
 + 
 +Dans cette formule: 
 + 
 +  * <m>{C_{n+1}}^k</m> est le nombre de combinaison de n+1 objets pris k à k (voir analyse combinatoire sur ce site) 
 + 
 +  * <m>{B_k}</m> est le nombre de Bernoulli pour la valeur k 
 + 
 +Mais en quoi cette équation est-elle "récurrente"? 
 + 
 +Pour le savoir, développons pour n=3: 
 + 
 +  * <m>{{{C_{4}}^0}*{B_0}} ~+~ {{{C_{4}}^1}*{B_1}} ~+~ {{{C_{4}}^2}*{B_2}} ~+~ {{{C_{4}}^3}*{B_3}} ~=~ 0</m> 
 + 
 +Il faudrait donc que l'on puisse calculer <m>B_3</m>
 + 
 +Mais là, on voit bien le problème: on connait <m>{B_0}=1</m> par définition, mais pour calculer <m>B_3</m>, il faut calculer avant: <m>B_1</m> et <m>B_2</m>
 + 
 +Comment? En appliquant la formule pour n=1 et n=2 et, à chaque fois, en calculant le dernier B. 
 + 
 +Voilà le code qui fait cela (Python version 2.6): 
 + 
 +<code python> 
 +#!/usr/bin/python 
 +# -*- coding: utf-8 -*- 
 +from __future__ import division 
 + 
 +from decimal import * 
 + 
 +############################################################################## 
 +def combin(n, k): 
 +    """Nombre de combinaisons de n objets pris k a k""" 
 +    if k > n//2: 
 +        k = n-k 
 +    x = 1 
 +    y = 1 
 +    i = n-k+1 
 +    while i <= n: 
 +        x = (x*i)//y 
 +        y += 1 
 +        i += 1 
 +    return x 
 + 
 +############################################################################## 
 +def bernoulli(n): 
 +    """calcul du nombre de Bernoulli Bn """  
 +    prec = getcontext().prec 
 +    getcontext().prec = 50    
 +    B = [Decimal("1")] 
 +    for m in xrange(1,n+1): 
 +        if m>1 and m%2!=0: 
 +            B.append(Decimal("0")) 
 +        else: 
 +            c = Decimal("0"
 +            for k in xrange(0,m): 
 +                c += Decimal(str(combin(m+1,k)))*B[k] 
 +            B.append(-c/Decimal(str(combin(m+1,m)))) 
 +    getcontext().prec = prec  
 +    return float(B[n]) 
 +</code>
  
  
math_decimal_bernoulli.txt · Dernière modification: 2010/03/16 14:05 de tyrtamos