Mathematica中最多两个符号表达式

时间:2014-12-02 12:11:10

标签: 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 && 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< B,因为A是两个正数之间的差,而B是总和。我想Mathematica告诉我,Max总是B.可以做到吗?

2 个答案:

答案 0 :(得分:1)

有机会检查..

 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 < B]返回False,没有任何假设。即使使用复杂的表达式,这种表达也不可能成立。

我想如果你想实现类似Max的东西,你可以这样做:

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

答案 1 :(得分:0)

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];

- &GT; s1 / z1 + s2 / z2 + Sqrt [(s1 / z1 + s2 / z2)^ 2 +(4(-s1 s2 + z1 ^ 2 z2 ^ 2))/(z1 z2)]