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 programme python


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut Problème programme python
    Bonsoir,
    Je suis novice avec python et j'essaye d'utiliser la fonction solve afin de résoudre une équation. Cependant le message suivant s'affiche: "multiple generators"

    Mon équation est: "solve(a*(((1-b)/b)**k) + (1-a)*((b/(1-b))**k) - 1,k)" où je cherche la valeur de k

    a et b sont définies précédemment tels que
    b = uniform(0.5, 1)
    a = uniform(0,1)

    Merci par avance

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Bonjour

    D'où vient cette fonction "solve" ?
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    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,

    Ça ressemble à du sympy:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from random import uniform
    from sympy.solvers import solve
    from sympy import Symbol
     
    a = uniform(0,1)
    b = uniform(0.5, 1)
    k = Symbol('k')
     
    print(solve(a*(((1-b)/b)**k) + (1-a)*((b/(1-b))**k) - 1, k))
    Je retrouve bien l'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    NotImplementedError: multiple generators [248644039273536500000000000000**k, 25000000000000000000000000000**k, 2513633553517150000000000000**k]
    No algorithms are implemented to solve equation 362481497591329*(497288078547073/50000000000000)**k/1000000000000000 + 637518502408671*(50272671070343/500000000000000)**k/1000000000000000 - 1
    Mais je ne connais pas assez sympy pour proposer une solution.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Merci d'avoir cherché. Et surtout d'avoir mis le message complet qui dit en seconde ligne "il n'y a pas d'algorithme implémenté pour résoudre cette équation". Moi aussi, après avoir installé sympy ça me fait pareil

    Et en effet, cette équation où il faut trouver "k" qui est exposant me semble un peu compliquée (suis en train de griffoner quelques essais à partir de exp mais ça mêne pas loin). M'étonnerait que le bouzin puisse résoudre tout type d'équation quoi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    Bonjour,
    Je vous ai mis le projet que j'ai à faire car je suis peut-être mal parti. Je vous indique mon code pour le moment.
    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
    19
    20
    21
    22
     
    b = uniform(0.5, 1)
    a = uniform(0,1)
    print ('a vaut', a)
    print ('b vaut', b)
     
    U= rand(1)
    print ('U vaut', U)
     
    if (U<a) :
        A=b
    else :
        A=1-b
     
    print ('A vaut', A)
     
    eta = (1-2*a)*log(b/(1-b))
    p = (1-A)/A
    Ep = (a*(1-2*b)+b*b)/(b*(1-b))
     
    m2 = (b-a)*(1-2*b)/(b+a-2*b*a)
    print(m2)
    Après je bloque...

    Merci par avance
    Images attachées Images attachées

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut


    Je pense que le problème n'est pas dans l'équation à résoudre (voir ci-dessous) mais dans la mauvaise utilisation de uniform ! Je crois que pour obtenir un "random" il faut utiliser la méthode uniform.rvs(), mais je ne suis pas familiarisé avec ce truc.

    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
    #! python 3
    # coding: utf-8
     
    from termcolor import cprint
    from sympy.solvers import solve
    from sympy import Symbol
     
    k = Symbol('k')
     
    b = 0.25
    a = 0.15
     
    cprint(solve(a*(((1-b)/b)**k) + (1-a)*((b/(1-b))**k) - 1, k), 'green') # [0.0, 1.57890192316257]
     
    k = 1.57890192316257
     
    cprint(a*(((1-b)/b)**k) + (1-a)*((b/(1-b))**k) - 1, 'red') # 3.1086244689504383e-15

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    Bonjour,

    J'ai maintenant cette erreur:
    function' object has no attribute 'rvs'
    quand j'utilise ce que vous m'avez donné.

    De plus le b doit être strictement supérieur à 1/2 et c'est ce qui me dérange, je ne vois pas de solution à l'équation si b > 1/2.
    Ou alors j'ai mal compris la question 3 ...

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par danielhagnoul Voir le message
    Je crois que pour obtenir un "random" il faut utiliser la méthode uniform.rvs()
    Connais pas "rvs". Mais le uniform(a, b) du module random de base retourne un nombre flottant aléatoire entre a (inclus) et b (exclu). Ce qui semble être la volonté du PO d'obtenir b entre 0.5 et 1.
    Et comme lui, dès que j'utilise ton code avec b=0.5 le truc part en vrille...

    Sinon merci de m'avoir montré termcolor (connaissais pas)...

    Citation Envoyé par arthurronda Voir le message
    De plus le b doit être strictement supérieur à 1/2 et c'est ce qui me dérange, je ne vois pas de solution à l'équation si b > 1/2.
    Ou alors j'ai mal compris la question 3 ...
    Le souci (ces mathématiques dépassent mon niveau sauf la question 2 "montrer que n < 0 ssi a>1/2" qui est, elle, plutôt évidente si b > 1/2 => log(b/(1-b)) étant alors > 0) mais je ne vois pas la formule de ton équation dans le pdf...

    PS: encadre ton code entre balises [ code ] et [ /code ] (sans espace après les crochets) pour qu'il ressorte bien formaté (sinon la mise en page du site recale tout à gauche et on perd les tabulations)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    Oui les questions 1 et 2, j'ai réussi mais la 3 non...
    Mon équation sort du E(p^k) = 1

    Le moment d'ordre k (E(p^k)) vaut selon moi ce que j'ai mis dans l'équation

  10. #10
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arthurronda Voir le message
    Le moment d'ordre k (E(p^k)) vaut selon moi ce que j'ai mis dans l'équation
    Euh... p=(1-A)/A donc p^k=((1-A)/A)^k. Comment tu arrives alors à p^k=a * ((1-b)/b)^k + (1-a) * (b / (1-b))^k ? Je veux dire que si p s'écrit sous forme X + Y, alors p^k=(X + Y)^k et non X^k + Y^k...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    En utilisant la définition de l'espérance car la variable aléatoire A ne prend que deux valeurs b avec une probabilité a et 1-b avec une probabilité 1-a.

  12. #12
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arthurronda Voir le message
    En utilisant la définition de l'espérance car la variable aléatoire A ne prend que deux valeurs b avec une probabilité a et 1-b avec une probabilité 1-a.
    Et les probabiltés "a" et "1-a" ne doivent pas être élevées à la puissance k elles-aussi ?
    Bon de toute façon même si on rectifie ce détail dans l'équation, ça ne change rien.

    Le plus bizarre c'est que parfois il y arrive. Tout à l'heure j'ai essayé avec b=0.24 et a=0.80 et il y est arrivé (résultat dans l'ensemble complexe)... et maintenant il n'y arrive plus...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  13. #13
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2019
    Messages : 15
    Par défaut
    Non a et 1-a ne doivent pas l'être. Le moment d'ordre k c'est E(X^k) = somme des x^k fois p(X=k) pour une va discrète.
    Oui mais là b est inférieur à 1/2, nous il doit être supérieur (enfin je crois d'après la définition).

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 830
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 830
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par arthurronda Voir le message
    Oui mais là b est inférieur à 1/2, nous il doit être supérieur (enfin je crois d'après la définition).
    Oui oui, c'est écrit 1/2 < b < 1. C'était juste pour dire que parfois solve() y arrive. Elle y arrive pour b=0.2 (k=complexe) ou b=0.25 (k=0).

    Peut-être t'orienter vers un forum de maths vérifier ton équation avant de revenir...

    Accessoirement je viens de tester toutes les valeurs de b comprises entre 0.50 et 0.99 (a=0.9)

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    a=0.90
     
    for i in range(50, 100):
    	b=i/100
    	print(i, a, b)
    	try:
    		x=solve(a * ((1-b)/b)**k + (1-a) * (b/(1-b))**k - 1, k)
    	except NotImplementedError as e:
    		print(e)
    	else:
    		if not x: continue
    		cprint(x, 'green')
    		k = x[-1]
    		cprint(a*((1-b)/b)**k + (1-a)*(b/(1-b))**k - 1, 'red')

    La seule valeur qui ressorte, c'est b=0.75 (k=2)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Problème de boucle programme python
    Par RaphMPSI dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 20/03/2018, 18h41
  2. problème programmation sur python
    Par o2pubcy9 dans le forum Général Python
    Réponses: 10
    Dernier message: 01/11/2017, 10h40
  3. problème de programme python
    Par grobient dans le forum Général Python
    Réponses: 6
    Dernier message: 01/05/2017, 14h09
  4. Problème programme Python 3 sous Tkinter
    Par vbvero dans le forum Tkinter
    Réponses: 2
    Dernier message: 05/02/2017, 17h35
  5. problème dans un programme python
    Par finelame13 dans le forum Général Python
    Réponses: 3
    Dernier message: 10/06/2015, 11h31

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