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

Mathématiques Discussion :

Quelques algos trop dur pour moi :-(


Sujet :

Mathématiques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut Quelques algos trop dur pour moi :-(
    voila je laisse des exos d'algos si quelqun veut se devouer ...
    trop dur pour moi


    1-algo du traitement qui calcul le log en base A d'un nombre X stt positif
    A et X sont saisis au clavier !
    dans un 1er tps donner la fonction qui donne le log en base A a partir de la fonction log neperien

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    1. Nous ne sommes pas là pour faire tes exercices pour toi, on te demandes un minimum d'efforts (qu'est-ce que tu as déjà essayé, quels points précis te restent encore obscurs, etc...)
    2. La question est enfantine, quel est donc ton niveau en Maths et qu'est-ce que tu suis comme formation ?


    --
    Jedaï

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut


    je sais deja que loog de X en base A = ln X / ln A

    apres voila je narrive pas

  4. #4
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Le plus simple, c'est encore d'utiliser les séries :

    http://en.wikipedia.org/wiki/Logarit...ural_logarithm

  5. #5
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par Pugebad Voir le message


    je sais deja que loog de X en base A = ln X / ln A

    apres voila je narrive pas
    tu n'as pas répondu à la seconde question.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 371
    Points : 65
    Points
    65
    Par défaut
    pas grve merci quand meme

  7. #7
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Bonjour Pugebad,

    je pense que c'est simple ton algorithme, voici ma façon de faire (je pense pas qu'il y ait 36 façon ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    répéter
     lire(x, a);
    jusqu'à ce que ((x > 0) et (a > 0))
     
    logAX = ln(x) / ln(a);
     
    afficher(logAX);
    Bon courage !

    Cordialement,
    Sidahmed.

  8. #8
    Membre éprouvé Avatar de Nemerle
    Inscrit en
    Octobre 2003
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 106
    Points : 1 213
    Points
    1 213
    Par défaut
    Citation Envoyé par sidahmed Voir le message
    Bonj
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    répéter
     lire(x, a);
    jusqu'à ce que ((x > 0) et (a > 0))
     
    logAX = ln(x) / ln(a);
     
    afficher(logAX);
    Bizarre... ln() ne porte que sur des x>0, donc la condition "jusqu'à ce que" s'arrête tout de suite... un jour quelqu'un vérifiera son code avant de le poster?

  9. #9
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Citation Envoyé par Nemerle Voir le message
    Bizarre... ln() ne porte que sur des x>0, donc la condition "jusqu'à ce que" s'arrête tout de suite... un jour quelqu'un vérifiera son code avant de le poster?
    Où est donc le problème ? "Jusqu'à ce que" se porte sur la lecture de x et a.
    Une fois qu'on a x et a à la fois strictement positifs, on pourra passer au calcul de la grandeur loga(x).

    Cordialement,
    Sidahmed.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Points : 1 111
    Points
    1 111
    Par défaut
    Demander un algorithme de logarithme, ca ne veut pas dire grand chose ... La version de Sid ressemble à une implémentation directe dans un langage possédant la fonction logarithme népérien, ce n'est pas à proprement parler un algorithme de calcul de logarithme.

    Utiliser les séries pour calculer ln(), c'est bien, mais il faut un bon niveau en mathématiques pour déterminer la condition de convergence, etc. As-tu étudié les séries en mathématiques ?

  11. #11
    Inactif  
    Inscrit en
    Mars 2006
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 352
    Points : 292
    Points
    292
    Par défaut
    Bonjour,
    Citation Envoyé par kromartien Voir le message
    Demander un algorithme de logarithme, ca ne veut pas dire grand chose ... La version de Sid ressemble à une implémentation directe dans un langage possédant la fonction logarithme népérien, ce n'est pas à proprement parler un algorithme de calcul de logarithme.

    Utiliser les séries pour calculer ln(), c'est bien, mais il faut un bon niveau en mathématiques pour déterminer la condition de convergence, etc. As-tu étudié les séries en mathématiques ?
    Je pense pas que Pugebad cherche l'algorithme en utilisant le développement limité du ln(.), enfin ce que j'avais compris d'après la description de son problème.

    Cordialement,
    Sidahmed.

  12. #12
    Rédacteur
    Avatar de Zavonen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 772
    Détails du profil
    Informations personnelles :
    Âge : 77
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 772
    Points : 1 913
    Points
    1 913
    Par défaut
    Si on n'a pas le droit d'utiliser la librairie mathématique (cela parait évident).
    Pas besoin d'avoir recours aux développement en série.
    D'ailleurs la convergence de ln(1+x) n'est pas rapide
    Utiliser la définition pour x entre 1 et 2 par un calcul d'intégrale
    en utilisant par exemple les trapèzes
    pour x>2 utiliser ln(ab)=ln(a)+ln(b) et ln(a^n)=nln(a)
    pour x<1 utiliser ln(1/x)=-ln(x)
    Voici ce que cela donne, par exemple en C
    NB: pour lna(x)
    utiliser monlog(x)/monlog(a)

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    #include <stdio.h>
    #include <stdlib.h>
    # include <math.h>
     
    double f(double x)
    {
        return 1/x;
    }
     
     
    double integrale_trapezes (double a, double b, int n, double f(double))
    {
        double h=(b-a)/n;
        int i;
        double s;
        for (i=0,s=0;i<n;s+=h*(f(a+i*h)+f(a+(i++)*h))/2);
        return s;
    }
     
    int pow2_exp(double x)
    {
        int n;
        for (n=0;x>2;x=x/2,n++);
        return n;
    }
    double pow2_mant(double x)
    {
        while (x>2)
            x/=2;
        return x;
    }
     
    double monlog_entre_1_et_2(double x)
    {
        return integrale_trapezes(1,x,1000000,f);
    }
     
    double monlog_plus_grand_que_2(double x)
    {
        return pow2_exp(x)*monlog_entre_1_et_2(2)+monlog_entre_1_et_2(pow2_mant(x));
    }
     
    double monlog_plus_grand_que_1(double x)
    {
        if (x<=2) return monlog_entre_1_et_2(x);
        else
            return monlog_plus_grand_que_2(x);
    }
     
    double monlog_plus_petit_que_1(double x)
    {
        if (x>=1) return monlog_plus_grand_que_1(x);
        else
            return -monlog_plus_grand_que_1(1/x);
    }
     
    double monlog(double x)
    {
        if (x<1) return monlog_plus_petit_que_1(x);
        else return monlog_plus_grand_que_1(x);
    }
     
     
    int main()
    {
        printf("%lf\n",monlog(0.1));
        printf("%lf\n",log(0.1));
        printf("%lf\n",monlog(0.5));
        printf("%lf\n",log(0.5));
        printf("%lf\n",monlog(1));
        printf("%lf\n",log(1));
        printf("%lf\n",monlog(1.5));
        printf("%lf\n",log(1.5));
        printf("%lf\n",monlog(2));
        printf("%lf\n",log(2));
        printf("%lf\n",monlog(10));
        printf("%lf\n",log(10));
        printf("%lf\n",monlog(1000));
        printf("%lf\n",log(1000));
        return 0;
    }

  13. #13
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    Sinon il y a aussi l'algorithme CORDIC (utilisation intelligente de l'indentité log(ab)=loag(a)+log(b)). C'est très rapide et surtout très précis.

Discussions similaires

  1. [MySQL-5.5] Requete SQL trop dur pour moi ^_^
    Par ExtremeI dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/08/2013, 21h38
  2. Requete (trop ) compliquée ( pour moi )
    Par hisy dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 16/06/2006, 14h16
  3. Réponses: 7
    Dernier message: 13/01/2006, 18h02
  4. Requête un peu trop compliqué pour moi
    Par Kokito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2005, 16h17

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