SymPy é uma biblioteca Python para computação simbólica. Ela fornece ferramentas de álgebra computacional tanto como uma aplicação independente como, também, uma biblioteca para outras aplicações. Ainda, a biblioteca está disponível de forma on-line nos sítios de internet:SymPy Live e SymPy Gamma. Sympy é fácil de ser instalada e analisada, pois é escrita em Python e não depende de bibliotecas adicionais.
SymPy inclui ferramentas que variam do cálculo de aritmética simbólica básica, algebra, matemática discreta e física quântica. É capaz de formatar o resultado das computações em código LaTeX. SymPy é um software livre sob licença BSD. Os desenvolvedores líderes são Ondřej Čertík e Aaron Meurer.
Visão Geral A biblioteca Sympy está dividida em um núcleo com vários módulos opcionais. Atualmente, o núcleo do Sympy tem aproximadamente 260,000 linhas de código e suas ferramentas incluem:
Núcleo de ferramentas Aritmética básica: *, /, +, -, ** Simplificação Expansão Funções: trigonométricas, hiperbólicas, exponenciais, radicais, logarítmicas, valor absoluto, harmônicas esféricas, fatoriais e função gama, função zeta, polinomiais, hipergeométricas, funções especiais, entre outras.
Substituição Números inteiros, racionais e de ponto flutuante de precisão arbitrária Símbolos não-comutativos Reconhecimento de padrões
Polinômios Aritmética básica: divisão, gcd, etc. Fatorização Bases de Gröbner Frações parciais Resultantes
Cálculo Limites Diferenciação Integração Séries de Taylor (Laurent)
Solução de equações Polinomiais Sistemas de equações Equações algébricas Equações diferenciais Equações de diferenças
Matemática discreta Coeficientes binomiais Somas Produtos Teoria dos números: gerador de números primos, teste de números primos, fatorização inteira, etc. Expressões lógicas
Matrizes Aritmética básica Autovalores e autovetores Determinantes Inversão Solução de sistemas lineares
Geometria Pontos, linhas, raios, segmentos, elípces, círculos, polígonos, etc. Interseções Tangência Similaridade
Gráficos Nota: a geração de gráficos requer o módulo externo Pyglet.
Modelos de coordenadas Entidades geométricas de gráficos 2D e 3D Interface iterativa Cores
Física Unidades Mecânica Ótica gaussiana Álgebra de Pauli
Estatística Distribuições normais Distribuições uniformes Probabilidade
Saída de dados Pretty printing: ASCII/Unicode pretty printing, LaTeX Geração de código: C, FORTRAN, Python
Projetos relacionados SageMath: uma alternativa de código aberto ao Mathematica, Maple, Matlab, e Magma (SymPy está incluído no SageMath) mpmath: uma biblioteca Python de aritmética de ponto flutuante com precisão arbitrária (incluído no SymPy) sympycore: sistema algébrico computacional escrito em Python symbide: GUI para SymPy no PyGTK
Dependências opcionais SymPy não requer dependências além do Python, mas existência várias dependências opcionais que podem melhorar suas ferramentas:
gmpy: Se o gmpy está instalado, o módulo polinomial do Sympy irá usá-lo para melhorar sua performance.
Exemplos
Pretty Printing Sympy permite a saída de dados formatada em um formato bastante compreensível. Para tanto, usa-se a função pprint. Alternativamente, o método init_printing() ativa o pretty printing, de forma que pprint não precisa ser chamado. Pretty printing usa de símbolos unicode quando estes estão disponíveis no ambient, caso contrário ele utilizará o padrão de caracteres ASCII. >>> from sympy import pprint, init_printing, Symbol, sin, cos, exp, sqrt, series, Integral, Function >>> >>> x = Symbol("x") >>> y = Symbol("y") >>> f = Function('f') >>> # pprint usará padrão unicode se disponível >>> pprint( x**exp(x) ) ⎛ x⎞ ⎝ℯ ⎠ x >>> # Uma saída sem unicode >>> pprint(Integral(f(x), x), use_unicode=False) / | | f(x) dx | / >>> # Compare com a mesma expressão, mas agora com unicode >>> pprint(Integral(f(x), x), use_unicode=True) ⌠ ⎮ f(x) dx ⌡ >>> # Alternativamente, pode-se chamar init_printing() que ativa pprint por padrão >>> init_printing() >>> sqrt(sqrt(exp(x))) ____ 4 ╱ x ╲╱ ℯ >>> (1/cos(x)).series(x, 0, 10) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞ 1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064
Expansão >>> from sympy import init_printing, Symbol, expand >>> init_printing() >>> >>> a = Symbol('a') >>> b = Symbol('b') >>> e = (a + b)**5 >>> e 5 (a + b) >>> e.expand() 5 4 3 2 2 3 4 5 a + 5⋅a ⋅b + 10⋅a ⋅b + 10⋅a ⋅b + 5⋅a⋅b + b
Precisão arbitrária >>> from sympy import Rational, pprint >>> >>> e = Rational(2)**50 / Rational(10)**50 >>> pprint(e) 1/88817841970012523233890533447265625
Diferenciação >>> from sympy import init_printing, symbols, ln, diff >>> init_printing() >>> x,y = symbols('x y') >>> f = x**2 / y + 2 * x - ln(y) >>> diff(f,x) 2⋅x ─── + 2 y >>> diff(f,y) 2 x 1 - ── - ─ 2 y y >>> diff(diff(f,x),y) -2⋅x ──── 2 y
Gráficos >>> from sympy import symbols, plot3d, cos >>> x,y = symbols('x y') >>> plot3d(cos(x*3)*cos(y*5)-y, (x, -1, 1), (y, -1, 1)) <sympy.plotting.plot.Plot object at 0x3b6d0d0>
Limites >>> from sympy import init_printing, Symbol, limit, sqrt, oo >>> init_printing() >>> >>> x = Symbol('x') >>> limit(sqrt(x**2 - 5*x + 6) - x, x, oo) -5/2 >>> limit(x*(sqrt(x**2 + 1) - x), x, oo) 1/2 >>> limit(1/x**2, x, 0) ∞ >>> limit(((x - 1)/(x + 1))**x, x, oo) -2 ℯ
Equações diferenciais >>> from sympy import init_printing, Symbol, Function, Eq, dsolve, sin, diff >>> init_printing() >>> >>> x = Symbol("x") >>> f = Function("f") >>> >>> eq = Eq(f(x).diff(x), f(x)) >>> eq d ──(f(x)) = f(x) dx >>> >>> dsolve(eq, f(x)) x f(x) = C₁⋅ℯ
>>> >>> eq = Eq(x**2*f(x).diff(x), -3*x*f(x) + sin(x)/x) >>> eq 2 d sin(x) x ⋅──(f(x)) = -3⋅x⋅f(x) + ────── dx x >>> >>> dsolve(eq, f(x)) C₁ - cos(x) f(x) = ─────────── 3 x
Integração >>> from sympy import init_printing, integrate, Symbol, exp, cos, erf >>> init_printing() >>> x = Symbol('x') >>> # Função polinomial >>> f = x**2 + x + 1 >>> f 2 x + x + 1 >>> integrate(f,x) 3 2 x x ── + ── + x 3 2 >>> # Função racional >>> f = x/(x**2+2*x+1) >>> f x ──────────── 2 x + 2⋅x + 1
>>> integrate(f, x) 1 log(x + 1) + ───── x + 1 >>> # Função polinomial-exponencial >>> f = x**2 * exp(x) * cos(x) >>> f 2 x x ⋅ℯ ⋅cos(x) >>> integrate(f, x) 2 x 2 x x x x ⋅ℯ ⋅sin(x) x ⋅ℯ ⋅cos(x) x ℯ ⋅sin(x) ℯ ⋅cos(x) ──────────── + ──────────── - x⋅ℯ ⋅sin(x) + ───────── - ───────── 2 2 2 2 >>> # Uma integral não elementar >>> f = exp(-x**2) * erf(x) >>> f 2 -x ℯ ⋅erf(x) >>> integrate(f, x)
___ 2 ╲╱ π ⋅erf (x) ───────────── 4
Séries >>> from sympy import Symbol, cos, sin, pprint >>> x = Symbol('x') >>> e = 1/cos(x) >>> pprint(e) 1 ────── cos(x) >>> pprint(e.series(x, 0, 10)) 2 4 6 8 x 5⋅x 61⋅x 277⋅x ⎛ 10⎞ 1 + ── + ──── + ───── + ────── + O⎝x ⎠ 2 24 720 8064 >>> e = 1/sin(x) >>> pprint(e) 1 ────── sin(x) >>> pprint(e.series(x, 0, 4)) 3 1 x 7⋅x ⎛ 4⎞ ─ + ─ + ──── + O⎝x ⎠ x 6 360
Ver também Maxima
Referências
Ligações externas Página do projeto SymPy Planeta SymPy Repositório do código no Github Fórum Suporte e desenvolvimento
Categoria:Bibliotecas Python