Frage

Lassen

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

Ich möchte das Minimum von F für x> = 0 && y> = 0 && z> = 0 && x+y+z == 1 verwenden Mathematica.

PS: Ich weiß, wie man das Minimum mit Mathematikmethode bekommt:

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: Ich habe erwartet, dass der folgende Code funktionieren würde, aber nicht.

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

Wie Simon betont, funktioniert es tatsächlich ... die Laufzeit ist länger als ich erwartet hatte, und ich habe sie geschlossen, bevor Mahtematica mir das Ergebnis zeigt.

War es hilfreich?

Lösung

Ist das was du willst?

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}}

Beachten Sie, dass die Dokumentation heißt "Selbst wenn das gleiche Minimum an mehreren Punkten erreicht wird, wird nur einer zurückgegeben"Sie müssen also die Permutationssymmetrie des Problems selbst auferlegen.


PS Sie können dies in ein Lagrange -Multiplikatorproblem verwandeln

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]))}}}

und sehen Sie, dass der einzige stationäre Punkt das Maximum bei x = y = z = 1/3 ist. Somit muss das Minimum an der Grenze liegen. Sie können dann einen ähnlichen Code verwenden, aber auf die Grenze beschränkt, um schließlich das richtige Ergebnis zu finden.

Andere Tipps

Nur zum Spaß ist dies eine Handlung der von Simon angegebenen Lösung:

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

Sie sagen, Sie interessieren sich nicht für die "Mathematikmethode" (ich bin mir nicht sicher, was Sie im Sinn haben, wenn Sie das sagen, aber ich denke an Minimierungsmethoden mit Lagrange -Multiplikatoren). Wenn das richtig ist, warum bringen Sie Mathematica in die Diskussion ein? Was wird es Ihrer Meinung nach verwenden?

Ich muss annehmen, dass Sie numerische Computerlösungen meinen. Ich würde mit der linearen Programmierung und der Simplex -Methode beginnen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top