2

私はこのような多くの条件を取得します:

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 | b | c | d | f | i) [要素] 実数 && ((j < 0 && (<<1>>)) || (j == 0 && (<< 1>>)) || (j > 0 && (<<1>>)))

true または false に評価するには、どのように入力する必要があるのだろうか。


この場合、手動で true にする必要があります。

  • -1+aに書き換える-(1-a)

    a (bc + (1 - a) d (c + fg)) h > -(1 - a) i (b + aj ) g

  • すべて左側に:

    a (bc + (1 - a) d (c + fg)) h+ (1 - a) i (b + aj ) g > 0

  • (1-a)>0 であり、他のすべての変数が >0 であるため、左側はすべてが >0 である変数の積の合計です。したがって、これは保持する必要があります。Mathematica でこれを確認できないのはなぜですか?

4

1 に答える 1

2

部分的なヘルプ:

この仮定

{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 が $Assumptions を使用していないことです。そのため、reduce 後に Simplify[] する必要があります。次のやや単純化された例を考えてみましょう。

$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) *)

提供された仮定を使用して、どれが False であることを自明に示す必要があります。実際、これは機能します..

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*)
于 2013-06-10T14:56:26.923 に答える