Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 29-11-2019 15:52:40

Zebulor
Membre
Inscription : 21-10-2018
Messages : 506

A propos d'une suite

Bonjour,

j'ai repris le sujet d'une discussion sur une suite et cherché à en connaître le iéme terme :

Soit $(u_n)$ une suite défini par $$\begin{cases} u_1=a, a\geq1\\ u_{n+1}=\sqrt{u_n^2+\frac{1}{2^n}}, n\geq1\end{cases}$$

Est ce que ce programme vous semble correct ?

from math import sqrt,exp,log
           
u = 2                       # on initialise u au premier terme de la suite
premierterme = 2     # cela sert pour le calcul de la limite théorique de la suite
n = 55                     # on veut calculer jusqu'au terme de rang n
print(1,premierterme)  

for index in range(2,n+1):
    u = sqrt(u*u+1/exp((index-1)*log(2)))    # calcul du terme suivant
    print(index,u)                       # affiche le i-éme terme de la suite

Dernière modification par yoshi (29-11-2019 18:43:00)

Hors ligne

#2 29-11-2019 17:45:53

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 6 733

Re : A propos d'une suite

Salut,

tu ne peux pas écrire directement 1/2**(index-1) ?


"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius

Hors ligne

#3 29-11-2019 17:52:48

Zebulor
Membre
Inscription : 21-10-2018
Messages : 506

Re : A propos d'une suite

Salut Freddy,
ah oui merci effectivement ça marche ! et il faut bien mettre les 2 signes : **

Dernière modification par Zebulor (29-11-2019 17:55:32)

Hors ligne

#4 29-11-2019 19:19:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 13 861

Re : A propos d'une suite

Re,

Clap ! clap ! Clap !
1. Pour freddy, le "correcteur"
2. pour le 1er prog solo de Zebulor

Et, oui, la puissance est bien **...
Notez qu'il existe une alternative à

1/2**(index -1)

qui est en natif sans importation :

1/pow(2,index-1)

** est un opérateur  et pow() une fonction.

Voilà ce qu'en dit Python quand on tape help(pow) :

>>> help(pow)
Help on built-in function pow in module builtins:

pow(x, y, z=None)

Equivalent to  x**y  (w ith two arguments)   or x**y % z (w ith three arguments) to x**y (w ith two arguments) or x**y % z (w ith three arguments)

    Some types, such as ints, are able to use a more efficient algorithm when
    invoked using the three argument form.
 

@Zebulor j'ai dû écrire w ith pour contourner le refus de poster sans espace entre w et i.
Il fut un temps où j'ai dû me battre plusieurs jours avec des spams anglais à répétition...
Un ancien de Bibmath avait développé un système d'analyse des messages pour empêcher la publication de certains messages si des mots-clés y étaient présents...
Fred l'a remis au goût du jour, et moi, j'ai analysé message après message, pour trouver les mots-clés  permettant d'empêcher la publication de ces spams et j'ai dû me résoudre à inclure l'équivalent anglais de beaucoup de nos adverbes, prépositions notamment...
De temps en temps, paf on tombe sur l'un d'entre eux... et quand on a trouvé quel est le mot, on contourne...

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#5 29-11-2019 21:33:13

Zebulor
Membre
Inscription : 21-10-2018
Messages : 506

Re : A propos d'une suite

@Yoshi : c est noté pour cette histoire de spams..
Merci.j ai pu tester ce programme avec réussite au boulot en y ajoutant un « input » au départ..
Par contre sur ma tablette que j’utilise a la place de mon ordi habituel qui me fait des siennes, le programme ne veut pas fonctionner : message d’erreur ...de même que tes programmes sur
Fibo
voilà ce que j obtiens :

  File "/tmp/sessions/d30db1365a79cec5/main.py", line 4
        fibo=Fibo1+Fibo2
    ^
SyntaxError: invalid character in identifier

Par contre une version simplifiée de mon programme fonctionne..

@+

Dernière modification par Zebulor (30-11-2019 14:21:04)

Hors ligne

#6 30-11-2019 19:44:22

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 13 861

Re : A propos d'une suite

Bonsoir,

Jamais rencontré ce message d'erreur...

SyntaxError: invalid character in identifier

Cela voudrait dire que les variables fibo, Fibo1 ou Fibo2 contiennent un caractère incorrect...
Comme un caractère correct dans une variable, c'est une lettre non accentuée , minuscule ou majuscule (A-Z et/ou a-z) ou 1 (ou plusieurs chiffres), ces 3 variables sont syntaxiquement correctes...

Alors ?... Alors, ça m'intrigue...
Quelle est version Python présente sur ta tablette ?
Le programme Fibonacci, tu l'as tapé intégralement, ou fait un copié/collé ?

Une version avec liste :

   
Fibo=[1,1]
for i in range (2,25):
    Fibo.append(Fibo[i-1]+Fibo[i-2])
               
print (Fibo)

