2010-10-29 10 views
5

Sto usando Mathematica 7 nell'interfaccia per notebook e voglio riorganizzare una disuguaglianza in modo da ottenere una certa variabile su un lato. Per es.FullSimply Disuguaglianze e poi riorganizzarle in Mathematica 7

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

L > r + 2 x^3 

Tuttavia, voglio:

r < L-2x^3 

c'è comunque siamo in grado di istruire FullSimplify per ordinare le variabili in modo particolare? Sto usando Mathematica anche per la presentazione, quindi il modo in cui sistemo le variabili è importante per me.

Grazie

SR

Edit: Ho provato Ridurre, mentre che funziona per questo esempio, non funziona per l'espressione reale che ho, ottengo un errore che dice,

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

Edit: qui è l'espressione reale:

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

io voglio che questo sia displaye d sotto forma di \[delta]< *something* Grazie!

+1

Questa è una domanda valida Mathematica. Si prega di non votare per chiudere –

+0

sega la modifica dopo la pubblicazione. Per favore pubblica la tua espressione attuale –

risposta

2

Prima di tutto, ottenere Mathematica per produrre qualcosa esattamente come si vorrebbe è qualcosa di un'arte nera, e richiede molta pazienza. Detto questo, se si applica Reduce alla vostra espressione originale, come da Belisarius, si otterrebbe

In[1]:=Reduce[x^3 + L + r > 3 x^3 + 2 r, r, Reals] 
Out[1]:= r < L - 2 x^3 

Tuttavia, come lei ha sottolineato, questo non è l'espressione piena e Reduce produce ciò che può solo essere descritto come una risposta meno che utile quando applicato ad esso. È a questo punto che è richiesta pazienza e molta elaborazione extra. Mi piacerebbe iniziare con

In[2]:=Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify 

Anche se questo non ti dà una risposta pulita, è meglio di prima e rivela più della struttura della soluzione. (Non userei FullSimplify come quello mescola Delta con gli altri termini.) A questo punto, abbiamo bisogno di sapere di più sui termini stessi, e l'output da In[2] non è abbastanza utile come vogliamo.

Vorrei espanderlo nuovamente con LogicalExpand che offre dodici termini notevolmente più semplici rispetto a ciò che solo Reduce fornisce. (Noterete che solo le ultime sei termini in realtà coinvolgono Delta, quindi mi piacerebbe verificare che le condizioni variabili effettivamente corrispondano a quelle.) Selezionando solo quegli ultimi sei termini,

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) 

Il terzo termine è tautologico, ma Simplify o FullSimplify non sembrano rimuoverlo. E comunque siamo interessati solo a medio termine. Se Omega > 0 l'espressione può essere estratta tramite %[[2,1,2]].

Mettendo tutto insieme in una sola espressione:

In[4]:=Simplify[LogicalExpand[Reduce[<expression>, Delta, Reals]]][[-6;;]] // 
     Simplify // #[[2,1,2]]& 
Out[4]:= Delta < something 

Dopo aver scritto che fuori, mi sono reso conto che c'è un modo molto più semplice per avvicinarsi a questo. Mi piacerebbe rifare la linea 2, al di sopra, come segue:

In[5]:= Reduce[ <full expression>, Delta, Reals] // LogicalExpand // Simplify // 
     Cases[#, ___ && Delta < _ && ___, Infinity]& 
Out[5]:= {Omega > 0 && Delta < something} 

Oppure, a condizione che davvero sa che m != 0 e Omega > 0 si può fare

In[6]:= Reduce[ <expr> && m!=0 && Omega > 0, Delta, Reals ] // LogicalExpand // 
     Simplify // #[[2]]& 
+0

+1 per "È a questo punto che è richiesta molta pazienza e molta elaborazione extra". Proprio vero. –

+0

grazie!veramente utile – skr

+0

@belisarius, questo è stato facile; Posso sprecare un'intera mattinata riformattando un'espressione per farlo sembrare come voglio io. Il mio preferito è quello di sostituire 'I' con' q' ('Complesso [a_, b _]:> a + q b'), così da poter usare' Collect' su di esso. A volte è l'unico modo per ottenere un risultato ragionevole. – rcollyer

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

Fare.

Dato che non uso Mathematica per la modifica o la presentazione, forse qualcun altro potrebbe venire con qualche consiglio in più.

Modifica

, sulla base di commento, potete provare:

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] 

Dove ho corretto alcuni errori di sintassi. Ma scoprirai che l'espressione risultante è piuttosto spiacevole. Per semplificare ulteriormente è necessario conoscere gli intervalli validi per i propri vars. Per favore pubblica queste informazioni se ce l'hai. HTH!

+0

Modifica: ecco l'espressione attuale: {L - (m^2 ((-2 + e) ​​^ 2 \ [Delta] + (5 + 2 e (-7 + 4 e)) \ [Tau]) \ [Omega])/(36 (2 - 3 e + e^2)^2)}> {0} Voglio che questo venga visualizzato sotto forma di \ [delta] <* qualcosa * Grazie! – skr

+0

@ user491410 Conosci i segni di L, e, Delta, Tau, Omega? –

0

Controllare l'uscita del

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

per vedere che

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

ma

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

perché il segno di \ [Omega] nel denominatore di expr. Tutto questo ignora le altre condizioni sui valori di L, e, m e \ [Omega] che cambieranno il risultato e diverse versioni di Mathematica potrebbero cambiare la forma del risultato di Simplify [Riduci []] che annullerà tutto questo .

0

Parte della difficoltà nel ridurre le espressioni restituite da Riduci [] e LogicalExpand [] è che l'espressione fornita implica la divisione per zero quando e = 1 o = 2.

ho qualcosa bearably compatto con

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

dove ho speso alcuno sforzo per sostituire i nomi dei simboli con i simboli.

(Perché Supponendo [...]? Perché io sono troppo pigro per ricordare per ottenere gli stessi presupposti inceppati in ogni fase di semplificazione.)