2016-03-21 1 views
1

Ceci est une question très simple, mais étonnamment trouvé très peu en ligne ...Maple: spécifier la variable sur laquelle pour maximiser

Je veux trouver le minimiseur d'une fonction en érable, je ne suis pas sûr de savoir comment pour indiquer quelle est la variable d'intérêt? Prenons un cas très simple, je veux le minimiseur symbolique d'une expression quadratique en x, avec les paramètres a, b et c.

Sans spécifier quelque chose, il minimise toutes les variables, a, b, c et x.

f4 := a+b*x+c*x^2 
minimize(f4, location) 

J'ai essayé de spécifier la variable dans la fonction, ne fonctionne pas non plus:

f5 :=(x) ->a+b*x+c*x^2 
minimize(f5, location) 

Comment dois-je faire? Et, comment ferais-je si je voulais plus de deux variables, x et y?

fxy := a+b*x+c*x^2 + d*y^2 +e*y 

Répondre

2
f4 := a+b*x+c*x^2: 

extrema(f4, {}, x); 

          /  2\ 
           |4 a c - b | 
          < ---------- > 
           | 4 c | 
           \  /

fxy := a+b*x+c*x^2 + d*y^2 +e*y: 

extrema(fxy, {}, {x,y}); 

        /   2  2\ 
         |4 a c d - b d - c e | 
         < --------------------- > 
         |  4 c d  | 
         \     /

La nature des extrema dépendra des valeurs des paramètres. Pour votre premier exemple ci-dessus (quadratique en x), cela dépendra du signum de c. La commande extrema accepte un quatrième argument facultatif, tel qu'un nom non affecté (ou un nom cité à l'identique) auquel sont affectés les points de solution candidats (comme effet secondaire de son calcul). Par exemple,

restart; 

f4 := a+b*x+c*x^2: 

extrema(f4, {}, x, 'cand'); 

               2 
             4 a c - b 
            {----------} 
             4 c 

cand; 

              b 
            {{x = - ---}} 
              2 c 

fxy := a+b*x+c*x^2 + d*y^2 +e*y: 

extrema(fxy, {}, {x,y}, 'cand'); 

              2  2 
           4 a c d - b d - c e 
           {---------------------} 
             4 c d 

cand; 

             b   e 
           {{x = - ---, y = - ---}} 
             2 c  2 d 

Vous pouvez également configurer les dérivées partielles et les résoudre manuellement. Notez que pour ces deux exemples, il n'y a qu'un seul résultat (pour chaque) renvoyé par solve.

restart: 

f4 := a+b*x+c*x^2: 

solve({diff(f4,x)},{x}); 

              b 
            {x = - ---} 
              2 c 

normal(eval(f4,%)); 

               2 
             4 a c - b 
             ---------- 
             4 c 

fxy := a+b*x+c*x^2 + d*y^2 +e*y: 

solve({diff(fxy,x),diff(fxy,y)},{x,y}); 

             b   e 
           {x = - ---, y = - ---} 
             2 c  2 d 

normal(eval(fxy,%)); 

              2  2 
           4 a c d - b d - c e 
           --------------------- 
             4 c d 

Le code de la commande extrema peut être consulté, en exécutant la commande showstat(extrema). Vous pouvez voir comment cela représente le cas de solve renvoyant plusieurs résultats.

+0

Oh, merci! En fait, j'étais intéressé par l'obtention de l'argument max/maximizer lui-même, ce qui explique pourquoi j'ai utilisé le paramètre location. Comment ferais-je avec extrema()? Merci! – Matifou

+0

Cela est fait en utilisant le 4ème argument optionnel de la commande 'extrema'. J'ai ajouté des exemples pour cela. – acer

+0

excellent! Merci beaucoup!! – Matifou