我得到了很多这样的条件:
a (b c - (-1 + a) d (c + f g)) h > (-1 + a) i (b + a j ) g
我有以下假设:在 Mathematica 中,所有变量都是实数且大于 0,a 也小于 1:
$Assumptions = {a, b, c, d, f, g, h, i, j} \[Element]
Reals && {a, b, c, d, f, g, h, i, j} > 0 && 0 < a < 1
尽管有一些简单的情况,Reduce 仍会产生以下输出:
A very large output was generated. Here is a sample of it: (a | b | c | d | f | i) [Element] Reals && ((j < 0 && (<<1>>)) || (j == 0 && (<<1>>)) || (j > 0 && (<<1>>)))
我想知道我需要如何输入它来评估 true 或 false。
手动在这种情况下它必须是真的:
将
-1+a
重写为-(1-a)
a (b c + (1 - a) d (c + f g)) h > -(1 - a) i (b + a j ) g
全部移至左侧:
a (b c + (1 - a) d (c + f g)) h+ (1 - a) i (b + a j ) g > 0
由于 (1-a)>0 且所有其他变量 >0,左侧是所有 >0 的变量的乘积之和。所以这必须成立。为什么我无法让 Mathematica 确认这一点?
最佳答案
部分帮助:
这个假设
{a, b, c, d, f, g, h, i, j} > 0
并不单独适用于每个元素,请尝试以下操作:
$Assumptions = Flatten[ { # > 0 & /@ {a, b,c,d,e,f,g,h,i,j} , 0 < a < 1 } ]
同时指定 > 0 意味着实数,因此您不需要明确的假设。
编辑,你的问题的第2部分是Reduce甚至不使用$假设,所以你需要在reduce之后简化[]。但是即使这样你仍然没有得到答案。考虑这个稍微简化的例子:
$Assumptions = Flatten[{# > 0 & /@ {a, b, c, f, g}, 0 < a < 1}]
res = Reduce[ (-1 + a) (f + g) >= b c , {a, b, c, f, g}, Reals]
(* huge output*)
Simplify[res ]
(* b c <= (-1 + a) (f + g) *)
使用所提供的假设,这应该被简单地证明是错误的。事实上这有效..
Simplify[Reduce[ (-1 + a) >= b c/(f + g) , {a, b, c, d, e, f, g}, Reals] ]
(* False *)
建议您通过 https://mathematica.stackexchange.com/ 询问,或者某些版主应该迁移此..
编辑3——我明白了..
$Assumptions = And @@ Flatten[{# > 0 & /@ {a, b, c, d, e, f, g, h, i, j},
0 < a < 1}] ;
Simplify[Reduce[ a (b c - (-1 + a) d (c + f g)) h > (-1 + a) i (b + a j) g
&& $Assumptions, {a, b, c, d,e,f, g, h, i, j}, Reals]]
(*True*)
关于wolfram-mathematica - 我该如何修改这个不等式以便 Mathematica 能够确认它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17026628/