Question

Laisser

f[x_,y_,z_] := Sqrt[3x+1]+Sqrt[3y+1]+Sqrt[3z+1]

Je veux obtenir le minimum de f pour x> = 0 && y> = 0 && z> = 0 && x + y + z == 1 Utilisation de Mathematica.

PS: Je sais comment obtenir la méthode minimale par mathématiques:

Since 0<=x<=1,0<=y<=1,0<=z<=1, we have
0<=x^2<=x,0<=y^2<=y,0<=z^2<=z.
Hence,
3a+1 >= a^2 + 2a + 1 = (a+1)^2, where a in {x,y,z}.
Consequently,
f[x,y,z] >= x+1+y+1+z+1 = 4,
Where the equality holds if and only if (x==0&&y==0||z==1)||...

PS2: Je m'attendais à ce que le code suivant fonctionnerait, mais ce n'est pas le cas.

Minimize[{f[x,y,z],x>=0&&y>=0&&z>=0&&x+y+z==1},{x,y,z}]

En fait, comme le souligne Simon, cela fonctionne ... le temps d'exécution est plus long que ce à quoi je m'attendais et je l'ai fermé avant que Mahtematica me montre le résultat.

Était-ce utile?

La solution

c'est ce que tu veux?

In[1]:= f[x_,y_,z_]:=Sqrt[3x+1]+Sqrt[3y+1]+Sqrt[3z+1]
In[2]:= Minimize[{f[x,y,z],x>=0,y>=0,z>=0,x+y+z==1},{x,y,z}]
Out[2]= {4,{x->1,y->0,z->0}}

Notez que la documentation dit "Même si le même minimum est atteint à plusieurs points, un seul est renvoyé"Vous devrez donc imposer vous-même la symétrie de permutation du problème.


PS Vous pouvez transformer cela en un problème de multiplicateur Lagrange

In[3]:= Thread[D[f[x,y,z] - \[Lambda](x+y+z-1), {{x,y,z,\[Lambda]}}]==0];
        Reduce[Join[%,{x>=0,y>=0,z>=0}],{x,y,z,\[Lambda]},Reals]
        {f[x,y,z],D[f[x, y, z], {{x, y, z}, 2}]}/.ToRules[%]
Out[4]= x==1/3&&y==1/3&&z==1/3&&\[Lambda]==3/(2 Sqrt[2])
Out[5]= {3 Sqrt[2],{{-(9/(8 Sqrt[2])),0,0},{0,-(9/(8 Sqrt[2])),0},{0,0,-(9/(8 Sqrt[2]))}}}

et voir que le seul point stationnaire est le maximum à x = y = z = 1/3. Ainsi, le minimum doit rester sur la frontière. Vous pouvez ensuite utiliser du code similaire mais limité à la limite pour finalement trouver le résultat correct.

Autres conseils

Juste pour le plaisir, c'est un complot de la solution donnée par Simon:

f[x_, y_, z_] := Sqrt[3 x + 1] + Sqrt[3 y + 1] + Sqrt[3 z + 1]
g1 = ContourPlot3D[f[x, y, z] == 4, {x, 0, 1}, {y, 0, 1}, {z, 0, 1}, AxesLabel -> {x,y,z}, MeshFunctions -> {#3 &}, ContourStyle -> {Blue, Opacity[0.5]}];
g2 = ContourPlot3D[ x + y + z == 1, {x, 0, 1}, {y, 0, 1}, {z, 0, 1}, AxesLabel -> {x,y,z}, MeshFunctions -> {#2 &}, ContourStyle -> {Green, Opacity[0.5]}];
Show[g1, g2, Graphics3D[{PointSize[0.05], Red, Point[{1, 0, 0}]}], ViewPoint -> {1.1`, -2.4`, 1.7`}]

alt text

Vous dites que vous n'êtes pas intéressé par la "méthode mathématique" (je ne sais pas ce que vous avez en tête lorsque vous dites cela, mais cela me fait penser aux méthodes de minimisation avec les multiplicateurs de Lagrange). Si c'est exact, pourquoi apportez-vous Mathematica dans la discussion? Que pensez-vous que cela utilisera?

Je devrai supposer que vous voulez dire des solutions informatiques numériques. Je commencerai par la programmation linéaire et la méthode simplex.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top