Existe-t-il un logiciel open source ou facile d'accès qui peut simplifier les expressions algébriques comme

17

Je calcule toujours les choses à la main, mais maintenant mes camarades deviennent méchants et font beaucoup d'exercices répétitifs impliquant simplement de brancher des choses comme l'expression ci-dessus. Je suis particulièrement intéressé par les logiciels open source tels que Python ou R pour simplifier ce genre d'équations. J'ai essayé d'utiliser Wolfram Alpha , mais j'ai échoué. Quels progiciels open source sont capables de remplacer l'expression dans l'équationx 2 +2x+3et simplifier le résultat? Plus précisément, je recherche un progiciel qui a quelque chose comme unecommande.x=2t1x2+2x+3simplify

Jack Poulson
la source

Réponses:

28

Vous voudrez peut-être examiner SymPy , qui est une bibliothèque Python avec la commande de simplification souhaitée .

>>> 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
Jack Poulson
la source
2
J'allais suggérer Sage , mais il ne semble pas encore avoir de capacités symboliques, même si on pourrait penser qu'il intégrerait éventuellement une capacité symbolique car il vise à devenir une alternative open-source à Maple et Mathematica.
Geoff Oxberry
1
Sage a des capacités symboliques (je l'ai utilisé pour faire des intégrales symboliques), mais il n'est pas particulièrement clair comment le faire à moins de le chercher. Si vous souhaitez utiliser un comme symbole, vous devez le déclarer au préalable, comme dans var('a'). Au moins, c'était vrai quand j'ai utilisé la sauge pour la dernière fois il y a 3 ou 4 ans. En général, mathématique suppose que vous voulez un résultat symbolique et sage suppose que vous voulez un résultat numérique.
Dan
1
@hhh: Sauf erreur, votre fragment de code ne correspond pas à l'expression que vous souhaitez évaluer et simplifier.
Geoff Oxberry
@GeoffOxberry: J'ai essayé de résoudre ce problème, ainsi que celui du LaTeX dans la question d'origine.
Jack Poulson
1
Ma compréhension est que Sage incorpore en fait une grande partie de la base de code SymPy.
MRocklin
9

Sage peut le faire (vous devrez faire défiler assez loin la page pour accéder à la partie simplification).

Assurez-vous également de lire l'introduction générale aux mathématiques symboliques dans Sage. Sa sémantique et sa syntaxe sont très différentes de Mathematica , ce que la plupart des gens connaissent.

Voici un exemple de la documentation à laquelle je vous ai lié:

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

Pour votre cas, cela devrait fonctionner:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()
Dan
la source
Leur moteur de recherche de documentation doit alors s'améliorer. Je tapais dans « Simplify » et n'a pas obtenu cette page du tout . Belle trouvaille!
Geoff Oxberry
Je viens de taper "sage simplify" dans google.
Dan
8

Vous avez déjà obtenu plusieurs bonnes réponses avec des packages open source avancés de haute qualité.

Je voudrais pointer vers http://www.mathics.net/ (http://mathics.org/ si vous voulez le télécharger), qui est un CAS open source utilisant la syntaxe Mathematica (que vous connaissez peut-être) avec un peu si vous êtes habitué à WolramAlpha). Ce n'est pas aussi complet que les autres suggestions que vous avez reçues. Mais il peut effectuer les opérations (très simples) dont vous avez parlé dans votre question.

Ce dont vous parlez dans votre question n'est pas vraiment de la simplification, mais de la substitution et de l' expansion (qui, contrairement à une simplification plus complexe, sont très faciles à implémenter des opérations disponibles même dans le CAS le plus basique):

En mathématiques, cela ressemblerait à ceci:

eq = x^2 + 2x + 3

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

Expand[%]

Dans le cas où vous avez besoin d'une fonction de simplification, elle s'appelle Simplify[]et fonctionnerait également à la place de Expand[]dans l'exemple ci-dessus.

Szabolcs
la source
8

Comme l'a suggéré Akid , wxMaxima est une excellente interface graphique pour le vénérable système d'algèbre informatique basé sur lisp appelé Maxima .

En utilisant votre exemple, vous obtiendriez quelque chose comme:

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

ou vous pouvez le faire directement:

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

Maxima a plusieurs façons de simplifier, mais ratsimpc'est une bonne première étape.

Mark Booth
la source
5

Je pense que j'ai réussi à faire travailler Wolfram Alpha . Peut-être que je me trompe sur ce que vous cherchez.

sans
la source
1

Vous pouvez le faire avec Axiom (ou OpenAxiom ou Fricas ):

(1) -> eval( x^2 + 2*x + 3, x=sqrt(2)*t-1)
(1) -> 
          2
   (1)  2t  + 2
                                            Type: Polynomial(AlgebraicNumber)
(2) ->  
Thomas Baruchel
la source