Esiste un software open source o di facile accesso in grado di semplificare le espressioni algebriche come


17

Calcolo sempre le cose a mano, ma ora i miei compagni stanno diventando cattivi e stanno facendo molti esercizi ripetitivi che coinvolgono semplicemente il collegamento delle cose come nell'espressione sopra. Sono particolarmente interessato a software open source come Python o R per semplificare questo tipo di equazioni. Ho provato a usare Wolfram Alpha , ma non ho avuto successo. Quali pacchetti software open source sono in grado di sostituire l'espressione nell'equazione e semplificare il risultato? In particolare, sto cercando un pacchetto software che abbia qualcosa come un comando.x 2 +2x+3X=2t-1X2+2X+3simplify

Risposte:


28

Potresti voler esaminare SymPy , che è una libreria Python con il comando di semplificazione desiderato .

>>> from sympy.abc import t
>>> import sympy
>>> x = t*2**(1/2) - 1
>>> x**2 + 2*x + 3
2*t + (t - 1)**2 + 1
>>> sympy.simplify(x**2 + 2*x + 3)
t**2 + 2

2
Stavo per suggerire Sage , ma sembra che non abbia ancora capacità simboliche, anche se si potrebbe pensare che alla fine incorporerebbe una capacità simbolica perché mira a diventare un'alternativa open source a Maple e Mathematica.
Geoff Oxberry,

1
Sage ha capacità simboliche (l'ho usato per fare integrali simbolici), ma non è particolarmente chiaro come farlo se non lo cerchi. Se si desidera utilizzare un come simbolo, è necessario dichiararlo in anticipo, come in var('a'). Almeno questo era vero quando ho usato l'ultima volta la salvia 3 o 4 anni fa. In generale, la matematica presuppone che si desideri un risultato simbolico e la salvia presuppone che si desideri un risultato numerico.
Dan

1
@hhh: a meno che non mi sbagli, il tuo frammento di codice non corrisponde all'espressione che desideri valutare e semplificare.
Geoff Oxberry,

@GeoffOxberry: ho provato a risolvere quel problema, così come uno su LaTeX nella domanda originale.
Jack Poulson,

1
La mia comprensione è che Sage in realtà incorpora gran parte della base di codice SymPy.
MRocklin,

9

Sage può farlo (dovrai scorrere abbastanza in basso nella pagina per arrivare alla parte della semplificazione).

Inoltre, assicurati di leggere l'introduzione generale alla matematica simbolica in Sage. La semantica e la sintassi sono abbastanza diverse da Mathematica , che è ciò che la maggior parte delle persone conosce.

Ecco un esempio dalla documentazione a cui ti ho collegato:

sage: var('x,y,z,a,b,c,d,e,f')
(x, y, z, a, b, c, d, e, f)
sage: t = a^2 + b^2 + (x+y)^3
# substitute with keyword arguments (works only with symbols)
sage: t.subs(a=c)
(x + y)^3 + b^2 + c^2

Nel tuo caso, questo dovrebbe funzionare:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()

Il loro motore di ricerca della documentazione deve quindi migliorare. Ho digitato "semplificare" e non ho avuto la pagina a tutti . Bella scoperta!
Geoff Oxberry,

Ho appena digitato "Sage Simpy" in Google.
Dan

8

Hai già ricevuto molte buone risposte con pacchetti open source avanzati di alta qualità.

Vorrei fare riferimento a http://www.mathics.net/ (http://mathics.org/ se vuoi scaricarlo), che è un CAS open source che utilizza la sintassi Mathematica (che potresti avere familiarità con un po 'se sei abituato a WolramAlpha). Non è così completo come uno degli altri suggerimenti che hai ricevuto. Ma può fare le operazioni (molto semplici) di cui hai parlato nella tua domanda.

Quello di cui stai parlando nella tua domanda non è proprio la semplificazione, ma la sostituzione e l' espansione (che, a differenza della semplificazione più complessa, sono molto facili da implementare operazioni disponibili anche nel CAS più elementare):

In matematica sarebbe simile a questo:

eq = x^2 + 2x + 3

eq /. x -> Sqrt[2] t - 1

Expand[%]

Nel caso in cui sia necessaria una funzione di semplificazione, viene chiamata Simplify[]e funzionerebbe anche al posto Expand[]dell'esempio sopra.


8

Come suggerito akid , wxMaxima è un ottimo frontend grafico per il venerabile sistema di computer algebra basato su lisp chiamato Maxima .

Usando il tuo esempio, otterrai qualcosa del tipo:

eq1: x=t*2**(1/2)-1;
X=2t-1
eq2: x**2+2*x+3;
X2+2X+3
eq3: subst(eq1, eq2);
(2t-1)2+2(2t-1)+3
ratsimp(eq3);
2t2+2

o potresti semplicemente farlo direttamente:

ratsimp(subst(x=t*2**(1/2)-1, x**2+2*x+3));
2t2+2

Maxima ha diversi modi di semplificare, ma ratsimpè un buon primo passo.



5

Penso di essere riuscito a far funzionare Wolfram Alpha . Forse mi sbaglio su quello che stai cercando.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.