Partage
  • Partager sur Facebook
  • Partager sur Twitter

Calculer ln(

Ce rapporté à une puissance valide à virgule

Sujet résolu
    13 décembre 2017 à 15:26:32

    edouard22 : j'ai vérifié sur Wikipédia : ça converge sur le disque de rayon 1, y compris le bord, sauf pour z=-1. Donc ça converge pour z=1. Mais c'est trèèèès trèèèès leeeent. Donc à mon avis les calculatrices font ça autrement (mais il était tard et je n'ai pas voulu m'embêter).

    JeanBombheur : je n'ai pas utilisé le logarithme, je n'ai utilisé que des additions et des multiplications (même pas de calcul de puissance). Maintenant, si tu ne veux pas voir de logarithme du tout, pas même sous forme approchée, c'est impossible puisque les puissances réelles sont définies à l'aide du logarithme (et de l'exponentielle).

    Ou alors ton but est de trouver une nouvelle définition de \( \sqrt[a]{b} \) qui n'utilise pas de logarithme ? (Comme tu n'es pas clair, c'est difficile de savoir ce que tu veux exactement...)

    • Partager sur Facebook
    • Partager sur Twitter
      13 décembre 2017 à 17:45:38

      edouard je n'ais pas tout compris ton résonnement .

      Existe-il une façon approximative mais plus simple ex: Exp(a)≈2,71^a

      • Partager sur Facebook
      • Partager sur Twitter
        13 décembre 2017 à 17:47:49

        Quel précision cherches-tu ?
        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2017 à 19:00:30

          > Existe-il une façon approximative mais plus simple ex: Exp(a)≈2,71^a

          Plus simple que quoi ?

          En pratique, on calcule les exponentielles avec des développements en série :

          \[ \exp(x) = 1 + x + \dfrac{x^2}{2!} + \dfrac{x^3}{3!} + \dfrac{x^4}{4!} + \dfrac{x^5}{5!} + \dfrac{x^6}{6!} + \dfrac{x^7}{7!} + \dfrac{x^8}{8!} + \cdots \]

          -
          Edité par robun 13 décembre 2017 à 19:01:05

          • Partager sur Facebook
          • Partager sur Twitter
            13 décembre 2017 à 20:47:04

            non pour me permettre de calculer grâce a une égalité ln .

            j'en avais trouver une mais je ne sais pas la calculer sens avoir besoin de ln :

            ln(x)≈x^1/exp(1)  

            n'est pas valide 


            et dans ton programme sa  ces bien des logarithme ?

              double lnb = logarithme(b, n1) ;

                printf("ln b = %.9lf\n", lnb) ;

                double y = lnb / a ;

                double x = exponentielle(y, n2) ;

                printf("exp(%.9lf) = %.9lf\n", y, x) ;


            et dans le résonnement tu écris : expodentiel de ln de 2 fois 0,8 sous forme numérique 


            alors que souhaite calculer un racine d'un nombre décimal sens ln car ces pour calculer l'égalité précédente .

            -
            Edité par JeanBombheur 13 décembre 2017 à 21:07:24

            • Partager sur Facebook
            • Partager sur Twitter
              13 décembre 2017 à 21:08:14

              > et dans ton programme sa  ces bien des logarithme ?
              > double lnb = logarithme(b, n1) ;
              .
              Non, c'est l'appel à une fonction qui simule un logarithme mais ne l'utilise à aucun moment (elle ne fait qu'additionner et multiplier, en utilisant les formules que j'avais indiquées).
              .
              >    printf("ln b = %.9lf\n", lnb) ;
              .
              Pas de logarithme là-dedans. 'lnb' est le nom d'une variable (qui remplace un logarithme, d'où son nom).
              .
              >    double y = lnb / a ;
              .
              Idem.
              .
              >    double x = exponentielle(y, n2) ;
              .
              Appel à une fonction qui simule une exponentielle en ne calculant que des additions et des multiplications.
              .
              >    printf("exp(%.9lf) = %.9lf\n", y, x) ;
              .
              Pas de logarithme là-dedans. Le 'exp' de gauche est un mot qui s'affiche à l'écran, pas un calcul.
              .
              À part ça, inutile de dire que je ne sais toujours pas où tu veux en venir. Tu dis que tu veux calculer le logarithme grâce à une égalité, mais dès qu'on te donne une méthode pour calculer un logarithme, tu te plains qu'il y a un logarithme dedans !

              -
              Edité par robun 13 décembre 2017 à 21:08:55

              • Partager sur Facebook
              • Partager sur Twitter
                14 décembre 2017 à 11:58:53 - Message modéré pour le motif suivant : Message complètement hors sujet


                Outat el haj
                  14 décembre 2017 à 18:15:08

                  je n'est pas compris sur le coup le début explique

                  de plus je me plain car tu voudrais que je calcule d'un manière similaire a c'elle ci :

                  ln(x)exp(1/e*ln(x)) 

                  tu était bien partie mais 

                  2^0,8=exp(0,8ln(2))

                  incalculable sens ln  

                  contiens ln

                  -
                  Edité par JeanBombheur 14 décembre 2017 à 21:05:42

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 décembre 2017 à 21:18:28

                    Encore une fois : pour calculer la racine x-ème d'un nombre, on a besoin du logarithme (et de l'exponentielle) car la racine x-ème d'un nombre est définie à partir d'un logarithme (et d'une exponentielle).

                    Donc si tu ne veux pas utiliser de logarithme, il faut trouver une autre définition (existe-t-elle ? c'est ton problème).

                    Du coup je re-pose la question, encore une fois, puisque tu ne veux pas répondre :

                    → Ton but est-il de trouver une définition de \( \sqrt[a]{b} \) qui n'utilise pas de logarithme ?

                    • Partager sur Facebook
                    • Partager sur Twitter
                      15 décembre 2017 à 17:44:41

                      Donc on ne peut pas le calculer avec un égalité il faut forcément avoir un graphique
                      • Partager sur Facebook
                      • Partager sur Twitter
                        15 décembre 2017 à 20:10:44

                        On ne peut pas le calculer de façon exacte. C'est comme π, ou e, ou même la racine carrée de 2. Comme l'infinie majorité des nombres réels.

                        Un graphique non plus ne permet pas de le calculer de façon exacte.

                        Pour le calculer de façon approchée, on peut procéder comme j'ai montré.

                        (Donc ton but est top secret, c'est ça ? Tu travailles pour les Chinois du FBI ? ;) )

                        -
                        Edité par robun 15 décembre 2017 à 20:11:40

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 décembre 2017 à 13:29:58

                          je travaille pour les chinois pourquoi :)

                          mon but et de pouvoir calculer ln d'un (ou plusieurs) entier(s) avec comme seul outils un papier blanc et un crayon .

                          mais avec tout ce que je sais et que j'ais appris sa donne sa:

                          ln(x)=x^1/e=exp(e*ln(x))

                          ce qui me bloc ;

                          -
                          Edité par JeanBombheur 16 décembre 2017 à 13:33:25

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 décembre 2017 à 13:40:47

                            JeanBombheur a écrit:

                            je travaille pour les chinois pourquoi :)

                            mon but et de pouvoir calculer ln d'un (ou plusieurs) entier(s) avec comme seul outils un papier blanc et un crayon .

                            mais avec tout ce que je sais et que j'ais appris sa donne sa:

                            ln(x)=x^1/e=exp(e*ln(x))

                            ce qui me bloc ;

                            -
                            Edité par JeanBombheur il y a 3 minutes

                            Pourquoi ? 
                            Il faut bien comprendre que les seuls solutions de définir ln ont déjà été données.  On ne peut rien te donner de plus...

                            Limite, si tu veux trouver des valeurs de ln avec un crayon: tu trace e^x.
                            Pour trouver ln(y) tu trace une ligne horizontal à la hauteur y. Tu regarde le croisement avec la courbe de e^x, et l'abside de ce point te donne ln(y) :)

                            Ou alors, tu trace e^x, puis tu fais une symétrie par rapport à la droite y=x. et tu as tracé ln(x)  

                            -
                            Edité par edouard22 16 décembre 2017 à 13:51:36

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 décembre 2017 à 17:09:01

                              > mon but et de pouvoir calculer ln d'un (ou plusieurs) entier(s) avec comme seul outils un papier blanc et un crayon .
                              .
                              OK. Donc la réponse a été donnée page précédente : j'ai donné un moyen de calculer le logarithme d'un nombre compris entre 0 (exclu) et 2 (inclus). Pour des nombres différents, on utilisera la formule ln(ab) = ln(a) + ln(b).
                              .
                              > mais avec tout ce que je sais et que j'ais appris sa donne sa:
                              > ln(x)=x^1/e=exp(e*ln(x))
                              .
                              Là tu n'as pas avancé, tu as au contraire reculé puisque maintenant tu te trouves avec des exponentielles en plus du logarithme.
                              . 
                              De plus cette formule est fausse (ln(x) ne fait pas x^1/e).
                              .
                              (En tout cas, n'oublie pas que ln(n) n'admet pas de valeur décimale exacte, on ne peut donc connaître que sa valeur approchée.)

                              -
                              Edité par robun 16 décembre 2017 à 17:11:09

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 décembre 2017 à 20:05:55

                                ln(x)=x^1/e     n'est pas bon

                                je l'avais conclut parque je sais qu'ln est la fonction inverse de exp donc j'ais changer le signe opératoire par son opposé mais pour calculer la racine d'un décimal il me faut utiliser une puissance ces pourquoi j'ai changer encore le signe opératoire puis changer l’exposant par sont opposé pour pouvoir calculer la racine 1/e de x .

                                le problème avec cette méthode ces qu'il faut pour calculer la racine d'un décimal , ln et on reboucle .

                                je n'est compris ou j'avais faux.       

                                -
                                Edité par JeanBombheur 16 décembre 2017 à 20:08:33

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 décembre 2017 à 4:52:43

                                  > je n'est compris ou j'avais faux.

                                  Qu'est-ce que tu n'as pas compris ? Le fait que c'est faux ou pourquoi ton raisonnement mène à une formule fausse ?

                                  1er cas : prenons x=1. D'un côté on a ln(1) = 0, de l'autre 1^1/e = 1. Donc c'est faux.

                                  2ème cas : je crois que quelqu'un a donné l'explication page précédente, sans doute une confusion entre inverse et réciproque.

                                  -
                                  Edité par robun 17 décembre 2017 à 4:55:21

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    18 décembre 2017 à 0:16:40

                                    JeanBombheur a écrit:

                                    je l'avais conclut parque je sais qu'ln est la fonction inverse de exp donc j'ais changer le signe opératoire par son opposé mais pour calculer la racine d'un décimal il me faut utiliser une puissance ces pourquoi j'ai changer encore le signe opératoire puis changer l’exposant par sont opposé pour pouvoir calculer la racine 1/e de x .


                                    Robun a vraiment une patience incroyable. Là c'est plus mathématiques dont on parle, mais bien de mathémagie. 

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      18 décembre 2017 à 21:10:55

                                      Et sa s'aproche pour les supérieur à 1  

                                      Car là tu a pris une des exceptions 

                                      -
                                      Edité par JeanBombheur 18 décembre 2017 à 21:17:23

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        19 décembre 2017 à 2:05:30

                                        Tu penses que x^1/e est une valeur approchée de ln(x) ?

                                        Voyons sur quelques valeurs :

                                        x = 0.001 → x^1/e ~ 0.079 et ln(x) ~ -6.908

                                        x = 0.1 → x^1/e ~ 0.429 et ln(x) ~ -2.303

                                        x = 3,14 → x^1/e ~ 1.523 et ln(x) ~ 1.144

                                        x = 10 → x^1/e ~ 2.333 et ln(x) ~ 2.303

                                        x = 123456 → x^1/e ~ 74.656 et ln(x) ~ 11.724

                                        x = 10^10 → x^1/e ~ 4773.033 et ln(x) ~ 23.0259

                                        L'équation \( x^{1/e} = \ln x \) semble avoir une solution aux alentours de x ~ 10 (ou pas loin). Et donc, sous prétexte que f(x)=g(x) admet une solution, tu en déduis que l'un est une approximation de l'autre ? :magicien:

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          19 décembre 2017 à 18:13:14

                                          pour résoudre mon problème je suis aller voir un  de mes professeur pour qu'il m'éclaire , et bien il m'a dit que pour calculer ln sont calculatrice il fallait calculer e^n jusqu'à avoir comme résulta le x ln(x)  .ce que je sais mais je pensé qu'il existé une façon plus efficace  . :(

                                          -
                                          Edité par JeanBombheur 21 décembre 2017 à 17:52:33

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 décembre 2017 à 20:22:46

                                            L'algorithme le plus efficace pour calculer un logarithme est à coup sûr celui employée par les calculatrices et les ordinateurs, puisqu'il est hors de question de gaspiller du temps de calcul. J'ignore quel algorithme est utilisé et j'avoue que je serais curieux de le connaître.

                                            (Pour l'exponentielle, c'est sûrement son développement en série, vu la rapidité de convergence de ce développement. Mais pas pour le logarithme car son développement est très très lent à converger.)

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 décembre 2017 à 22:36:18

                                              En faisant quelques recherches sur les algos utilisé pour les calculs, je suis tombé sur ceci : https://www.apmep.fr/IMG/pdf/AAA07013.pdf

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 décembre 2017 à 23:01:41

                                                robun a écrit:

                                                L'algorithme le plus efficace pour calculer un logarithme est à coup sûr celui employée par les calculatrices et les ordinateurs, puisqu'il est hors de question de gaspiller du temps de calcul. J'ignore quel algorithme est utilisé et j'avoue que je serais curieux de le connaître.

                                                (Pour l'exponentielle, c'est sûrement son développement en série, vu la rapidité de convergence de ce développement. Mais pas pour le logarithme car son développement est très très lent à converger.)


                                                Je viens de voir un lien qui parlait de l'utilisation de l'algo CORDIC pour calculer Ln sur les calculatrices qui marcherait plutôt bien : https://www.apmep.fr/IMG/pdf/AAA07013.pdf

                                                edit ; neuneutrinos a trouvé le même lien ^^

                                                -
                                                Edité par edouard22 20 décembre 2017 à 2:15:38

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 décembre 2017 à 1:02:28

                                                  Ah, merci à tous les deux ! C'est toujours intéressant de savoir comment on calcule ça...
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    20 décembre 2017 à 11:06:50

                                                    Du coup j'ai trouvé ce lien qui montre l'algorithme CORDIC pour le logarithme mais pour le base 2.
                                                    https://www.math.u-psud.fr/~perrin/CAPES/analyse/Suites/Cordic.pdf
                                                    Mais sous forme d'exercices niveau terminal.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      21 décembre 2017 à 17:51:54

                                                      On sort de mes compétence mathématique (je comprend la base 2 mais dans ce document ces bien plus complexe , je comprend jusqu'à l'inéquation mais ce qui suit beaucoup moins)mais j'ai compris ce que je voulais savoir merci a tous , passer de bonne fête .

                                                      ;)

                                                      je ne vous est pas dit pourquoi je chercher a calculer ln .je chercher a calculer ln pour pouvoir calculer des puissance aillant des exposent décimal et pouvoir définir ln par un égalité simple . Mais aussi pour prendre de l'avance comme toute les année mais la je bloquer ce pourquoi je vous questionnez .tbc92 m'avais demander mon niveau scolaire et je ne lui est pas répondu , je suis en 3  éme et je m'ennui dans toute les matière scientifique je sais tout le programme et plus ( majoritairement en math et en physique d'une simplicité actuelment pour moi * )  , alors tuer le temps j'es entrepris de comprendre a quoi corresponde chaque touche de ma calculatrice et de savoir ou les utilisé (ex ln et exp pour les puissance a exposant décimal );   merci .

                                                      *exemple : les pourcentage et thalles en math ou encore la différence entre poids et masse et dire que pour certain ces d'une complexité monstrueuse " je parle pour le niveau 3 éme moyen évidemment n'aller pas croire que je dis que pour tous ces simple "

                                                      -
                                                      Edité par JeanBombheur 21 décembre 2017 à 18:30:10

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        21 décembre 2017 à 21:56:00

                                                        JeanBombheur a écrit:

                                                        alors tuer le temps j'es entrepris de comprendre a quoi corresponde chaque touche de ma calculatrice et de savoir ou les utilisé (ex ln et exp pour les puissance a exposant décimal )

                                                        Très bonne idée !

                                                        Quand je suis rentré en seconde, j'ai eu une calculatrice (à l'époque on n'en utilisait pas au collège) et, pareil, je me suis demandé ce qu'était les autres touches. En tapotant, j'ai vite compris à quoi servait la touche 'log' (mais pas 'ln'). Notre prof de musique nous a alors expliqué comment était calculée la gamme tempérée (à base de logarithmes décimaux, ce qui était complètement hors programme en seconde) et j'ai dû être un des rares à comprendre ce qu'il disait... :)

                                                        Une question intéressante, c'est de savoir comment la calculatrice fait pour trouver un logarithme ou un cosinus, mais là ce n'est pas facile. Ces fonctions sont dites transcendantes (pour une raison que je ne vais pas détailler), et les fonctions transcendantes ne sont pas calculables de façon exactes, on ne peut que trouver des valeurs approchées, en général à l'aide de séries comme celles que j'avais exposées page précédente.

                                                        --------------------------------------------------------------------------------------------------------

                                                        Ça alors !

                                                        Tout à fait par hasard, je feuilletais au hasard un des volumes de l'Encyclopædia Universalis, un exemplaire des années 1970 que mes parents avaient acheté à l'époque. Je tombe sur l'article "Programmation". Je le feuillette et... il y a un algorithme tout simple pour calculer le logarithme ! Apparemment ce n'est pas l'algorithme CORDIC, quoique (j'ai parcouru rapidement les liens à son sujet, alors...)

                                                        Ce qui me plaît, c'est sa rapidité : à chaque itération, l'intervalle d'erreur est divisé par 2. Ainsi, en N itérations, on a une erreur de \( \dfrac{1}{2^N} \). Dit autrement : pour avoir une erreur de \( 10^{-n} \), il suffit de que le nombre d'itérations soit supérieur à \( \dfrac{\ln 10}{\ln 2}\cdot n \) c'est-à-dire \(3,322\cdot n \) si je n'ai pas fait d'erreur(s) de calcul. Ça c'est rapide ! (Alors qu'avec le développement de ln(1+x), il fallait s'attendre à des millions d'itérations pour avoir ne serait-ce que du 10^-6...)

                                                        Du coup j'ai écrit un programme pour mettre en œuvre l'algorithme, il donne bien les valeurs de ma calculatrice (c'est du C) :

                                                        /* Calcul du logarithme en base b */
                                                        
                                                        #include <stdio.h>
                                                        #include <stdlib.h>
                                                        
                                                        double dixp(int n)
                                                        // Retourne 10^n où n est positif ou négatif
                                                        {
                                                            double x = 1.0 ;    // résultat à retourner
                                                            // if (n == 0) : il n'y a rien à faire
                                                            if (n > 0)
                                                            {
                                                                for (int i = 1 ; i <= n ; i++)
                                                                    x *= 10.0 ;
                                                            }
                                                            else if (n < 0)
                                                            {
                                                                for (int i = 1 ; i <= -n ; i++)
                                                                    x /= 10.0 ;
                                                            }
                                                            return x ;
                                                        }
                                                        
                                                        double logbase(double b, double x, int n)
                                                        // Retourne log_b(x) à 10^-n près
                                                        // Attention : il faut que b > 1 et x > 0
                                                        {
                                                            double eps = dixp(-n) ;
                                                            double y = 0 ;  // valeur à retourner
                                                            double s = 1 ;  // contrôle de l'erreur
                                                            while (x >= b)
                                                            {
                                                                y += 1.0 ;
                                                                x /= b ;
                                                            }
                                                            while (x < 1)
                                                            {
                                                                y -= 1.0 ;
                                                                x *= b ;
                                                            }
                                                            // Ici, y est la partie entière de log_b(x) et on a : 1 <= x < b
                                                            while (s >= eps)
                                                            {
                                                                s *= 0.5 ;
                                                                if (x*x >= b)
                                                                {
                                                                    y += s ;
                                                                    x *= x / b ;
                                                                }
                                                                else
                                                                {
                                                                    // y inchangé
                                                                    x *= x ;
                                                                }
                                                            }
                                                            // Ici, y est égal à log_b(x) à eps près
                                                            return y;
                                                        }
                                                        
                                                        int main(void)
                                                        {
                                                            int calcul ;    // "vrai" si on souhaite un nouveau calcul, 0 sinon
                                                            double b ;      // base
                                                            double x ;      // x
                                                            int n ;         // nombre de chiffres après la virgule
                                                            do
                                                            {
                                                                printf("Calcul du logarithme de x en base b à 10^-n près\n") ;
                                                                printf("\tb = ") ; scanf("%lf", &b) ;
                                                                printf("\tx = ") ; scanf("%lf", &x) ;
                                                                printf("\tn = ") ; scanf("%d" , &n) ;
                                                                if ((b > 1.0) && (x > 0.0))
                                                                    printf("\tlog_b(x) \u2248 %.12lf\n", logbase(b, x, n)) ;
                                                                else
                                                                    printf("Données incompatibles\n") ;
                                                                printf("Nouveau calcul ? (0 = stop) : ") ; scanf("%d", &calcul) ;
                                                            } while (calcul) ;
                                                            return EXIT_SUCCESS ;
                                                        }

                                                        -
                                                        Edité par robun 21 décembre 2017 à 23:15:42

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          22 décembre 2017 à 17:31:09

                                                          Pour cosinus et sinus elles ont un modulo π en mémoir ce qui donne en radian , il suffit de convertir degré

                                                          -
                                                          Edité par JeanBombheur 22 décembre 2017 à 17:34:30

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Calculer ln(

                                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                          • Editeur
                                                          • Markdown