Este é um minicurso sobre resolução de problemas de cálculo diferencial e integral usando Python e a biblioteca de matemática simbólica Sympy.
Não é necessário ter qualquer experiência na linguagem de programação Python para seguir este curso. Caso queira ter uma noção de Python antes de fazer o curso, recomendamos escolher um dos cursos grátis disponível no site Python Brasil - Python para quem está começando.
Neste minicurso você vai aprender a usar o Python para:
Não é necessário instalar nenhum programa em seu computador para seguir este curso. O material do curso está disponível em formatos IPYNB
(Jupyter NoteBook) e em HTML
. Também, está disponível a seguinte ligação Binder:
Clicando na ligação acima, você tem acesso a um Jupyter NoteBook online com o material do minicurso.
Nesta primeira parte do minicurso Cálculo com Python, você aprenderá a:
from sympy import *
# seleciona a melhor saída disponível
init_printing()
Na sequência, vamos ver como podemos usar o Sympy para lidarmos com funções reais de uma variável real, por exemplo: $y = f(x)$. Neste contexto, os símbolos $x$ e $y$ denotam as variáveis independente e dependente, respectivamente. O símbolo $x$ pode ser definido com a função var
:
var('x')
Exercício:
Defina $y$ como variável simbólica.
# escreva sua resolução aqui!
Vamos ver como definir uma função $y = f(x)$ para ser utilizada mais tarde. Ao longo minicurso, vamos considerar a função:
$f(x) = (x^3 - 3x + 2)e^{-x/4} - 1$.
No Python os operadores aritméticos básicos são:
+
adição
-
subtração
*
multiplicão
/
divisão
**
potenciação
Também, muitas funções elementares já estão definidas por padrão no Sympy. Veja a lista aqui!
Para definirmos $f$, podemos usar a função Lambda
como segue:
f = Lambda(x, (x**3 - 3*x + 2)*exp(-x/4) - 1)
f
Com isso, para computar $f(1)$ digitamos:
f(1)
Note que a saída aparece na linha abaixo da entrada $f(1)$. Isto é, $f(1) = -1$. Podemos, inclusive utilizar argumentos simbólicos, como:
f(x-2)
Aqui, a saída significa que $f(x-2) = (-3x + (x-2)^3 + 8)e^{-\frac{x}{4} + \frac{1}{2}} - 1$, o que pode ser imediatamente verificado.
Dada $g(x) = 2 - \sqrt{x^2 - 1}$, encontre $g(1)$, $g(0)$ e $g(2t)$.
Solução:
g = Lambda(x, 2 - sqrt(x**2 - 1))
g
g(1)
g(0)
Note que o sympy assume o domínio e a imagem da função como sendo um subconjunto dos números complexos. Além disso, antes de calcularmos $g(2t)$ precisamos definir $t$ como uma variável simbólica. Para que $t$ seja tratado como uma variável real, usamos o seguinte comando:
var('t', real=True)
Finalmente, computamos $g(2t)$ com:
g(2*t)
$\blacktriangleleft$
Dada $h(x) = \left|\sqrt{x} - 1\right| - 2\text{sen}(x)$, encontre $h(\pi)$, e $h(2u)$.
#digite a resposta aqui!
Para plotar o gráfico de uma função $f$ podemos usar o comando plot
. Por exemplo, para a função $f$ definida anteriormente, temos:
%matplotlib inline
plot(f(x))
<sympy.plotting.plot.Plot at 0x7fb822e03048>
Observação 1: A "linha mágica" %matplotlib inline
faz com que o gráfico apareça na mesma janela do ambiente. Sem esta linha, uma janela gráfica externa será aberta, quando disponível.
Observação 2: O comando plot(f(x))
tenta advinhar uma caixa gráfica adequada. Podemos alterar a caixa, informando o intervalo dos pontos de abscissa que gostaríamos de ver. Por exemplo:
plot(f(x), (x, -2, 2))
<sympy.plotting.plot.Plot at 0x7fb8199345f8>
Faça o esboço do gráfico de $\displaystyle g(x) = 2\text{tg}\left(x+\frac{\pi}{3}\right)$ restrita ao intervalo $\displaystyle \left(-\frac{5\pi}{6}, \frac{\pi}{6}\right)$.
#digite sua resolução aqui!
solve(x**2-1, x)
resolve $x^2 -1 = 0$. Entretanto a função solve
não resolve diretamente a equação $f(x) = 0$ definida anteriormente. Veja o que ocorre:
solve(f(x), x)
--------------------------------------------------------------------------- NotImplementedError Traceback (most recent call last) <ipython-input-17-c06002e10874> in <module>() ----> 1 solve(f(x), x) /usr/lib/python3/dist-packages/sympy/solvers/solvers.py in solve(f, *symbols, **flags) 1063 ########################################################################### 1064 if bare_f: -> 1065 solution = _solve(f[0], *symbols, **flags) 1066 else: 1067 solution = _solve_system(f, symbols, **flags) /usr/lib/python3/dist-packages/sympy/solvers/solvers.py in _solve(f, *symbols, **flags) 1632 1633 if result is False: -> 1634 raise NotImplementedError('\n'.join([msg, not_impl_msg % f])) 1635 1636 if flags.get('simplify', True): NotImplementedError: multiple generators [x, exp(x/4)] No algorithms are implemented to solve equation (x**3 - 3*x + 2)*exp(-x/4) - 1
nsolve(f(x), x, -2)
nsolve(f(x), x, 0)
nsolve(f(x), x, 2)
Na verdade, esta função $f(x)$ tem, ainda, um zero $x \approx 45,\!9162$. Discutiremos isso mais detalhadamente na próxima parte deste minicurso, quando estudarmos a computação de limites com o SymPy.
Determine os zeros de $g(x) = \text{sen}\left(x-\frac{\pi}{3}\right) + \frac{1}{2}$.
#digite a resolução aqui!
[1] Python Software Fundation (US): www.python.org
[2] Sympy - Python Library for Symbolic Mathematics: www.sympy.org
Criado: Out/2015 Última modificação: Maio/2020