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 :

Erreur code sur l'Algorithme de Newton


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2022
    Messages : 7
    Par défaut Erreur code sur l'Algorithme de Newton
    Bonjour à tous,

    J'ai une question en 2 parties:

    Je cherche à retrouver y'(0) solution de l'équation xexp[1/(1+x)]-4=0 via l'algorithme de Newton.

    On me dit que mon résultat doit être d'environ 3.14.

    Voici 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
     
    import numpy as np
    import matplotlib.pyplot as plt
    x0=1
     
    def F(x):
        return x*np.exp(1/(1+x))-4
     
    def Fp(x):
        return (np.exp(1/(1+x)))*(x/(1+x))
     
    x=x0
     
    for i in range(1):
        x = x - F(x)/Fp(x)
        print(x)
    Jusque là tout va bien j'obtiens ce que l'on me demande.

    Partie 2: Définir une fonction yp() dont l'appel yp(y,yp0) calcule, grâce à l'algorithme de Newton, étant donné y et une valeur de initiale yp0, la valeur y' vérifiant l'équation y*y'*exp(1/(1+y')=4.
    Par exemple, `yp(1.6, 0.5)` devrait retourner la valeur y' correspondant au cas où y prendrait la valeur 1.6 (l'algorithme de Newton déterminant y' étant initialisé avec une première estimation
    égale à \num{0.5}).

    Et là je suis bloquée je ne vois pas du tout faire le code même si je pense savoir la méthode:
    - Je reprends les équations de la 1ère partie afin d'avoir mon F(x) et mon F'(x).
    Par contre comment je définie yp0 et y de manière à faire l'appel de la fonction.

    J'ai commencé ça (qui bien entendu me renvoie une erreur que je n'arrive pas à corriger):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    import numpy as np
    import matplotlib.pyplot as plt
    def Newton(x):
        xi=1
        x=xi
        for i in range(20):
            x = xi - F(x)/Fp(x)
        return yp
     
    print (yp(1.6,0.5))
    Quelqu'un peut-il m'aider s'il vous plaît?

    En attendant une réponse je vous souhaite à tous une bonne journée

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Tu devrais donner le message d'erreur: en général, il donne des infos intéressantes pour corriger le problème rencontré.

    Il y a tout de même dans ton code des choses très anormales:
    - Quand tu appelles à la fin "print (yp(1.6,0.5))", yp n'est pas une fonction, mais la variable retournée par la fonction Newton
    - Et dans la fonction Newton, cette variable retournée yp n'est définie nul part?

    Manifestement, tu ne pourras pas avancer sans accroitre un peu ta connaissance de Python lui-même. Il faudrait passer un peu de temps avec un bon cours comme celui-ci (ce n'est pas le seul):
    https://python.developpez.com/cours/apprendre-python3/

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2022
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2022
    Messages : 7
    Par défaut
    Bonjour et merci de la réponse.

    Malheureusement cela fait plusieurs heures que je suis dessus et je ne suis pas plus avancée.

    En effet, je débute sur Python et si mon cours m'a permis de comprendre l'application de l'algorithme de Newton dans un cas où je connais x0.

    Là on me demande une méthode plus générale que je n'arrive pas à écrire.

    Par contre j'ai pris en compte tes remarques et refais mon code en conséquence:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    import matplotlib.pyplot as plt
     
    def yp(F,x):
        for i in range(20):
            x1=x-(F(x)/Fp(x))
            x=x1
        return x
     
    y=yp(F,x)
     
    print(y)
    Déjà, ça fonctionne mais cela me donne toujours la même valeur quoique je fasse (quand je ne fais pas tout planter).

    Comment introduire mes variables de manière à ce que si je change les valeurs.

    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
    def F1(x):
        return (3.14*x)*np.exp(x/4.14)-4
     
    def Fp1(x):
        return (3.14*exp(x/4.14))+(12.9996*x*(exp(x/4.14)))/4.14^2
     
    def yp(y,yp0):
        for i in range (20):
            x= yp0 - F1(x)/Fp1(x)
            yp0=x
        return y
     
    print(y)
    yp(1,3)
    print(y)
    Voici mon message d'erreur:
    local variable 'x' referenced before assignment
    J'ai essayé de changer la variable x (en x2 par exemple car je ne l'ai jamais utilisé) et cela me donne la même erreur.

    Je suis vraiment perdue

    Merci d'avance de votre aide

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    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 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Regarde un peu ta fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def yp(y,yp0):
        for i in range (20):
            x= yp0 - F1(x)/Fp1(x)
            yp0=x
        return y
    Et la ligne:

    A la 1ère boucle (i=0), tu appelles F1(x) et Fp1(x), mais x n'est pas défini!

    Et la ligne:

    Comme la variable y n'est pas modifiée dans la fonction, celle-ci ne retournera que l'argument y passé lors de son appel: cette fonction ne sert donc à rien...

    Tu vois que sans un minimum de compréhension de l'utilisation de Python, tu n'avanceras pas.

  5. #5
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Fp(x) pour la première fonction : ça n'a pas l'air correcte, même que l'algorithme de Newton ne soit pas très sensible dans ce cas de sa formule analytique exacte.

Discussions similaires

  1. [PHP-JS] erreur code sur condition ?
    Par pascale86 dans le forum Langage
    Réponses: 2
    Dernier message: 04/12/2007, 12h25
  2. Erreur '400' sur ligne de code basique
    Par cyraile dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 22/08/2007, 12h01
  3. [VBA-E] erreur de code sur copie de cellules
    Par dado91400 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/03/2007, 23h12
  4. [IE]Erreur javascript sur un code de 2 lignes...
    Par narnou dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/05/2006, 17h20
  5. Réponses: 4
    Dernier message: 09/05/2003, 16h20

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