Existe algum software de código aberto ou de fácil acesso que possa simplificar expressões algébricas como ?

17

Eu sempre calculo as coisas manualmente, mas agora meus companheiros estão ficando desagradáveis ​​e fazendo muitos exercícios repetitivos envolvendo apenas conectar coisas como a expressão acima. Estou particularmente interessado em software de código aberto, como Python ou R, para simplificar esses tipos de equações. Eu tentei usar Wolfram Alpha , mas não teve sucesso. Quais pacotes de software de código aberto são capazes de substituir a expressão na equação e simplificar o resultado? Especificamente, estou procurando um pacote de software que tenha algo como um comando.x 2 +2x+3x=2t1x2+2x+3simplify

Jack Poulson
fonte

Respostas:

28

Você pode procurar no SymPy , que é uma biblioteca Python com o comando simplificar desejado .

>>> 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
fonte
2
Eu sugeriria o Sage , mas parece que ainda não possui capacidades simbólicas, embora se pense que acabaria por incorporar uma capacidade simbólica, porque pretende se tornar uma alternativa de código aberto ao Maple e ao Mathematica.
Geoff Oxberry
11
Sage tem capacidades simbólicas (usei-as para fazer integrais simbólicas), mas não é especialmente claro como fazê-lo, a menos que você as procure. Se você quiser usar um como símbolo, precisará declará-lo antes, como em var('a'). Pelo menos isso era verdade quando eu estava usando sálvia pela última vez há 3 ou 4 anos. Em geral, o mathematica assume que você deseja um resultado simbólico e o sábio assume que você deseja um resultado numérico.
Dan
11
@hhh: A menos que eu esteja enganado, seu fragmento de código não corresponde à expressão que você deseja avaliar e simplificar.
Geoff Oxberry
@ GeoffOxberry: Tentei resolver esse problema, assim como um no LaTeX na pergunta original.
precisa saber é o seguinte
11
Meu entendimento é que o Sage realmente incorpora grande parte da base de código SymPy.
MRocklin
9

Sage pode fazer isso (você terá que rolar bastante para baixo na página para chegar à parte da simplificação).

Além disso, leia a introdução geral à matemática simbólica no Sage. Sua semântica e sintaxe são bem diferentes do Mathematica , que é o que a maioria das pessoas está familiarizada.

Aqui está um exemplo da documentação à qual vinculei você:

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

Para o seu caso, isso deve funcionar:

var(f,x,t)
f=x^2+2*x+3
f.subs(x=(sqrt(2)*t-1))
f.simplify()
Dan
fonte
Seu mecanismo de pesquisa de documentação precisa melhorar, então. Eu digitei "simplificar" e não obter essa página em tudo . Bom achado!
precisa saber é o seguinte
Eu apenas digitei "sage simplify" no google.
Dan
8

Você já tem várias respostas boas com pacotes de código aberto avançados de alta qualidade.

Gostaria de apontar para http://www.mathics.net/ (http://mathics.org/, se você quiser baixá-lo), que é um CAS de código aberto usando a sintaxe do Mathematica (que você pode estar familiarizado com um pouco se você estiver usando WolramAlpha). Não é tão completo quanto as outras sugestões recebidas. Mas ele pode executar as operações (muito simples) das quais você falou na sua pergunta.

O que você está falando na sua pergunta não é realmente simplificação, mas substituição e expansão (que, diferentemente da simplificação mais complexa, são muito fáceis de implementar operações disponíveis mesmo no CAS mais básico):

Em matemática, ficaria assim:

eq = x^2 + 2x + 3

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

Expand[%]

Caso você precise de uma função de simplificação, ela é chamada Simplify[]e também funcionaria no lugar do Expand[]exemplo acima.

Szabolcs
fonte
8

Como akid sugeriu, wxMaxima é uma ótima interface gráfica para o venerável lisp baseado Computer System álgebra chamado Maxima .

Usando seu exemplo, você obteria algo como:

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

ou você pode fazer isso diretamente:

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

O Maxima tem várias maneiras diferentes de simplificar, mas ratsimpé um bom primeiro passo.

Mark Booth
fonte
5

Acho que consegui fazer o Wolfram Alpha funcionar . Talvez eu esteja errado sobre o que você está procurando.

sans
fonte
1

Você pode fazer isso com o 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
fonte