En principe, tout programme Python devrait commencer par ces deux lignes :
#!/usr/bin/env python
# -*- coding: UTF8 -*-

ligne 1 : voir https://ubuntuplace.info/questions/4205 … sr-bin-env
ligne 2 : voir https://www.google.com/search?client=fi … A+UTF8+-*-

Puis en ayant sauté une ligne, viennent les import
Quand on les a tous listés, on saute une ligne
Viennent alors les Classes (que je ne maîtrise pas du tout)
une ligne à sauter entre chaque...
Puis arrivent les fonctions
une ligne à sauter entre chaque...
Et enfin le programme principal qui, chez moi, consiste souvent en un menu inséré dans une boucle sans fin...

Comme ceci :

               
#!/usr/bin/env python
# coding: utf-8 -*-


from math import log

def titre():
    print("                    ***********************************")
    print("                    *    Variations sur le nombre     *")
    print("                    *              de                 *")
    print("                    *          David Champer          *")
    print("                    *            (v. 3.1)             *")
    print("                    ***********************************")
    print ("\n\nNombre de David Champer :")
    print("             0,123456789101112131415161718192302122232425627282930...")
    return

def cherche_position():
    #### Inscrire ci-dessous la position du chiffre à rechercher ###
    n=int(input("    Entrer la position du chiffre à rechercher : "))
    ################################################################
    print("\n\n")
    i,lg=1,0
    while not lg>=n:
        lg+=int(log(i,10))+1
        i+=1
    lg_i=int(log(i,10))+1
    ecart = lg-n
    print("+-+ Le "+str(n)+"e chiffre décimal est",str(i)[lg_i-ecart-1],"+-+")
    return


def somme_des_premiers_chiffres():
    ### Inscrire ci-dessous le nombre de chiffres à additionner ###
    nc=int(input("    Entrer le nombre de chiffres à additionner : "))
    ##############################################################
    print("\n\n")
    i,nb_chiffres,S,stop=1,0,0,0
    print("+-+ La somme des",nc, "premiers chiffres décimaux est :",end=" ")
    while not stop:
        lg_i=int(log(i,10))+1
        for x in range(lg_i):
            nb_chiffres+=1
            if nb_chiffres<=nc:
                S+=int(str(i)[x])    
            else:
                stop=1
                break
        i+=1
    print (S,"+-+\n\n")
    return

def ajout_devant(ch,CHD,cas):
    Vide=[]
    for i in range (1,10):
        if cas==0:
            print("             --> ",str(i)+ch)
            CHD.append(str(i)+ch)
        else:
            Vide.append(str(i)+ch)    
    return CHD,Vide

def ajout_fin_de_chaine(ch,CHF,cas):
    Vide=[]
    for i in range (0,10):      
        if cas==0:
            print("             -->  ",ch+str(i))
            CHF.append(ch+str(i))
        else:
            Vide.append(ch+str(i))
    return CHF,Vide


def affiche_4_colonnes(CH,lg,a,b):
    for i in range(9+a):
            print("      ",end=" ")
            for j in [0,1,2,8+b]:
                if j==2:
                    print("."*(lg),end="    "*(j<9))                
                else:                  
                    print(CH[j][i],end="    "*(j<9))
            print()
   

def Zero(ch):
    print ("\n La chaîne",ch,"commençant par 0, on ne peut lui ajouter de chiffre(s) à la fin.")

   
def cherche_chaine():
    ### Inscrire ci-dessous la chaîne à rechercher ###

    ch=input("    Entrer la chaîne à rechercher : ")
   
    ##################################################
    print("\n\n")
    print ("             +-+ Recherche de toutes les occurences de la chaîne", ch,"+-+\n")
    lch=len(ch)
    ln_ch=lch-1
    d=ch[0]+","

    print("Le premier chiffre étant un",d,end=" ")
    if ch[0]!="0":    
        print("le nombre", ch, "qui possède", lch,"chiffres est déjà une réponse en lui-même.")    
    else:        
        print ("il n'y a aucun nombre à", lch,"chiffres, qui soit solution.")

    print ("\n              ** Réponses incluses dans des nombres à",lch+1,"chiffres **\n")
    print ("(1)  En ajoutant un chiffre de 1 à 9 en début de chaîne :")
    CHD,CHF=[],[]
    CHD,Vide=ajout_devant(ch,CHD,0)
   
    if ch[0]!="0":
        print ("\n(2)  En ajoutant un chiffre de 0 à 9 en fin de chaîne :")
        CHF,Vide=ajout_fin_de_chaine(ch,CHF,0)      
    else:
        Zero(ch)

    print ("\n               ** Réponses incluses dans des nombres à",lch+2,"chiffres. **\n")
    print ("  En ajoutant un chiffre de 1 à 9 en début de chacune des 9 solutions de (1),")
    print("soit 81 réponses de plus...)")
    HD1=[]
    for i,chd in enumerate(CHD):
        CHD,Vide=ajout_devant(chd,CHD,1)
        HD1.append(Vide)
    affiche_4_colonnes(HD1,lch+1,0,0)
       
    if ch[0]!="0":
        print ("\n  En ajoutant un chiffre de 0 à 9 en fin de chacune des 10 solutions de (2),")
        print ("soit 100 réponses supplémentaires...")
        HF1=[]
        for i,ch in enumerate(CHF):
            CHF,Vide=ajout_fin_de_chaine(ch,CHF,1)
            HF1.append(Vide)
        affiche_4_colonnes(HF1,lch+1,1,1)
    else:
        Zero(ch)
         
    print("\nToujours avec", lch+2,"chiffres, on peut aussi ajouter chacun des chiffres de 0 à 9 en fin")
    print("de chacune des 9 solutions de (1), soit encore 90 réponses supplémentaires...\n")
    HF1=[]
    for i,chd in enumerate(CHD):
        CHF,Vide=ajout_fin_de_chaine(chd,CHF,1)
        HF1.append(Vide)
    affiche_4_colonnes(HF1,lch+2,1,0)
    print("\nOn peut poursuivre ce même procédé à l'infini avec,",str(lch+3)+",",str(lch+4)+",",str(lch+5)+" etc.. chiffres...")
    return

