Déterminer le minimum d'une fonction

2»

Réponses

  • Je viens de tester avec geogebra. Je crois que c'est la 2ème fois que j'utilise cet outil.

    J'ai tapé la formule comme ccapucine. J'ai obtenu une ligne horizontale, comme ccapucine.
    Puis j'ai utilisé la molette de la souris, pour zoomer, Et quand on zoome, on voit bien que la courbe a un point particulier, vers x = 0.426

    Dans geogebra en ligne, quand on ne connait vraiment pas, comme moi, en zoomant, on arrive à voir l'asymptote verticale, vers x=0.0426, mais on voit 2 asymptotes horizontales.... Bug d'arrondi dans les calculs ?
    Si on supprime le facteur 0.001, qui ne sert à rien, alors on voit bien la courbe, comme celle de Raoul S. Avec l'asymptote oblique. Correcte.

    Il faut dire que la formule est bien tordue. Au dénominateur, on a x (x+0.4) exp(10x) - 25.
    Quand on calcule ça pour x=20, comme dans le graphe de Ccapucine, on a un premier terme, qui est un nombre avec plus de 100 chiffres, et on retire 25 ... Forcément, les calculs vont être arrondis... un nombre de 100 chiffres, et on retire 25.
    Même pour x=3, on a déjà des erreurs d'arrondis.

    Il faut un peu de bon sens... Quand on a cette formule x (x+0.4) exp(10x) - 25. On fait en sorte de regarder la courbe pour des valeurs de x qui sont 'pertinentes' , au maximum x= 0.5

    Comment se comporte la courbe quand x tend vers l'infini ? Ca revient quasiment à se demander comment se comporte la courbe quand x est plus grand que 1.
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • Svp Math Coss pouvez vous m'aider à commenter les lignes du codes avec l fonction multipliée par 0.001
    f = 0.001*x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-25) // Définition de la fonction f
    d = x*(x+0.4)*exp(10*x)-25// Définition du dénominateur
    x0 = find_root(d,0,1) // Trouver les racine du dénominateur entre 0 et 1 (donc il faut d'abord faire le graphe du dénominateur?
    print("denominateur(%s) = %s" % (x0,d.subs(x=x0))) // Ca veut dire quoi?
    numerateur_derivee = (diff(f,x)*d^2).factor() // Ca veut dire quoi?
    x1 = find_root(numerateur_derivee,0.5,4)// Trouver les racines du numérateur entre 0.5 et 4 (suggéré par un dessin)?
    y1 = f.subs(x=x1)//Ca veut dire quoi?
    print("annulation de la derivee en %s\nvaleur de la fonction : f(%s) = %s" % (x1,x1,y1))
    G = plot(f,0,x0-1e-5)//?
    G+= plot(f,x0+1e-5,2.5)//?
    G+= point((x1,y1),size=15,color="orange")//?
    G+= text("(%.2f,%.2f)" % (x1,y1),(x1,y1+.3),fontsize="large",color="orange")//?
    G+= point((x0,0),size=15,color="gray")//?
    G+= text("%.2f" % x0,(x0,.3),fontsize="large",color="gray")//?
    G.show(ymin=-5,ymax=5)//?
    
  • Bonjour,
    j'ai étudié un poly sur Sage Math et j'ai lu qu'il y avait une instruction qui permet de calculer le minimum local directement.
    En essayant les lignes:
    f(x)= 0.001*x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-50)
    find_local_minimum(f,0,5)

    on obtient

    (-3579.5612911695102, 0.4780208726285326)

    ce qui n'est pas correct pour le -3579.56. Où est l'erreur? Svp
  • Mais enlève donc ce 0,001 qui doit faire faire plein d'erreurs inutiles à l'ordinateur.
  • J’ai essayé sans 0.001 et ça donne toujours une valeur erronée
    (-3579561.29116951, 0.4780208726285326)

    Je ne comprends pas ou se situe le problème
  • Bonjour,

    Pourquoi écrire $...-50$ au dénominateur alors que la valeur correcte est $...-25$ ?
  • Bonjour
    la toute première fonction qu’on a étudié a -50 au dénominateur.
    On a trouvé le résultat grâce à Matlab et une calculette et je voulais essayer avec SageMath.
    Je ne comprends pas pourquoi il donne une fausse valeur de f(0.49).
  • # Définition de la fonction f
    f = 0.001*x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-25)
    # Définition du dénominateur
    d = x*(x+0.4)*exp(10*x)-25
    # Trouver les racine du dénominateur entre 0 et 1
    # (pour savoir qu'il y a une racine entre 0 et 1,
    # il est commode de commencer par faire le graphe du dénominateur
    x0 = find_root(d,0,1)
    # affiche le résultat
    # (les %s sont des façons de remplacer des morceaux de chaîne :
    # par exemple, la chaîne "%s et %s" % ("Zig","Puce") est "Zig et Puce")
    print("denominateur(%s) = %s" % (x0,d.subs(x=x0)))
    # calcul du numérateur de la dérivée :
    # on dérive f par rapport à x, on multiplie par le dénominateur au carré
    # et on factorise pour forcer la simplification du dénominateur
    numerateur_derivee = (diff(f,x)*d^2).factor()
    # on trouve les racines du numérateur entre 0.5 et 4
    # (oui, c'est suggéré par un dessin)
    x1 = find_root(numerateur_derivee,0.5,4)
    # on remplace x par la valeur trouvée x1 dans l'expression f
    # autrement dit, on calcule f(x1)
    y1 = f.subs(x=x1)
    # affichage du résultat : la dérivée s'annule en x1 et la fonction prend la valeur y1
    print("annulation de la derivee en %s\nvaleur de la fonction : f(%s) = %s" % (x1,x1,y1))
    # on construit un graphe
    # graphe sur [0, x0[ où x0 est l'abscisse de l'asymptote verticale
    G = plot(f,0,x0-1e-5)
    # graphe sur ]x0, 2.5]
    G+= plot(f,x0+1e-5,2.5)
    # un point orange au minimum local (x1, y1)
    G+= point((x1,y1),size=15,color="orange")
    # les coordonnées de ce point juste au-dessus
    G+= text("(%.2f,%.2f)" % (x1,y1),(x1,y1+.3),fontsize="large",color="orange")
    # un point gris en (x0, 0)
    G+= point((x0,0),size=15,color="gray")
    # l'abscisse x0
    G+= text("%.2f" % x0,(x0,.3),fontsize="large",color="gray")
    # affichage du graphique avec des bornes restreintes sur les ordonnées
    G.show(ymin=-5,ymax=5)
    
  • Merci infiniment Math Coss.
    Pour le graphe qu’on obtient il n’est pas clair. Il y a une droite ce qu’on obtient pas avec Google pour les courbes.
    J’ai une dernière question sur ce topic.
    j'ai étudié un poly sur Sage Math et j'ai lu qu'il y avait une instruction qui permet de calculer le minimum local directement.
    En essayant les lignes:
    f(x)= 0.001*x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-50)
    find_local_minimum(f,0,5)

    on obtient

    (-3579.5612911695102, 0.4780208726285326)

    ce qui n'est pas correct pour le -3579.56. Où est l'erreur? Svp
  • Ce n'est pas ce que j'obtiens.
    sage: f(x) = x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-25)
    sage: find_local_minimum(f,0.5,4)
    (0.39440787646029624, 0.5637848167487527)
    sage: find_local_minimum(f,0,5)
    (0.3944078764602961, 0.5637848163209324)
    

    Ah oui mais tu as mis $-50$ dans le dénominateur. Voici un code pour SageCell.
    f(x) = x^3*exp(10*x)/(x*(x+0.4)*exp(10*x)-50)
    d = (x*(x+0.4)*exp(10*x)-50)
    print(find_root(d,0,1))
    print(find_local_minimum(f,0.5,5))
    (plot(f,(0.479,2.5))+plot(f,(0,0.477))).show(ymin=-5, ymax=5)
    
    L'origine de l'erreur, c'est que la valeur qui te semble aberrante est la valeur de la fonction tout près du zéro du dénominateur. Pour Sage, c'est bien la plus petite valeur prise sur l'intervalle $[0,5]$ et nous pouvons l'interpréter comme l'approximation de $-\infty$ par Sage. En cherchant le minimum local sur $[0.5,5]$, tout redevient normal.

    NB : avec le facteur 0.001, la fonction est trop écrasée : il y a des valeurs « grandes » près de l'asymptote et le reste est écrasé vers $0$.
  • Ah oui la c’est bon. Vous avez pris d’autres points pour le minimum local.
    Du coup c’est très important de faire un graphe avant de faire les calculs.
    Dernière question. Pour la courbe obtenue, on obtient une droite ce qui n’est pas normal. Non?
  • J'ai modifié mon message au-dessus. Voici mon dernier mot.127414
  • Merci infiniment!
  • Bonjour,
    finalement j'ai une dérnière question.
    Sans le 0.001 vous faite
    (plot(f,(0.479,2.5))+plot(f,(0,0.477))).show(ymin=-5, ymax=5)
    mais avec le 0.001 comment régle le plot? Je sais que les valeurs sont écrasées mais y - a- t -il un moyen?
    Aussi pour dessiner le point où le min local est atteint $(x_0,f(x_0))$.
    Merci d'avance
Connectez-vous ou Inscrivez-vous pour répondre.