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 :

probleme grandes valeurs dans exponentielle


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut probleme grandes valeurs dans exponentielle
    Bonjour à tous. J'utilise python actuellement et ne suis tres souvent amené à ne faire que de simples opérations mathématiques. Or je rencontre en probleme de taille qui me bloque completement.

    En fait j'ai besoin de faire le simple calcul suivant:

    R=exp(j*w*t) - exp(t*lambda)

    Comme vous pouvez le voir ce calcul reste simple. Il faut savoir que les lambda sont complex, t(variable) peut atteindre la valeur 1e15 et que w(variable) peut atteindre 5000.

    Le probleme que je rencontre est que lorsque je veut calculer par exemple le terme :exp(t*lambda) ,python me renvoi cela "math range error' ce que je comprend vu les grandeurs utilisée dans l'exponentielle.

    J'ai donc utiliser la séquence suivante pour contourner ce probleme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a=str(t*lambda.real)
    a=Decimal(a)
     
    b=str(t*lambda.imag)
    b=Decimal(b)
     
    e=Decimal(e)
    c=ExtendedContext.power(e,a)
     
    comp=exp(t*omega*1j)    (etape1)
    comp=comp-float(str(c)) * exp(1j*float(b))     (etape 2)
    Mais ici encore je rencontre un probleme car quan j'affiche mon résultat, python fait bien l'étape 1 mais m'affiche la chose suivante pour l'étape 2:

    nan + nanj....

    Voila j'espere que c'est asez clair....

    merci pour votre aide si vous pouvez

  2. #2
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Pour plus de précision je pense que c'est le c=ExtendedContext.power(e,a) qui pose probleme car quanf j'affiche sa valeur seule python me retourne (nan)....je voudrait dans savoir s'il est possible d'utiliser des valeurs aussi grandes que ce dont j'ai besoin....


    merci

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

    Je ne comprends pas tout dans ton calcul.

    Ce qu'on peut dire facilement, c'est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from decimal import *
     
    e = Decimal("2.71828")
    a = Decimal("5000")
    print ExtendedContext.power(e,x)
    Ce qui affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Decimal("2.95766423E+2171")
    Donc ça, ça marche.

    Par contre, tu ne peux pas utiliser float() pour convertir un tel nombre puisqu'il dépasse les capacités d'un flottant.

    Ensuite, d'où vient ton "exp()"? Et que représente ton "j".

    exp() peut provenir du module math ou cmath. Mais n'importe pas les 2 avec "*" parce que python va se mélanger les pinceaux. Si j est l'imaginaire et exp() la fonction de math, il y a erreur. Et dans les 2 cas, exp() demandera à convertir en flottant... pour autant que ce soit possible.

    Bref, si tu pars avec de nombres très grands Decimal(), il faut y rester...

    Si ça ne te suffit pas, donne plus d'infos.

    Tyrtamos
    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

  4. #4
    Membre à l'essai
    Inscrit en
    Mars 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 44
    Points : 17
    Points
    17
    Par défaut
    Bonjour, pour repondre à vos questions exp() vient du module Numeric et j est bien l'imaginaire...En fait pour etre plus bref mon gros probleme est que losrsque je vaux calculer l'exponentielle de tres tres grandes valeurs, on ne me retourne pas sa valeur mais 'nan'. j'ai donc un probleme quand je fait la choses simple suivante:

    b=5000000000000000*5000(correspond à la plus grande valeur dont j'ai besoin dans mon calcul)
    a=Decimal(b)
    f=e
    e=Decimal(f)
    c=ExtendedContext(e,a)

    et quan je fait print c sa me donne Decimal(NaN)!!!!

    c vrai que j'aurai dus simplifier comme sa d le debut....desole

Discussions similaires

  1. Récupérer la 2ème plus grande valeur dans une variable
    Par lyonnaisdu26 dans le forum QlikView
    Réponses: 3
    Dernier message: 12/03/2012, 13h58
  2. recupérer la plus grande valeur dans une bdd
    Par djo007 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 30/01/2012, 21h15
  3. cherche la plus grande valeur dans une matrice
    Par thtghgh dans le forum MATLAB
    Réponses: 9
    Dernier message: 28/12/2009, 19h35
  4. Réponses: 6
    Dernier message: 09/10/2007, 12h19
  5. []probleme affichage valeur dans combobox
    Par gup dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 23/09/2005, 09h22

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