Как получить минимум Sqrt [3x + 1] + Sqrt [3y + 1] + Sqrt [3z + 1]? - PullRequest
1 голос
/ 25 ноября 2010

Пусть

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

Я хочу получить минимум f для x> = 0 && y> = 0 && z> = 0 && x + y + z == 1 с использованием mathematica.

PS:Я знаю, как получить минимум математическим методом:

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: я ожидал, что следующий код будет работать, но это не так.

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

На самом деле, как Саймонобратите внимание, это работает ... Время выполнения больше, чем я ожидал, и я закрыл его, прежде чем Mahtematica покажет мне результат.

Ответы [ 3 ]

4 голосов
/ 25 ноября 2010

Это то, что вы хотите?

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

Обратите внимание, что в документации сказано: " Даже если один и тот же минимум достигается в нескольких точках, возвращается только один ", поэтому вам придется самостоятельно устанавливать симметрию перестановки задачи.


PS Вы можете превратить это в проблему множителя Лагранжа

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

и видим, что единственной стационарной точкой является максимум при x = y = z = 1/3. Таким образом, минимум должен лежать на границе. Затем вы можете использовать подобный код, но ограниченный границей, чтобы в конечном итоге найти правильный результат.

2 голосов
/ 25 ноября 2010

Просто для удовольствия, это сюжет решения, данного Симоном:

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

1 голос
/ 25 ноября 2010

Вы говорите, что вас не интересует "математический метод" (я не уверен, что вы имеете в виду, когда говорите это, но это заставляет меня задуматься о методах минимизации с множителями Лагранжа).Если это правильно, почему вы привели Mathematica в дискуссию?Как вы думаете, что он будет использовать?

Я должен предположить, что вы имеете в виду числовые компьютерные решения.Я бы начал с линейного программирования и симплекс-метода.

...