titre()
Dico_fonctions={"1":cherche_position,"2":somme_des_premiers_chiffres,"3":cherche_chaine}
while True:
    print("\n\n\n")
    print ("                       *** Voulez-vous ***")
    print()
    print ("    1. Rechercher un chiffre connaissant sa position")
    print ("    2. Connnaître la somme des n (quantité à donner) premiers chiffres")
    print ("    3. Rechercher toutes les occurrences d'une chaine à donner")
    print ()
    print ("    0. Quitter le programme")
    print()
    print ("                ",end=" ")
    chx=input("Votre choix : ")
    print("\n")
    if chx=="0":
        print ("              Au revoir !")
        break
    elif chx in["1","2","3"]:
        Dico_fonctions[chx]()
    else:
        pass
 

@+


Arx Tarpeia Capitoli proxima...

Hors ligne

#7 30-11-2019 20:48:43

Zebulor
Membre
Inscription : 21-10-2018
Messages : 506

Re : A propos d'une suite

Re Yoshi,
Celle ci : https://pynative.com/online-python-code … thon-code/
Voilà une réponse complète et je t en remercie !
J avais fait un copié /collé... d’après ce que tu m’expliques je comprends  il y aurait eu un problème de caractère, donc de Recopie c est plausible

Je viens de retester ce soir les 3 versions du programme de fibonacci que tu proposes et elles marchent toutes... et je ne sais pas pourquoi !!
@+

Dernière modification par Zebulor (30-11-2019 21:01:42)

Hors ligne

#8 01-12-2019 12:10:04

freddy
Membre chevronné
Lieu : Paris
Inscription : 27-03-2009
Messages : 6 733

Re : A propos d'une suite

Zebulor a écrit :

Bonjour,

j'ai repris le sujet d'une discussion sur une suite et cherché à en connaître le iéme terme :

Soit $(u_n)$ une suite défini par $$\begin{cases} u_1=a, a\geq1\\ u_{n+1}=\sqrt{u_n^2+\frac{1}{2^n}}, n\geq1\end{cases}$$

Est ce que ce programme vous semble correct ?

from math import sqrt,exp,log
           
u = 2                       # on initialise u au premier terme de la suite
premierterme = 2     # cela sert pour le calcul de la limite théorique de la suite
n = 55                     # on veut calculer jusqu'au terme de rang n
print(1,premierterme)  

for index in range(2,n+1):
    u = sqrt(u*u+1/exp((index-1)*log(2)))    # calcul du terme suivant
    print(index,u)                       # affiche le i-éme terme de la suite

Salut,

j'ai fait tourner ce code, avec la modif que j'ai proposée.
Ce qui est marrant est que sur 100 tours par exemple, le résultat dépend de la valeur de a (le germe), je pense que ça n'exclut pas une petite étude préalable avant de simuler.
Sinon, je commence un peu à piger le langage, ça me plait bien :-)

Dernière modification par freddy (01-12-2019 12:10:45)


"Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius

Hors ligne

#9 01-12-2019 14:00:08

Zebulor
Membre
Inscription : 21-10-2018
Messages : 506

Re : A propos d'une suite

Salut,
@freddy :
Une légère variante pour un peu plus de confort:

from math import sqrt,exp,log
premierterme = float(input('entrez le premier terme'))
n = int(input('entrez le rang maximal'))        # saisie 1er terme de la suite et de u-max)
u=premierterme
print(1,premierterme)
print(" ")
for index in range(2,n+1):
    u = sqrt(u*u+1/pow(2,index-1))    # calcul du terme suivant
    print(index,u)# affiche le i-éme terme de la suite 
    print(" ")

Il écrit aussi 0.9999999999 au lieu de 1 par exemple..

Dernière modification par Zebulor (02-12-2019 09:14:22)

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
cinquante trois plus
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums