Fonction logarithmique à partir d'un nuage

Bonjour à tous
Mes cours de maths sont loin, trop loin alors j'aurais besoin d'un peu d'aide si possible.

J'ai un nuage de points ci-dessous :
      0 =>      0
 50 000 =>  5 000
100 000 => 10 000
200 000 => 13 000
300 000 => 16 000
600 000 => 22 000
900 000 => 25 000
En gros j'aurais besoin de trouver la fonction qui permet de tracer la courbe rouge du lien ci-dessous pour de se rapprocher de tous les points ?

PS. J'ai par contre impérativement besoin qu'elle passe par le troisième point si possible (100 000 => 10 000).
Merci !113700

Réponses

  • Bonjour.

    Une façon pratique est de placer tes points sur un papier logarithmique, de tracer à la main une droite d'ajustement (en la faisant passer par le point impératif, puis de retrouver, à l'aide de la pente et de l'ordonnée à l'origine, l'équation de la courbe d'ajustement. Qui passera par le point impératif, mais pas nécessairement par l'origine, comme ta courbe l'indique.

    Une méthode algébrique va être plus pénible. Tu veux une courbe d'ajustement de la forme $y= a \ln(bx+c)$, j'imagine. Voire $y= a \ln(bx+c) +d $. Si tu imposes de passer par le point impératif, et par l'origine, ça te permet de ramener à 2 les paramètres. Ensuite, tout dépend comment tu définis "se rapprocher de tous les points". Généralement, on utilise une condition "des moindres carrés", qui sera que la somme des $\left(y_i -a \ln(bx_i+c)\right)^2$ pour tous les points $(x_i,y_i)$ du nuage soit la plus faible possible (*). problème classique de minimisation.

    Cordialement.

    (*) J'ai repris le premier type de courbe.
  • L = [(0,0), (50000,5000),(100000,10000),(200000,13000),(300000,16000),(600000,22000),(900000,25000)]
    var('a b c')
    model(x)=a*ln(b*x+c)
    D  = find_fit(L,model,solution_dict=1)
    D2 = find_fit(L+1000*[L[2]],model,solution_dict=1)
    (list_plot(L)+plot(model(x).subs(D),(0,1e6),color="red")+plot(model(x).subs(D2),(0,1e6),color="maroon")).show(aspect_ratio=7,figsize=9)
    print D ; print D2
        {c: 0.9932154933916366, b: 1.7663555189020462e-05, a: 8866.137441280625}
        {c: 0.9877914811836933, b: 2.7113608164093632e-05, a: 7642.367974895302}
    
    Traduction :
    • (courbe rouge) la meilleure approximation par une fonction de la forme $x\mapsto a\ln(bx+c)$ est obtenue pour $a=8866{,}14$, $b=1{,}7663\cdot10^{-5}$, $c=0{,}993215$ ;
    • (courbe maroon) en répétant mille fois le troisième point, on force la courbe passer par (tout près de) lui, pour $a=7642{,}36$, $b=2,71136\cdot10^{-5}$, $c=0{,}98779$.
    113702
  • Merci à tous les deux, du coup j'ai pu trouver ma réponse : y = 6841.4*ln(x) - 69399.
  • Étonnant ! À part le troisième, cette courbe (en vert) est plus loin de tous les points que la rouge... Sans même évoquer le premier, $(0,0)$, où elle s'en éloigne infiniment.

    Noter que $a\ln(bx+c)=a\ln\bigl(x+\frac{c}{b}\bigr)+a\ln b$ donc le fit est le même qu'avec les fonctions $a\ln(x+c)+d$. Le décalage $c$ est indispensable à cause du point $(0,0)$ : il faut éviter la limite infinie du logarithme en $0$.113708
  • Effectivement, le d ne sert à rien !

    Merci de l'avoir signalé, je n'avais jamais rencontré le cas.

    Cordialement.
  • kernings a posé la même question sur un autre site. Et sa réponse vient de là-bas.
    Le problème (0,0) y a été évoqué, mais ils sont restés sur une courbe du type y= a*ln(x)+b.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
    L'hypocrisie est pire qu'une vérité qui fait mal. Franck Ntasamara.
  • Merci à tous.
    Du coup quelle serait l'équation de la courbe rouge ?
    Après la courbe verte fait quand même le job pour moi (tu)
  • Bonjour.

    On ne peut pas deviner l'équation d'une courbe à partir de son tracé. Tout simplement parce que le tracé recouvre une infinité de courbes : Si y=f(x) est une équation correspondant à la courbe rouge, y=f(x)+0,0001 a une courbe qui est confondue, vu les unités utilisées; idem pour y=1,000001f(x) ou y=f(x)+0,0001*sin(x).

    Autre chose : Pour $x=100 000,\ y = 6841.4\times\ln(x) - 69399 \approx 9365,52824$. On n'est pas du tout à 10 000.

    Cordialement.
  • Les équations des courbes rouge et « maroon » sont écrites ici : $y=a\ln(bx+c)$ avec les valeurs de $a$, $b$ et $c$ indiquées.

    Je trouve globalement un peu désinvolte de poser des questions, ne pas lire les réponses, leur préférer une moins bonne réponse, finalement se raviser mais toujours sans lire les réponses. « Du coup », tant qu'il y aura des débiles comme moi prêts à perdre leur temps, ça va marcher, hein ?
Connectez-vous ou Inscrivez-vous pour répondre.