FullSimply Inequalities e depois reorganizando-as no Mathematica 7
-
27-09-2019 - |
Pergunta
Estou usando o Mathematica 7 na interface do notebook e quero reorganizar uma inequação para obter uma determinada variável de um lado.Por exemplo.
FullSimplify[x^3+L+r>3x^3+2r]
Dá
L > r + 2 x^3
No entanto, eu quero:
r < L-2x^3
Existe alguma maneira de instruir o FullSimplify a ordenar as variáveis de uma maneira específica?Também estou usando o Mathematica para apresentação, então a maneira como organizo as variáveis é importante para mim.
Obrigado
RS
Editar:Eu tentei Reduzir, embora funcione para este exemplo, não funciona para a expressão real que tenho, recebo um erro dizendo:
This system cannot be solved with the methods available to Reduce.
Editar:aqui está a expressão real:
{L - (m^2 ((-2 + e)^2 \[Delta] + (5 +
2 e (-7 + 4 e)) \[Tau]) \[Omega])/(36 (2 - 3 e + e^2)^2)} > {0}
Eu quero que isso seja exibido na forma de \[delta]< *something*
Obrigado!
Solução
Primeiro de tudo, fazer com que o Mathematica produza algo exatamente como você gostaria é uma espécie de arte negra e requer muita paciência.Dito isto, se você se inscrever Reduce
à sua expressão original, conforme Belisário, você conseguiria
In[1]:=Reduce[x^3 + L + r > 3 x^3 + 2 r, r, Reals]
Out[1]:= r < L - 2 x^3
No entanto, como você apontou, esta não é a expressão completa e Reduce
produz o que só pode ser descrito como uma resposta pouco útil quando aplicado a ela.É neste ponto que é necessária paciência e muito processamento extra.eu começaria com
In[2]:=Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify
Embora isso não forneça uma resposta clara, é melhor do que antes e revela mais da estrutura da sua solução.(eu não usaria FullSimplify
como isso mistura Delta
com os outros termos.) Neste ponto, precisamos saber mais sobre os próprios termos e o resultado de In[2]
não é tão útil quanto desejamos.
Eu re-expandiria isso com LogicalExpand
o que lhe dá doze termos que são significativamente mais simples do que o que Reduce
sozinho dá.(Você notará que apenas os últimos seis termos realmente envolvem Delta
, então eu verificaria se as condições das variáveis realmente correspondem a elas.) Selecionando apenas os últimos seis termos,
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)
O terceiro termo é tautológico, mas Simplify
nem FullSimplify
não consigo removê-lo.E, de qualquer forma, só estamos interessados no médio prazo.Se Omega > 0
sua expressão pode então ser extraída via %[[2,1,2]]
.
Juntando tudo isso em uma expressão:
In[4]:=Simplify[LogicalExpand[Reduce[<expression>, Delta, Reals]]][[-6;;]] //
Simplify // #[[2,1,2]]&
Out[4]:= Delta < something
Depois de escrever isso, percebi que existe uma maneira muito mais simples de abordar isso.Eu refazeria a linha 2 acima, da seguinte maneira:
In[5]:= Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify //
Cases[#, ___ && Delta < _ && ___, Infinity]&
Out[5]:= {Omega > 0 && Delta < something}
Ou, desde que você realmente saiba disso m != 0
e Omega > 0
você pode fazer
In[6]:= Reduce[ <expr> && m!=0 && Omega > 0, Delta, Reals ] // LogicalExpand //
Simplify // #[[2]]&
Outras dicas
Reduce[x^3 + L + r > 3 x^3 + 2 r, r, Reals]
Vai fazer.
Como não uso o Mathematica para edição ou apresentação, talvez alguém possa me dar algum conselho extra.
Editar
com base no seu comentário, você pode tentar:
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]
Onde corrigi alguns erros de sintaxe.Mas você descobrirá que a expressão resultante é bastante desagradável.Para simplificar ainda mais, você precisa conhecer os intervalos válidos para seus vars.Por favor, poste essa informação se você tiver.AH!
Inspecione a saída de
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]]
para ver isso
r[[2,1,1,1]] gives \\[Delta]>expr,
mas
r[[2, 1, 2, 2]] gives \\[Delta]< expr,
porque o sinal de \[Omega] no denominador de expr.Tudo isso ignora as outras condições nos valores de L, e, m e \[Omega] que irão alterar o resultado e diferentes versões do Mathematica podem alterar a forma do resultado de Simplify[Reduce[]] o que invalidará tudo isso .
Parte da dificuldade em reduzir as expressões retornadas por Reduce[] e LogicalExpand[] é que a expressão fornecida envolve divisão por zero quando e=1 ou =2.
Eu consigo algo suportável compacto com
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))
onde não fiz nenhum esforço para substituir nomes de símbolos por símbolos.
(Por que presumir[...]?Porque tenho preguiça de lembrar de colocar as mesmas suposições em cada etapa de simplificação.)