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

Algorithmes et structures de données Discussion :

inversion de fonction de calcul


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut inversion de fonction de calcul
    bonjour,
    j'aimerais associer a un nombre x un intervalle de valeur [xmin,xmax] avec pour condition l'intervalle de x+1 = [xmax, xmax *2 + 100]
    de maniere recursive je sais calculer l'intervalle, mais j'aimerais pouvoir calculer directement l'appartenance d'une valeur a un intervalle.
    Exemple :
    valeur 12300 appartient a l'intervalle x.

    merci de votre aide ou/ et de vos conseils

  2. #2
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    cherches tu l'intervalle minimum qui contient ta valeur ?
    quelle est la valeur de l'intervalle x0 ?

    prenons x(0) le premier intervalle.

    tu peut tout simplement faire une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    int chercheInterval(valeur)
    {
    for(int i=0 ; i < MAX_INTERVAL ; i++)
    {
            if(valeur >= x(i).MIN && valeur <= x(i).MIN)
                  return i;
    }
     
    return -1;
    }
    XXiemeciel

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    les intervalles sont exclusifs, l'intervalle x0 sera [0,99], x1 [100,299], x2 [300,699], x3 [700,1499], ...

    la valeur max est calculer par rapport a une fonction affine ( y = ax +b)applique a la valeur min. La valeur min de l'intervalle est la valeur max de l'intervalle precedent +1. Le premier intervalle est [0, b]

    j'espere etre clair?
    merci

  4. #4
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    en dehors de la boucle que j'ai donné avant je me demande si il n'y a pas une formule mathematique qui te donnerais directement l'interval

    j'ai pas trop le temps d'y reflechir mais peut etre quelqu'un va s'y pencher, ou sinon essaye de trouver si tu es bon en math.

    XXiemeciel

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    le probleme de ta boucle c que je doit connaitre a l'avane les differents intervalles ou bien les recalculés a chaque fois.

  6. #6
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    d'apres ta formule tu as juste a connaitre x(0) tout les autres se deduisent a partir du premier.

    Donc tu as juste a donner x(0) ensuite x(i+1) se deduit lui meme a partir de x(i)

    XXiemeciel

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    l'objectif est de ne pas tout recalculé

  8. #8
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    comment veux tu determiner si tu appartiens a un interval sans en calculer les limites ?

    de plus je viens de realiser que ta formule x+1 = [xmax, xmax *2 + 100]
    ne fonctionne pas avec ton exemple.

    Citation Envoyé par jarko
    x0 sera [0,99], x1 [100,299], x2 [300,699], x3 [700,1499], ...
    XXiemeciel

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    en effet j'ai arrondi pour eviter les exclusions sinon ca fonctionne
    [0,100[, [100,300[, [300,700[, ...
    vu que je travaille avec des entiers cela est equivalent desoel de l'abus

  10. #10
    Membre chevronné Avatar de xxiemeciel
    Inscrit en
    Juin 2005
    Messages
    371
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 371
    Par défaut
    Salut,

    verifie par recurrence si cette formule est bonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Xn+1 = [Vn , Vn+1[
    V0 = 0;
    V1 = 100;
     
    Vn+1 = V0*2^n + (2n + 1)*V1
    je l'ai fait rapidement donc je me suis probablement trompé mais en le faisant calmement tu trouveras comment determiner ton interval n sans calculer tout les autres.

    XXiemeciel

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par défaut
    je remarque que la fonction intervalle supérieure peut s'écrire

    ((2 ^ (nbintervalle+1)*100)-100
    si je divise mon nombre par 100 que je l'écris en binaire
    que je compte le nombre de chiffres(n) (enfin le nombre n cherché j'ai la borne supérieure
    (à multiplier par 100)
    l'inférieure étant la supérieure de l'intervalle en dessous
    je recommence avec n-1

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    en repartant de ta formule rand j'arrive a
    numerointervalle = ((log(valeur+100) -2) / log(2)

    sinon xx ta formule est presque bonne la premiere partie V1*2^n je suis ok par contre la suite je suis pas d'accord

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 62
    Par défaut
    merci la formule fonctionne (enfin selon mes premier test)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction de calcul (convertisseur)
    Par MeRc|LeSs dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/12/2005, 18h24
  2. Réponses: 6
    Dernier message: 22/11/2005, 17h08
  3. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55
  4. Inverser la fonction automail.asp
    Par mael94420 dans le forum ASP
    Réponses: 3
    Dernier message: 30/06/2005, 13h47
  5. fonction qui calcule la factorielle ?
    Par piff62 dans le forum C
    Réponses: 8
    Dernier message: 27/02/2005, 11h00

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