SymPy

Origem: Wikipédia, a enciclopédia livre.
Ir para: navegação, pesquisa
SymPy
Sympy logo.

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 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[editar | editar código-fonte]

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[editar | editar código-fonte]

  • 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[editar | editar código-fonte]

  • Aritmética básica: divisão, gcd, etc.
  • Fatorização
  • Bases de Gröbner
  • Frações parciais
  • Resultantes

Cálculo[editar | editar código-fonte]

  • Limites
  • Diferenciação
  • Integração
  • Séries de Taylor (Laurent)

Solução de equações[editar | editar código-fonte]

  • Polinomiais
  • Sistemas de equações
  • Equações algébricas
  • Equações diferenciais
  • Equações de diferenças

Matemática discreta[editar | editar código-fonte]

  • 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[editar | editar código-fonte]

  • Aritmética básica
  • Autovalores e autovetores
  • Determinantes
  • Inversão
  • Solução de sistemas lineares

Geometria[editar | editar código-fonte]

  • Pontos, linhas, raios, segmentos, elípces, círculos, polígonos, etc.
  • Interseções
  • Tangência
  • Similaridade

Gráficos[editar | editar código-fonte]

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[editar | editar código-fonte]

  • Unidades
  • Mecânica
  • Ótica gaussiana
  • Álgebra de Pauli

Estatística[editar | editar código-fonte]

  • Distribuições normais
  • Distribuições uniformes
  • Probabilidade

Saída de dados[editar | editar código-fonte]

Projetos relacionados[editar | editar código-fonte]

  • 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[editar | editar código-fonte]

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[editar | editar código-fonte]

Pretty Printing[editar | editar código-fonte]

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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> from sympy import Rational, pprint
>>>
>>> e = Rational(2)**50 / Rational(10)**50
>>> pprint(e)
1/88817841970012523233890533447265625

Diferenciação[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

>>> 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[editar | editar código-fonte]

Referências[editar | editar código-fonte]

  1. a b «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[editar | editar código-fonte]