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

MATLAB Discussion :

Comment peut calculer exp(1000) ?


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Comment peut calculer exp(1000) ?
    Bonjour à tous,

    Comment peut faire pour calculer :

    exp(1000) ???

    avec matlab.

    Car il est bloqué à partir du nombre (realmax = 10^308).

    et merci.

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    Aucun rapport avec Matlab: ça tient aux caractéristiques de ton processeur. Avant d'essayer de calculer quoi que ce soit, tu devrais prendre connaissance de la norme ANSI/IEEE 754.
    A part ça, à quoi cela sert-il de calculer exp(1000)?
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci pour votre réponse,

    je calcule exp(1000) pour le calcul de sinh(1000).

    pour cela je dois passer le nombre maximal proposé par le programme (matlab) dont la précision de type (Double) est limité avec realmax.

    la question est : comment peut passer à une autre classe exple (2*realmax) ??

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    En Python, il suffit d’utiliser la fonction exponentielle du module math pour obtenir par exemple e puissance 100:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from math import exp
    print exp(100)
    résultat
    2.68811714182e+43






    Mais exp(1000) sort des capacités de exp() du module math.
    print exp(709.782) donne encore 1.79641202802e+308
    mais print exp(709.783) donne l’erreur
    OverflowError: math range error




    Qu’à cela ne tienne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    from math import exp
     
    x = exp(500)
    print x
    print str(x) # transforme en chaine
    print str(x)[:-5] # enleve les 5 derniers caracteres = 'e+217'
    y = float(str(x)[:-5]) # retransforme en float la chaine sans 'e+217'
    print y*y
    résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1.40359221785e+217
    1.40359221785e+217
    1.40359221785
    1.97007111401
    Donc exp(1000) est 1.97007111401e+434





    On le refait d’une autre manière pour voir si ce serait fortement différent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    from math import exp
     
    a = exp(700)
    b = exp(300)
    print a
    print b
    print float(str(a)[:-5]) * float(str(b)[:-5])
    résultat
    1.01423205474e+304
    1.94242639524e+130
    1.97007111403
    Donc exp(1000) est 1.97007111403e+434






    Par contre je ne sais pas si et comment il serait possible d’obtenir plus de chiffres significatifs.
    Les capacités de Python de base pour les nombres entiers sont illimitées; par exemple:
    1032**196 (1032 à la puissance 196) est
    47997726761100350025041056233911194221331253580220209003777677
    42920947244984722962818695487413201001402321774804914833304385
    67393990258286657318575462149433232996628079009541578768909308
    06783114545720952448001416815095387023074946542232470156441367
    95936869071073549404099420354008343437770055249012060227533223
    94008921599141542330100980024351377910809495135598556370802030
    76744681496970123464200765817659628128078823201427125460193604
    44588706506447065078339327023340821212628026452167601069308829
    45853894822136421928085843444732220202549141968217374435570786
    255702667321337111363021938098176
    Mais exp(1000) est un nombre décimal.

    Il y a un module “decimal“ dans Python qui permet de faire des choses plus poussées. Sans doute, avec des manipulations et des astuces mathématiques, arriverait-on à obtenir plus de chiffres significatifs.

    Mais même avec Python, la question posée par FR119492 finit par réclamer réponse:
    À part ça, à quoi cela sert-il de calculer exp(1000)?
    Faire de l'astronomie ?


    PS

    Je viens de voir que tu avais déjà mis une réponse.


    À propos du nombre de chiffres obtenus pour la représentation de exp(1000):
    de toutes façons, il s’agit de savoir si la fonction à laquelle on fournit exp(1000) est capable de tenir compte de tous les chiffres.

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    merci.

    et j'applique votre méthode pour mon calcul.

  6. #6
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    En complément à "FR119492", je ne vois pas vraiment en quoi consiste le calcul de exp(1000)

    Mais bo, sur ma machine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    >> exp(709.782)
     
    ans =
     
      1.7964e+308
     
    >> exp(1000)
     
    ans =
     
       Inf
    Même si tu essaye de contourner cette limitation, comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    >> exp(500)*exp(500)
     
    ans =
     
       Inf
    Tu dépasse la valeur maximale tolérée par ta machine (et non par matlab).

    Donc tu as deux solutions :
    1. Trouver une machine qui soit un peu plus musclée que celle-là !
    2. Baisser les bras !
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  7. #7
    Membre chevronné
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Points : 1 884
    Points
    1 884
    Par défaut
    A près avoir bien réfléchie, je te propose de modifier ta question par :
    Quelle est la valeur maximal dont je peux calculer l'exponentielle ?

    >> exp(x) = realmax
    => log(exp(x)) = log(realmax)
    => x.log(exp(1)) = log(realmax)
    => x = log(realmax)/log(exp(1))
    => x = selon la machine dont tu exécutes la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> log(realmax)/log(exp(1))
     
    ans =
     
      709.7827
    La valeur extrême que je peux calculer l'exponentielle sur ma machin est de 709.7827
    Les règles Les cours La fonction rechercher

    N'oubliez pas de mettre en et de voter.

    La terre n'est pas un héritage de nos parents, mais un emprunt que nous faisons à nos enfants. La protection de notre environnement est la responsabilité de tous. Ne reculez plus devant l'urgence, agissez !

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut comment calculer exp(1000)
    Maple donne la réponse avec une précision arbitraire
    exp(1000) = 1.9700711140170469939 10^434
    sinh(1000) = 9.8503555700852349694 10^433

    Mais on peut très facilement faire le calcul en passant par le log à base 10:
    log10(exp(1000)) = Ln(exp(1000))/Ln(10) =1000/Ln(10) =1000/2.302585093 = 434.2944819
    Donc
    exp(1000) = 10^434.2944819= (10^0.2944819)*(10^434)

    La mantisse s'évalue avec n'importe quel outil actuel (Matlab, Calculatrice de poche, Excel) ou ancien (règle à calcul, table de logarithmes de Laborde)
    10^0.2944819 = 1.970071114

Discussions similaires

  1. [Système]comment peut on savoir si java tourne sur l'ordi?
    Par loveflower dans le forum Général Java
    Réponses: 2
    Dernier message: 03/01/2005, 19h01
  2. Comment peut-on dire : une bdd est petite, moyenne ou grosse
    Par Pierrinot dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 20/10/2004, 09h40
  3. Réponses: 4
    Dernier message: 21/09/2004, 22h25
  4. Comment peut on integer des controles dans un prog opengl
    Par franck31400 dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/04/2004, 10h06
  5. comment peut se servire d'une Api en delphi
    Par maamar dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 22/02/2003, 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