SymPy

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.[1]

SymPy
Sympy logo.

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. Symy é 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[2] e suas ferramentas incluem:[1]

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    5x    61x    277x      10
1 + ── + ──── + ───── + ────── + Ox  
    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  + 5a b + 10a b  + 10a b  + 5ab  + 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)
 2x
 ─── + 2
  y
>>> diff(f,y)
    2
   x    1
 - ── - 
    2   y
   y
>>> diff(diff(f,x),y)
 -2x
 ────
   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)) = -3xf(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  + 2x + 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    5x    61x    277x      10
1 + ── + ──── + ───── + ────── + Ox  
    2     24     720     8064
>>> e = 1/sin(x)
>>> pprint(e)
  1
──────
sin(x)
>>> pprint(e.series(x, 0, 4))
           3
1   x   7x      4
 +  + ──── + Ox 
x   6   360

Veja também

Referências

  1. «SymPy homepage». Consultado em 13 de outubro de 2014
  2. «Sympy project statistics on Open HUB». Consultado em 13 de outubro de 2014

Ligações externas

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.