如果我有两个符号表达式并且代数可以判断哪一个是最大的,那么我怎样才能让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.可以做到吗?
答案 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)]