2010-10-29 8 views
5

Я использую Mathematica 7 в интерфейсе ноутбука, и я хочу изменить неравенство, чтобы получить определенную переменную с одной стороны. Напр.FullSimply Неравенства, а затем их перестановка в 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. 

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

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

Я хочу, чтобы это было displaye d в форме \[delta]< *something* Спасибо!

+1

Это действительный Mathematica вопрос. Пожалуйста, не голосуйте, чтобы закрыть –

+0

Saw your edit после публикации. Пожалуйста, напишите свое фактическое выражение –

ответ

2

Прежде всего, получение Mathematica для вывода чего-то точно так, как вам бы хотелось, это что-то вроде черного искусства и требует большого терпения. Тем не менее, если применить Reduce к исходному выражению, согласно Belisarius, вы получите

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]]& 
+0

+1 для «В этот момент требуется терпение и много дополнительной обработки». Действительно правда. –

+0

спасибо!очень полезно – skr

+0

@belisarius, Это было легко; Я могу тратить все утро на переформатирование выражения, чтобы оно выглядело так, как я хочу. Мой личный фаворит - заменить 'I'' q' ('Complex [a_, b _]:> a + q b'), чтобы я мог использовать' Collect' на нем. Иногда это единственный способ получить разумный результат. – rcollyer

1
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] 

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

+0

Редактирование: вот фактическое выражение: {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 * Благодаря! – skr

+0

@ user491410 Знаете ли вы знаки L, e, Delta, Tau, Omega? –

0

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

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] в знаменателе выраж. Все это игнорирует другие условия на значения L, e, m и \ [Omega], которые изменят результат, и различные версии Mathematica могут изменить форму результата из Simplify [Reduce []], что аннулирует все это ,

0

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

я получаю что-то bearably компактный с

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

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

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