2. Aplicações em Cálculo Diferencial e Integral

De modo geral, o principal objetivo do curso é garantir que seus alunos estejam proeficientes no uso de SymPy no Cálculo. Na minha opinião, esse é o capítulo mais importante do curso. Dê seu máximo para absorver o conteúdo aqui apresentado.

Antes de comerçarmos, certifique-se que fez as devidas importações e atribuições:

from sympy import *
x, y, z = symbols('x y z')
init_printing(use_unicode=True, use_latex='mathjax')

2.1. Intervalos

Nós sabemos que o Cálculo é, genericamente, o estudo das mudanças. E nós costumamos definir intervalos para trabalhar com nossas funções e expressões. É bem simples de criá-los e utilizá-los no SymPy.

Para criar um intervalo, criamos um objeto a partir da classe Interval e/ou um método seu para definir se está aberto em algum dos lados. Veja os exemplos:

# Intervalo Fechado
Interval(0,10)
\[\displaystyle \left[0, 10\right]\]
# Intervalo Aberto
Interval.open(-10, 20)
\[\displaystyle \left(-10, 20\right)\]
# Intervalo Aberto em um dos lados
Interval.Ropen(10,30) # R - Direita
\[\displaystyle \left[10, 30\right)\]
Interval.Lopen(10,30) # L - Direita
\[\displaystyle \left(10, 30\right]\]
Interval(0,oo) # oo representa o infinito em sympy. Note que onde oo estiver será aberto.
\[\displaystyle \left[0, \infty\right)\]

2.2. Análises de Domínio/Intervalo

Existem diversas funções embutidas no SymPy para avaliar o comportamento das funções/expressões ao longo de seu domínio ou de um intervalo específico. Normalmente elas retornarão um booleano.

Verificar se é crescente ou decrescente.

## x² em seu domínio não é crescente
is_increasing(x**2)
False
## x² em (0, oo) é crescente
is_increasing(x**2, Interval.open(0, oo))
True
## O contrário vale para decreasing
is_decreasing(x**2, Interval.open(-oo, 0))
True

Podemos verificar também se ela é estritamente crescente ou decrescente, ou seja, se ela é injetiva.

## x³ é crescente em todo seu domínio. (d/dx = 3x² >= 0)
is_increasing(x**3)
True
## x³ não é estritamente crescente em seu domínio (3*0² = 0)
is_strictly_increasing(x**3)
## 1/(e^x) é estritamente decrescente em seu domínio
is_strictly_decreasing(1/(exp(x)))
True

Podemos também verificar se ela é monótona com is_monotonic(). Para finalizar, podemos verificar se há pontos (e quais são) com singularidades. Ou seja, que requerem certa atenção. Normalmente, são pontos que não têm limite.

singularities(1/x,x)
\[\displaystyle \left\{0\right\}\]

2.3. Limites

Assim como veremos posteriormente nas derivadas e nas integrais, há duas formas de criar e calcular limites no SymPy. A primeria forma é através da classe Limit, que criará um limite e não calculará seu valor. Ou seja, utilize ela para armazenar a expressão do limite. Caso queira somente calcular o limite. Utilizamos a função limit().

Limit(sin(x)/x, x, 0, '+') ## sin(x)/x, x -> 0+
\[\displaystyle \lim_{x \to 0^+}\left(\frac{\sin{\left(x \right)}}{x}\right)\]
Limit(1/x, x, 0, '-') ## sin(x)/x, x -> 0-
\[\displaystyle \lim_{x \to 0^-} \frac{1}{x}\]
limit(sin(x)/x, x, 0, '+')
\[\displaystyle 1\]
limit(1/x, x, 0) # '+' por padrão
\[\displaystyle \infty\]
limit(1/x, x, 0, '-')
\[\displaystyle -\infty\]
limit(1/x, x, 0, '+-') # Dois lados
\[\displaystyle \tilde{\infty}\]
my_sin = Limit(sin(x)/x, x, 0, '+')
my_sin.doit() # Método doit() calcula uma expressão.
\[\displaystyle 1\]

2.4. Derivadas

Assim com os limites, podemos criar a derivada (sem calculá-la) através da classe Derivative(). E calcular diretamente através da diff().

