代码之家  ›  专栏  ›  技术社区  ›  Eastsun

如何求Sqrt[3x+1]+Sqrt[3y+1]+Sqrt[3z+1]的最小值?

  •  1
  • Eastsun  · 技术社区  · 15 年前

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

    我想用mathematica得到x>=0&y>=0&z>=0&x+y+z==1的最小f。

    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 回复  |  直到 12 年前
        1
  •  4
  •   Simon    15 年前

    这就是你想要的吗?

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

    注意文件上说 即使在多个点上达到相同的最小值,也只返回一个 “所以你必须把问题的排列对称性强加于自己。


    聚苯乙烯 你可以把它变成拉格朗日乘子问题

    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
  •  2
  •   gdelfino    15 年前

    为了好玩,这是西蒙给出的解决方案的一个情节:

    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

        3
  •  1
  •   duffymo    15 年前

    你说你对“数学方法”不感兴趣(我不知道你在想什么,但这让我想到了拉格朗日乘子最小化方法)。如果这是正确的,你为什么要把Mathematica带到讨论中来?你觉得它会用什么?

    我得假设你是指数值,计算机解。我先从线性规划和单纯形法开始。