2016-06-01 9 views
9

Ho un'espressione come: 1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2Come trovare tutti i termini di un'espressione in Sympy

cosa ho bisogno è una lista che contiene i termini di questa espressione.
cioè [1/(x+1), 4*x/(x-1), 3, -4*x**2 , 10*x**2]

aggiornamento: Non deve raccogliere termini simili. Pertanto la lista dovrebbe avere -4 * x ** 2 e 10 * x ** 2 separatamente e non 6 * x ** 2 dopo aver raccolto termini simili.

risposta

1

Sulla base della domanda e commenti, se è possibile ottenere l'espressione come una stringa, si può fare qualcosa di simile, se si vuole evitare la raccolta termine.

(sympify("1/(x+1)+4*x/(x-1)+3-4*x**2+10*x**2", evaluate=False)).args 

questo restituirà tutti i termini senza raccogliere termini simili.

1

In questo caso è molto semplice:

>>> expr = 1/(x+1)+4*x/(x-1)+3-4*x**2 
>>> expr.args 
⎛  1  2 4⋅x ⎞ 
⎜3, ─────, -4⋅x , ─────⎟ 
⎝ x + 1   x - 1⎠ 
+0

Grazie a @Bjoern ma se ci sono termini simili, args li raccoglie. (ad esempio 1/(x + 1) + 4 * x/(x-1) + 3-4 * x ** 2 + 10 * x ** 2). È possibile fermare questo? – harsh

+0

@FermiparadoxSO si è senza virgolette. Mi dispiace per la confusione. – harsh

+0

@harsh Offtopic: vuoi dire '1/(x + 1) + 4 * x/(x-1) + 3-4 * x ** 2 + 10 * x ** 2'? (il testo tra double * viene convertito in grassetto, a meno che non lo si inserisca nel formato di codice '') –

2

Il modo corretto per fare ciò è Add.make_args. Sono le stesse cose di expr.args dalla risposta di Bjoern, eccetto se l'espressione non è un Add (un singolo termine), ma dà ancora quel termine, invece di attraversare quell'espressione.

In [20]: expr = 1/(x+1)+4*x/(x-1)+3-4*x**2 

In [21]: print(Add.make_args(expr)) 
(3, 1/(x + 1), -4*x**2, 4*x/(x - 1)) 
+0

@ asmeurer, ma questo ha lo stesso problema di @Bjoern come aggiunto in un commento qui sotto. Raccoglie termini simili. – harsh

+0

@harsh l'elenco nella mia risposta è lo stesso della lista che hai indicato nella tua domanda (tranne che per il riordino). Se il riordino è un problema, temo che tu non abbia fortuna, poiché SymPy non tiene traccia dell'ordine con cui viene creata un'espressione. Se si tratta di un altro problema, modifica la domanda e chiarisci. – asmeurer

+0

Mi dispiace se non è stato chiaro. Volevo non raccogliere termini simili. Ho aggiornato la domanda. Scusa se ti ho confuso. Prendendolo come una corda ha funzionato. – harsh

Problemi correlati