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

Calcul scientifique Python Discussion :

Série convergente, trouver la limite


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 5
    Points
    5
    Par défaut Série convergente, trouver la limite
    Bonjour, je sollicite votre aide, je suis bloqué dans mon exo.

    J'ai une série qui converge et qui a la forme suivante :

    S=(somme) de k=1 à n de k²/(1+k²)² (désolé pour la syntaxe)

    La série converge vers une valeur non nulle.


    La question : calculer une valeur approchée à e=10^-6 près de la limite, i-e quand |Sn+1 - Sn|<e
    Il est aussi demandé le nombre d'itérations pour cette précision.

    Mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import fmin
     
    e=1e-6
    ct=0
     
    k=np.linspace(1,100,100)  
     
    def serie(k):
        return k**2/((1+k**2)**2)
     
     
    if abs (serie(k+1)-serie(k))>e
            ct=ct+1
     
     
    print "iterations",ct
    Donc cela ne fonctionne pas en fait, il y a peut-être plusieurs problèmes en fait, pourtant j'ai l'impression que le raisonnement se tient.

    Je vous remercie.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Il faudrait peut-être commencer par écrire la fameuse fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def f(k):
        return k**2/(1+k**2)**2
    Puis une fonction somme des n premiers, histoire de voir un peu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def somme(n):
        k = 1
        s = f(k)
        while k < n:
            s += f(k)
            k += 1
        return s
    Maintenant, on peut s'amuser à la modifier un peu pour qu'elle dépende d'epsilon plutôt que de n:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def somme(epsilon):
        k = 1
        s = f(k)
        while True:
            p = s     # le S(n-1)
            k += 1
            s += f(k) # le S(n)
            if abs(s - p) < epsilon:
                return s, k
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Désolé wiztricks, mais je n'arrive pas à appliquer votre code à mon exo.

    Si abs(s-p)<epsilon alors la fonction retourne s et k ?

    Il n'y a pas l'itération dans le code ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    k=np.linspace(1,50,50)
    epsilon=1e-6
     
     
    def f(k):
        return k**2/(1+k**2)**2
     
     
    def somme(epsilon):
        k = 1
        s = f(k)
        while True:
            p = s     # le S(n-1)
            k += 1
            s += f(k) # le S(n)
            if abs(s - p) < epsilon:
                return s, k

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Vertical001 Voir le message
    Si abs(s-p)<epsilon alors la fonction retourne s et k ?
    Tout à fait.
    Cela traduit:
    Citation Envoyé par Vertical001
    La question : calculer une valeur approchée à e = 10^-6 près de la limite, i-e quand |Sn+1 - Sn|<e
    Il est aussi demandé le nombre d'itérations pour cette précision.
    en passant le epsilon en paramètre de la fonction somme. Lorsque la condition est rempli, elle retourne la valeur de la somme et le nombre d'itérations.

    Citation Envoyé par Vertical001
    Il n'y a pas l'itération dans le code ?
    Une itération est un bloc d'instructions répété jusqu'à ce qu'une condition soit vraie... Regardez ce que je fais de la variable k dans mon code, elle s'incrémente à chaque itération et sert donc à compter le nombre d'itération et, last but not least, est utilisé pour calculer "f".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Merci Wiztricks, le problème c'est que lorsque j'écris :

    Cela me donne le tableau entier des valeurs de s et de k, et non celles lorsque abs(s-p)<epsilon .

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Vertical001 Voir le message
    Merci Wiztricks, le problème c'est que lorsque j'écris :

    Cela me donne le tableau entier des valeurs de s et de k, et non celles lorsque abs(s-p)<epsilon .
    Je ne vois pas d'où vous sortez vos s et k.
    La fonction somme retourne ce qu'on attend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> s, k = somme(0.001)
    >>> print (s, k)
    0.7390896627485117 32
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Cela devient pathétique, mais je n'arrive pas à retrouver les valeurs de s et k que vous avez trouvées.

    A mon avis cela vient de la fonction f, je m'explique :
    En théorie le programme suivant devrait donner 0.25, il donne chez moi (dans ma console) 0 !
    De plus si je change les ** en ^ cela donne 1 !

    Pouvez-vous encore m'éclairer s'il vous plaît. Il y a peut-être un paramètre à changer quelque part dans python ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    k=1
    def f(k):
        return (k**2)/((1+k**2)**2)
     
    print(f(k))

  8. #8
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Dans le 1er code, le print sans les parenthèses signifie que tu travailles sous Python 2.

    Or, il y a une différence importante dans les calculs entre Python 2 et 3: sous Python 2, la division d'un entier par un entier donne un entier! Par exemple, 1/3 donne 0.

    Faire que les calculs soient faits sous Python 2 comme sous Python 3 (ex: 1/3 => 0.333333...) est facile: il suffit de mettre au tout début de la page de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    from __future__ import division
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2014
    Messages : 13
    Points : 5
    Points
    5
    Par défaut
    Enfin réussi, merci à vous deux.

    Bonne soirée.

Discussions similaires

  1. [CUDA] Trouver les limites
    Par pepito3364 dans le forum Threads & Processus
    Réponses: 1
    Dernier message: 27/06/2014, 10h56
  2. Réponses: 3
    Dernier message: 27/10/2007, 09h47
  3. Trouver le bon port série
    Par RR instinct dans le forum C++
    Réponses: 1
    Dernier message: 27/11/2006, 18h22
  4. Trouver le numéro de série du processeur
    Par mounap dans le forum Autres Logiciels
    Réponses: 9
    Dernier message: 24/11/2006, 08h11
  5. Comment trouver les valeurs manquante d'une série ?
    Par NicoNGRI dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/10/2006, 09h38

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