Wolfram mathematica Mathematica中两个符号表达式的最大值

Wolfram mathematica Mathematica中两个符号表达式的最大值,wolfram-mathematica,max,Wolfram Mathematica,Max,如果我有两个符号表达式,代数可以判断哪一个是最大的,我怎么能让Mathematica找到它呢?例如: A = s1/z1 + s2/z2 + Sqrt[(s1/z1 + s2/z2)^2 + 4 (z1^2 z2^2 - s1 s2)/(z1 z2)]; B = s1/z1 + s2/z2 - Sqrt[(s1/z1 + s2/z2)^2 + 4 (z1^2 z2^2 - s1 s2)/(z1 z2)]; Assuming[s1 > 0 && s2 > 0 &

如果我有两个符号表达式,代数可以判断哪一个是最大的,我怎么能让Mathematica找到它呢?例如:

A = s1/z1 + s2/z2 + Sqrt[(s1/z1 + s2/z2)^2 + 4 (z1^2 z2^2 - s1 s2)/(z1 z2)];
B = s1/z1 + s2/z2 - Sqrt[(s1/z1 + s2/z2)^2 + 4 (z1^2 z2^2 - s1 s2)/(z1 z2)];
Assuming[s1 > 0 && s2 > 0 && z1 > 0 && z2 > 0, Max[A, B]]
这给

Max[s1/z1 + s2/z2 - Sqrt[(s1/z1 + s2/z2)^2 + (4 (-s1 s2 + z1^2 z2^2))/(z1 z2)], 
 s1/z1 + s2/z2 + Sqrt[(s1/z1 + s2/z2)^2 + (4 (-s1 s2 + z1^2 z2^2))/(z1 z2)]]
这没有多大用处。
然而,我们可以看到它总是A有机会检查一下

 Assuming[ {z1 > 0, z2 > 0, s1 > 0, s2 > 0} , Simplify[Reduce[A > B]]]
->真的

注意:通过删除
Simplify
并查看
Reduce
生成的条件表达式,您可以看到如何稍微放松假设:

 Assuming[ {z1 > 0, z2 > 0, Element[{s1, s2}, Reals]} , Simplify[Reduce[A > B]]]
->真的

注意
Reduce[A
返回
False
,无任何假设。即使使用复杂的表达式,该表达式也不可能为真

我想如果您想实现类似于
Max
的功能,您可以这样做:

 Assuming[ {z1 > 0, z2 > 0, s1 > 0, s2 > 0} ,
    Which[ Simplify[Reduce[A > B]] , A ,
           Simplify[Reduce[B > A ]] , B , 
              True , Indeterminate ]]

agentp的答案也可以进行迭代,因此可以将其概括为两个以上的表达式:

v = {A, B};
max = B;
Assuming[{z1 > 0, z2 > 0, s1 > 0, s2 > 0},
     For[i = 1, i <= 2, i++,
      If[Simplify[Reduce[v[[i]] > max]], max = v[[i]]]
      ]
]
Print[max];
v={A,B};
max=B;
假设[{z1>0,z2>0,s1>0,s2>0},
对于[i=1,i max]],max=v[[i]]
]
]
打印[最大值];

->s1/z1+s2/z2+Sqrt[(s1/z1+s2/z2)^2+(4(-s1 s2+z1^2 z2^2))/(z1 z2)]

尝试
简化[Reduce[A>B]]
并进行假设。假设是真的吗?好的,我怎么告诉Mathematica,一个实的非负数的sqrt是一个(实的)非负数?(Sqrt的论点可以很容易地证明始终是非负的)如果你的假设足够的话,它应该会出来。但是,请注意,只有某些功能利用/尊重假设。我怀疑
Max
没有
Reduce
应该给出一个条件表达式,
Simplify
可能会使用您的假设进行清理。(我没有测试…)。