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. 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 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
Veja 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