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)
# Intervalo Aberto
Interval.open(-10, 20)
# Intervalo Aberto em um dos lados
Interval.Ropen(10,30) # R - Direita
Interval.Lopen(10,30) # L - Direita
Interval(0,oo) # oo representa o infinito em sympy. Note que onde oo estiver será aberto.
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)
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+
Limit(1/x, x, 0, '-') ## sin(x)/x, x -> 0-
limit(sin(x)/x, x, 0, '+')
limit(1/x, x, 0) # '+' por padrão
limit(1/x, x, 0, '-')
limit(1/x, x, 0, '+-') # Dois lados
my_sin = Limit(sin(x)/x, x, 0, '+')
my_sin.doit() # Método doit() calcula uma expressão.
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)
diff(sin(x**2),x)
diff(sin(x**2),x, x) ## Calcular a segunda derivada
diff(sin(x**2),x, x, x) ## Calcular a terceira derivada
diff(sin(x**2),x, 3) ## Calcular a terceira derivada de outra forma
diff(sin(x**2),x, 10) ## Calcular a décima derivada
my_deriv = Derivative(exp(2*x**3),x)
my_deriv.doit()
## Podemos, com o método diff()
expr = exp(2*x**3)
expr.diff(x)
expr.diff(x,3) # Terceira derivada
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)
Integral(1/x, (x, 1, 10)) # Note que passamos (simbolo, inf, sup)
integrate(1/x, (x,1,10))
my_integral = Integral(1/x + 1/y, (x, 1, 10), (y, 1, 10)) # Integral dupla, duas variáveis.
my_integral
my_integral.doit()
Integral(exp(x**2 - 10), x,x) # Integral dupla indefinida, mesma variável
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)
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
dsolve(my_deq)
2.7. Exercícios¶
Como nos últimos capítulos, resolva os seguintes exercícios com o que aprendeu ao longo do curso.
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.
Calcule:
Qual a menor distância vertical entre as funções \(f(x) = 32x^2\) e \(g(x) = -\dfrac{8}{x^2}\)?