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

Python Discussion :

problème programmation sur python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut problème programmation sur python
    Bonjour, je fais actuellement un programme mais je rencontre des problèmes lorsque je l’exécute.

    bizarrement, je veux calculer l'intégrale entre 1 à 2 de la fonction carrée avec la méthode des rectangles alors j'ai écrit:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def carre (x) :
        return(x**2)
    print(carre(2),carre(5),carre(14))
     
    j=0
    for(i) in range(10) :
        j=carre(1+i*(2-1)/10)*0.1+j
    print(j)
    mais le résultat est 2,185 alors que je devrais avoir 2.3333... soit 7/3
    est ce normal svp ?

    ensuite lorsque je veux calculer une autre intégrale on m'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    line 89,fonction
        y=(((y+v(0+i*h))**2))**1/2
    OverflowError: (34, 'Result too large')
    sur python j'ai écrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def fonction(v,T,n) :
        h=(T)/n
        y=0.5*(v(0)+v(T))
        for i in range (1,n) :
            y=((1/T)*((y+v(0+i*h))**2))**1/2
        return (h*y)
    Pouvez vous m'aider svp j'ai essayer de mettre import decimal mais ça ne change rien...

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tu es sur de ton algo ?

    Ceci carre(1+i*(2-1)/10)*0.1+j c'est la même chose que cela carre(1+i*0.1) * 0.1 + j ce qui n'était peut-être pas ce que tu voulais faire.


    Utilise les balises [code] pour ton code.

  3. #3
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    oui normalement c'est la méthode des rectangles pour calculer une intégrale entre deux bornes

    savez-vous comment est-ce-que je pourrais faire pour résoudre le problème lié au code erreur overflow svp ?

  4. #4
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Salut,

    Tu es sur de ton algo ?

    Ceci carre(1+i*(2-1)/10)*0.1+j c'est la même chose que cela carre(1+i*0.1) * 0.1 + j ce qui n'était peut-être pas ce que tu voulais faire.


    Utilise les balises [code] pour ton code.
    c'est bien ça

  5. #5
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    j'ai réussi à résoudre le problème lié à l'overflow...

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par o2pubcy9 Voir le message
    mais le résultat est 2,185 alors que je devrais avoir 2.3333... soit 7/3
    est ce normal svp ?
    7 / 3 est le résultat exact.
    2,185 est une approximation obtenue avec un découpage en 10 intervalles.
    Normalement, si vous voulez approcher la valeur exacte, il faut augmenter le nombre d'intervalles.

    Citation Envoyé par o2pubcy9 Voir le message
    savez-vous comment est-ce-que je pourrais faire pour résoudre le problème lié au code erreur overflow svp ?
    Je n'ai pas le temps d'essayer de comprendre ce que peut être y=(((y+v(0+i*h))**2))**1/2 par contre, vous pourriez réécrire cela avec des variables intermédiaires, afficher leurs valeurs avec "print" et vérifier que c'est cohérent avec ce que vous attendez (c'est ce qui s'appelle mettre au point son programme... et çà fait partie de l'exercice).

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

  7. #7
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    bonjour, j'ai essayé de découper l'expression mais cela ne résoud toujours pas le problème

  8. #8
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    je dois faire le programme avec 10 intervalle donc c'est peut-être l'expression qui n'est pas bonne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i) in range(10) :
        j=carre(1+i*(2-1)/10)*0.1+j
    print(j)

    c'est bien l'intégrale entre 1 et 2 de la fonction carre avec la méthode des rectangles svp ???

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par o2pubcy9 Voir le message
    c'est bien l'intégrale entre 1 et 2 de la fonction carre avec la méthode des rectangles svp ???
    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i) in range(10) :
        j=carre(1+i*(2-1)/10)*0.1+j
    print(j)
    pas facile d'ajouter des intervalles pour obtenir un résultat plus précis.
    Ne serait-il pas plus simple d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a, b = 1, 2 # l'intervalle
    h = 0.1 # la base des rectangles.
    count = int( (b - a) / h)  # le nombre d'intervalles.
    aire = 0
    x = a
    for i in range(count):
         aire += carre(x) * h
         x += h
    print(aire)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre averti
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Octobre 2017
    Messages : 24
    Par défaut
    bonjour,
    ce programme me donne approximativement le même résultat soit
    2.1850000000000014 et 2.1850000000000005
    du coup ce problème devrait plutôt venir de ma version de python...

Discussions similaires

  1. Problème avec un programme sur youtbe.com
    Par lebaroudeur dans le forum Débuter
    Réponses: 6
    Dernier message: 20/08/2012, 19h58
  2. problème premier programme avec python
    Par adolphemartins dans le forum Général Python
    Réponses: 3
    Dernier message: 04/12/2011, 12h45
  3. Problème de programmation en Python
    Par Victoria007 dans le forum Général Python
    Réponses: 4
    Dernier message: 19/09/2008, 12h12
  4. Problème mémoire sur un programme?
    Par theclem35 dans le forum VB 6 et antérieur
    Réponses: 21
    Dernier message: 23/12/2007, 07h53
  5. Problème d'éxécution de programme sur 2ème disque dur
    Par thepinguin dans le forum Composants
    Réponses: 3
    Dernier message: 20/02/2007, 10h30

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