Неравенства FullSimply и их перестановка в Mathematica 7

Я использую Mathematica 7 в интерфейсе ноутбука и хочу изменить неравенство, чтобы получить определенную переменную с одной стороны. Например.

FullSimplify[x^3+L+r>3x^3+2r]

Дает

L > r + 2 x^3

Однако я хочу:

r < L-2x^3

Можем ли мы в любом случае указать FullSimplify упорядочивать переменные определенным образом? Я также использую Mathematica для презентаций, поэтому для меня важно, как я упорядочиваю переменные.

Спасибо

SR

Редактировать: я попробовал уменьшить, хотя это работает для этого примера, это не работает для фактического выражения, которое у меня есть, я получаю сообщение об ошибке:

 This system cannot be solved with the methods available to Reduce.

Изменить: вот фактическое выражение:

{L - (m^2 ((-2 + e)^2 \[Delta] + (5 + 
     2 e (-7 + 4 e)) \[Tau]) \[Omega])/(36 (2 - 3 e + e^2)^2)} > {0}

Я хочу, чтобы это отображалось в виде \[delta]< *something* Спасибо!


person skr    schedule 29.10.2010    source источник
comment
Это правильный вопрос Mathematica. Пожалуйста, не голосуйте за закрытие   -  person Dr. belisarius    schedule 29.10.2010
comment
Увидел ваше редактирование после публикации. Пожалуйста, опубликуйте свое фактическое выражение   -  person Dr. belisarius    schedule 29.10.2010


Ответы (4)


Во-первых, заставить 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
comment
+1 за Именно в этот момент требуется терпение и много дополнительной обработки. Действительно правда. - person Dr. belisarius; 30.10.2010
comment
@belisarius, это было легко; Я могу потратить целое утро на переформатирование выражения, чтобы оно выглядело так, как я хочу. Мой личный фаворит — заменить I на q (Complex[a_,b_]:> a + q b), чтобы я мог использовать на нем Collect. Иногда это единственный способ получить разумный результат. - person rcollyer; 31.10.2010
comment
Такого никогда не пробовал! Но много часов, потерянных в ближнем бою с Exp[I phi], TrigExpand, Collect, Expand, Simplify… Думаю, всем знакомо это чувство. - person Dr. belisarius; 31.10.2010
comment
@belisarius, причина изменения заключается в том, что, хотя Mathematica понимает, как работать с комплексными числами, она часто группирует вещи таким образом, что с ними трудно работать. И, комбинируя вместе действительные и мнимые числа, может быть трудно извлечь что-либо осмысленное. Итак, мы заменяем на что-то, что у него нет дополнительных представлений о том, как им манипулировать, и, вуаля, мы восстанавливаем некоторую степень контроля. - person rcollyer; 31.10.2010

Reduce[x^3 + L + r > 3 x^3 + 2 r, r, Reals]

Сделаю.

Поскольку я не использую Mathematica для редактирования или презентации, возможно, кто-то еще может дать дополнительный совет.

Изменить

на основе вашего комментария вы можете попробовать:

Reduce[{L - (m^2 ((-2 + e)^2 Delta + (5 + 
        2 e (-7 + 4 e)) Tau) Omega)/(36 (2 - 3 e + e^2)^2) > 0}, Delta, Reals]  

Где я исправил некоторые синтаксические ошибки. Но вы обнаружите, что получившееся выражение довольно неприятно. Чтобы еще больше упростить его, вам нужно знать допустимые диапазоны для ваших переменных. Пожалуйста, опубликуйте эту информацию, если она у вас есть. ХТХ!

person Dr. belisarius    schedule 29.10.2010
comment
Изменить: вот фактическое выражение: {L - (m ^ 2 ((-2 + e) ​​^ 2 [Дельта] + (5 + 2 e (-7 + 4 e)) [Тау]) [Омега])/ (36 (2 - 3 e + e^2)^2)} › {0} Я хочу, чтобы это отображалось в форме [дельта]‹ что-то Спасибо! - person skr; 29.10.2010
comment
@ user491410 Знаете ли вы знаки L, e, Delta, Tau, Omega? - person Dr. belisarius; 29.10.2010

Проверьте вывод

r=Simplify[Reduce[L-(m^2((-2+e)^2\\[Delta]+(5+2e(-7+4e))\\[Tau])\\[Omega])/(36(2-3e+e^2)^2)>0,\\[Delta],Reals]]  

увидеть это

r[[2,1,1,1]] gives \\[Delta]>expr, 

но

r[[2, 1, 2, 2]] gives \\[Delta]< expr, 

потому что знак \[Omega] в знаменателе expr. Все это игнорирует другие условия для значений L, e, m и \[Omega], которые изменят результат, и разные версии Mathematica могут изменить форму результата от Simplify[Reduce[]], что сделает все это недействительным. .

person user413961    schedule 29.10.2010

Частично сложность сокращения выражений, возвращаемых функциями Reduce[] и LogicalExpand[], заключается в том, что предоставленное выражение включает деление на ноль, когда e=1 или =2.

Я получаю что-то сносно компактное с

Assuming[{
  (L | m | e | Tau | Omega | Delta) \[Element] Reals
  },
 FullSimplify[
  LogicalExpand[
   Reduce[{L - (m^2 ((-2 + e)^2 Delta + (5 + 
               2 e (-7 + 4 e)) Tau) Omega)/(36 (2 - 3 e + e^2)^2) > 
      0}, Delta, Reals]
   ]
  ]
 ]
Out[]:= (L > 0 && (1 < e < 2 || e < 1 || e > 2) && (m == 0 || Omega == 0)) || 
    (m != 0 && (
      (Omega > 0 && 
       Delta < (36 (-1 + e)^2 L)/(m^2 Omega) + ((-5 + 2 (7 - 4 e) e) Tau)/(-2 + e)^2) || 
      (Delta > (36 (-1 + e)^2 L)/(m^2 Omega) + ((-5 + 2 (7 - 4 e) e) Tau)/(-2 + e)^2 && 
       Omega < 0)) && 
    (e > 2 || e < 1 || 1 < e < 2))

где я не прилагал никаких усилий, чтобы заменить имена символов символами.

(Почему предположение[...]? Потому что я слишком ленив, чтобы не забывать вставлять одни и те же предположения в каждый шаг упрощения.)

person Eric Towers    schedule 04.11.2010