Derivative(exp(2*x**3),x)
\[\displaystyle \frac{d}{d x} e^{2 x^{3}}\]
diff(sin(x**2),x)
\[\displaystyle 2 x \cos{\left(x^{2} \right)}\]
diff(sin(x**2),x, x) ## Calcular a segunda derivada
\[\displaystyle 2 \left(- 2 x^{2} \sin{\left(x^{2} \right)} + \cos{\left(x^{2} \right)}\right)\]
diff(sin(x**2),x, x, x) ## Calcular a terceira derivada
\[\displaystyle - 4 x \left(2 x^{2} \cos{\left(x^{2} \right)} + 3 \sin{\left(x^{2} \right)}\right)\]
diff(sin(x**2),x, 3) ## Calcular a terceira derivada de outra forma
\[\displaystyle - 4 x \left(2 x^{2} \cos{\left(x^{2} \right)} + 3 \sin{\left(x^{2} \right)}\right)\]
diff(sin(x**2),x, 10) ## Calcular a décima derivada
\[\displaystyle 32 \left(- 32 x^{10} \sin{\left(x^{2} \right)} + 720 x^{8} \cos{\left(x^{2} \right)} + 5040 x^{6} \sin{\left(x^{2} \right)} - 12600 x^{4} \cos{\left(x^{2} \right)} - 9450 x^{2} \sin{\left(x^{2} \right)} + 945 \cos{\left(x^{2} \right)}\right)\]
my_deriv = Derivative(exp(2*x**3),x)
my_deriv.doit()
\[\displaystyle 6 x^{2} e^{2 x^{3}}\]
## Podemos, com o método diff()
expr = exp(2*x**3)
expr.diff(x)
\[\displaystyle 6 x^{2} e^{2 x^{3}}\]
expr.diff(x,3) # Terceira derivada
\[\displaystyle 12 \left(18 x^{6} + 18 x^{3} + 1\right) e^{2 x^{3}}\]

2.5. Integrais

Assim como os Limites e as Derivadas que vimos acima, podemos criar uma Integral através da classe Integral() caso queiramos ter somente a expressão, e caso queiramos o resultado de uma Integral, basta utilizar a função integrate().

O Sympy não acresce a constante de integração nas Integrais Indefinidas, então é importante se lembrar delaa quando for resolver algum exercício.

Integral(1/x, x)
\[\displaystyle \int \frac{1}{x}\, dx\]
Integral(1/x, (x, 1, 10)) # Note que passamos (simbolo, inf, sup)
\[\displaystyle \int\limits_{1}^{10} \frac{1}{x}\, dx\]
integrate(1/x, (x,1,10))
\[\displaystyle \log{\left(10 \right)}\]
my_integral = Integral(1/x + 1/y, (x, 1, 10), (y, 1, 10)) # Integral dupla, duas variáveis.
my_integral
\[\displaystyle \int\limits_{1}^{10}\int\limits_{1}^{10} \left(\frac{1}{y} + \frac{1}{x}\right)\, dx\, dy\]
my_integral.doit()
\[\displaystyle 18 \log{\left(10 \right)}\]
Integral(exp(x**2 - 10), x,x) # Integral dupla indefinida, mesma variável
\[\displaystyle \iint e^{x^{2} - 10}\, dx\, dx\]

2.6. Outras funções

Séries

Você pode utilizar o método series() em uma expressão para fazer sua expansão em série.

asin(x).series(x,0, 10) # (x, x_0, n)
\[\displaystyle x + \frac{x^{3}}{6} + \frac{3 x^{5}}{40} + \frac{5 x^{7}}{112} + \frac{35 x^{9}}{1152} + O\left(x^{10}\right)\]

Equações Diferenciais

Ao criar uma função simbólica, você pode utilizar derivadas e a função dsolve() para encontrar a solução de uma expressão e ou equação diferencial. Nesse caso, o SymPy insere as constantes quando necessário.

f = Function('f')
my_deq = Eq(Derivative(f(x),x,2),f(x))
my_deq
\[\displaystyle \frac{d^{2}}{d x^{2}} f{\left(x \right)} = f{\left(x \right)}\]
dsolve(my_deq)
\[\displaystyle f{\left(x \right)} = C_{1} e^{- x} + C_{2} e^{x}\]

2.7. Exercícios

Como nos últimos capítulos, resolva os seguintes exercícios com o que aprendeu ao longo do curso.

  1. Para cada uma das funções abaixo, encontre:

a) O domínio da função;

b) As assíntotas horizontais e verticais, caso existam;

c) Sua derivada, os intervalos de crescimento e decrescimento de f,os pontos de máximo e mínimo, caso existam;

d) Os intervalos onde o gráfico da f é côncavo para cima e onde é côncavo para baixo.

\[f(x) = \dfrac{x^3}{x + 4}\]
\[g(x) = \dfrac{x^3 - 4x^2 + 5}{x^2 - x}\]
\[h(x) = x^2 - 4x + \dfrac{x}{x-10}\]
  1. Calcule:

\[\int x^3 - 2x^2 + 3x + 10 \,\ dx\]
\[\int x^3\cdot\sin(2x) \,\ dx\]
\[\int_0^{10} \tan^3(x)\sec^3(x) \,\ dx \]
\[\int_1^{\infty} -\dfrac{1}{x^2} \,\ dx \]
  1. Qual a menor distância vertical entre as funções \(f(x) = 32x^2\) e \(g(x) = -\dfrac{8}{x^2}\)?