Во-первых, заставить Mathematica выводить что-то именно так, как вам хотелось бы, — это что-то вроде черной магии и требует большого терпения. Тем не менее, если вы примените Reduce
к исходному выражению, как указано в Велисарий, вы получите
In[1]:=Reduce[x^3 + L + r > 3 x^3 + 2 r, r, Reals]
Out[1]:= r < L - 2 x^3
Однако, как вы указали, это не полное выражение, и Reduce
дает то, что можно описать только как менее чем полезный ответ применительно к нему. Именно на этом этапе требуется терпение и много дополнительной обработки. я бы начал с
In[2]:=Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify
Хотя это не дает вам четкого ответа, это лучше, чем раньше, и раскрывает больше структуры вашего решения. (Я бы не стал использовать FullSimplify
, так как это смешивает Delta
с другими терминами.) На этом этапе нам нужно больше узнать о самих терминах, а вывод In[2]
не так полезен, как нам хотелось бы.
Я бы расширил это с помощью LogicalExpand
, что дает вам двенадцать терминов, которые значительно проще, чем то, что дает только Reduce
. (Вы заметите, что только последние шесть терминов на самом деле включают Delta
, поэтому я бы проверил, действительно ли условия переменных соответствуют им.) Выбрав только эти последние шесть терминов,
In[3]:=%2[[-6;;]] // Simplify
Out[3]:= m != 0
&& ((Omega > 0 && Delta < something) || (Omega > 0 && Delta < something else)
&& (1 < e < 2 || e < 1 || e > 2)
Третий термин тавтологичен, но ни Simplify
, ни FullSimplify
не могут его устранить. И в любом случае нас действительно интересует только среднесрочная перспектива. Если Omega > 0
, ваше выражение может быть извлечено через %[[2,1,2]]
.
Объединяем все это в одно выражение:
In[4]:=Simplify[LogicalExpand[Reduce[<expression>, Delta, Reals]]][[-6;;]] //
Simplify // #[[2,1,2]]&
Out[4]:= Delta < something
Написав это, я понял, что есть гораздо более простой способ приблизиться к этому. Я бы переделал строку 2 выше следующим образом:
In[5]:= Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify //
Cases[#, ___ && Delta < _ && ___, Infinity]&
Out[5]:= {Omega > 0 && Delta < something}
Или, если вы действительно знаете, что m != 0
и Omega > 0
вы можете сделать
In[6]:= Reduce[ <expr> && m!=0 && Omega > 0, Delta, Reals ] // LogicalExpand //
Simplify // #[[2]]&
person
rcollyer
schedule
29.10.2010