SymPy
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 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
[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]- Pretty printing: ASCII/Unicode pretty printing, LaTeX
- Geração de código: C, FORTRAN, Python
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 5⋅x 61⋅x 277⋅x ⎛ 10⎞
1 + ── + ──── + ───── + ────── + O⎝x ⎠
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 + 5⋅a ⋅b + 10⋅a ⋅b + 10⋅a ⋅b + 5⋅a⋅b + 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)
2⋅x
─── + 2
y
>>> diff(f,y)
2
x 1
- ── - ─
2 y
y
>>> diff(diff(f,x),y)
-2⋅x
────
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)) = -3⋅x⋅f(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 + 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
[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 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
Veja também
[editar | editar código-fonte]Referências
[editar | editar código-fonte]- ↑ a b «SymPy homepage». Consultado em 13 de outubro de 2014
- ↑ «Sympy project statistics on Open HUB». Consultado em 13 de outubro de 2014