Sharednotebooks / 5.EquacoesDiferenciaisOrdinarias.ipynbOpen in CoCalc
%html
<h2 style="color: rgb(51, 102, 255);">1. Resumo do Tutorial</h2>
<br style="font-family: Verdana;">
<span style="font-family: Verdana;">Neste Tutorial,
veremos como resolver, simbolicamente, <span
 style="color: rgb(51, 102, 255);">Equações Diferenciais
Ordinárias de Ordens 1 e 2</span> usando os métodos estudados
tipicamente em um curso introdutório de EDO.<br>
À medida que o curso avançar, outros métodos serão discutidos como, por
exemplo, solução por séries.<br>
<br>
</span>
%html
<h2 style="color: rgb(51, 102, 255);"><span
 style="font-family: LMMono10-Regular;">2</span>.
Equações Diferenciais Ordinárias de Ordem 1</h2>
<span style="font-family: Verdana;">Vejamos como resolver
EDOs de ordem 1 expressas pela <span
 style="color: rgb(51, 51, 255);">forma geral</span>:
$F(x,y(x),y'(x))=0$<br>
<br>
<br style="font-family: Verdana;">
</span><span style="font-family: Verdana;"><span
 style="color: rgb(51, 51, 255);"><span
 style="color: rgb(51, 51, 255);">Esquema Geral da Solução no
Sage</span><br>
<br>
</span></span><span style="font-family: Verdana;">a)
definição da variável independente: <span
 style="font-style: italic;">x=var('x')</span>;<br>
b) definição da variável dependente: <span
 style="font-style: italic;">y=function('y')(x)</span><br>
c) solução através do comando desolve:<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">desolve(edo,
variavel, ics=..., ivar=..., show_method=..., contrib_ode=...)</span><br>
<br>
onde os parâmetros do comando <span style="color: rgb(51, 51, 255);">desolve</span>
são:<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">edo</span>:
é a equação diferencial ordinária que se deseja resolver; por exemplo,
a equação $y'=2y+x$ é escrita como diff(y,x)==2*y+x (observe o duplo ==)<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">variavel</span>:
nome da variável dependente (no exemplo acima, y)<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">ics</span>:
argumento opcional que permite especificar condições iniciais; para
Ordem 1, forneça uma lista $[x_0,y_0]$; para Ordem 2,
&nbsp;$[x_0,y_0,x_1,y_1]$ ou $[x_0,y_0,y_0']$<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">ivar</span>:
argumento opcional que permite especificar a variável independente
(isto é essencial quando a EDO depende de parâmetros, ex: $y'=ay+bx+c$<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">show_method</span>:
argumento opcional (default=False); se especificado como <span
 style="font-style: italic;">True</span>, o Sage
informa o método de solução utilizado (linear, separable, exact,
homogeneous, etc)<br>
&nbsp;&nbsp;&nbsp; <span
 style="font-style: italic; color: rgb(51, 51, 255);">contrib_ode</span>:
argumento opcional (default=False); se for True, o Sage tratará casos
como equações de Ricatti, Lagrange, e outros casos patológicos (não
veremos isto em detalhe).<br>
<br>
A seguir, serão fornecidos vários exemplos de resolução simbólica de
EDOs de ordem 1, no Sage.<br>
<br>
</span>
%html
<h4 style="color: rgb(51, 51, 255);"><span
 style="font-family: Verdana;">Equações Lineares</span></h4>
<span style="font-family: Verdana;"><span
 style="color: rgb(51, 102, 255);"></span></span><span
 style="font-family: Verdana;"></span><span
 style="font-family: Verdana;">São equações do
tipo:&nbsp;$y'+P(x)y=Q(x)$<br>
<br>
Exemplo: $y'+3y=e^x$<br>
<br>
</span>
#Exemplo: EDO Linear
x=var('x'); y=function('y')(x) # definindo as variáveis
# Solução Geral da EDO (não foi especificada condição inicial); não precisa especificar variável independente pois não existem parâmetros
# Observe que show_method=True; então, a resposta do Sage contém a solução e, em seguida, o método usado (neste caso, linear)
desolve(diff(y,x)+3*y==exp(x),y,show_method=True)
show(desolve(diff(y,x)+3*y==exp(x),y,show_method=True))
%html
<h4 style="color: rgb(51, 51, 255);"><span
 style="font-family: Verdana;">Equações a Variáveis Separáveis</span></h4>
<span style="font-family: Verdana;"><span
 style="color: rgb(51, 102, 255);"></span></span><span
 style="font-family: Verdana;"></span><span
 style="font-family: Verdana;">São equações do
tipo:&nbsp;$P(x)=y'Q(x)$<br>
<br>
Exemplo: $yy'=x$<br>
<br>
</span>
#Exemplo: Variáveis Separáveis
x=var('x'); y=function('y')(x)
fn=desolve(y*diff(y,x)==x,y,show_method=True)
show(fn)
%html
<h4 style="color: rgb(51, 51, 255);"><span
 style="font-family: Verdana;">Equações Homogêneas</span></h4>
<span style="font-family: Verdana;"><span
 style="color: rgb(51, 102, 255);"></span></span><span
 style="font-family: Verdana;"></span><span
 style="font-family: Verdana;">São equações do
tipo:&nbsp;$y'=\frac{P(x,y)}{Q(x,y)}$, onde P e Q são funções
homogêneas de mesmo grau (em um dado intervalo)<br>
<br>
Exemplo: $x^2y'=y^2+xy+x^2$<br>
<br>
</span>
#Exemplo: Equações Homogêneas
x=var('x'); y=function('y')(x)
fn=desolve(x^2*diff(y,x)==y^2+x*y+x^2,y,show_method=True)
show(fn)
# Observe que a solução não é dada explicitamente!
%html
<h4 style="color: rgb(51, 51, 255);"><span
 style="font-family: Verdana;">Equações Exatas</span></h4>
<span style="font-family: Verdana;"><span
 style="color: rgb(51, 102, 255);"></span></span><span
 style="font-family: Verdana;"></span><span
 style="font-family: Verdana;">São equações do
tipo:$\frac{\partial f}{\partial x}dx+\frac{\partial f}{\partial y}dy$, onde f é uma função de 2
variáveis e diferenciável.<br>
<br>
Exemplo: $y'=\frac{\cos(y)-2x}{y+x\sin(y)}$, com
$f(x,y)=x^2-x\cos(y)+y^2/2$<br>
<br>
</span>
#Exemplo: Equações Exatas
x=var('x'); y=function('y')(x)
fn=desolve(diff(y,x)==(cos(y)-2*x)/(y+x*sin(y)),y,show_method=True)
show(fn)
%html
<h2 style="color: rgb(51, 102, 255);"><span
 style="font-family: LMMono10-Regular;">3</span>.
Alguns Exemplos Mais Elaborados</h2>
<span style="font-family: Verdana;"><br
 style="font-family: Verdana;">
</span><span style="font-family: Verdana;"><span
 style="color: rgb(51, 51, 255);"><span
 style="color: rgb(51, 51, 255);">Exemplo 1: $y'+2y=x^2-2x+3$</span><br>
<br>
</span></span><span style="font-family: Verdana;">Podemos
utilizar outros recursos do Sage em conjunto com o comando de resolução
de EDO; por
exemplo, vamos resolver a EDO acima do mesmo modo que nos exemplos
anteriores, mas utilizaremos o comando <span
 style="font-style: italic;">expand</span> para
expressar a solução, obtida pelo Sage,
em uma forma mais simples e, a seguir, vamos impor uma condição inicial.<br>
<br>
#Exemplo 1
x = var('x'); y = function('y')(x) # definição das variáveis
DE = diff(y,x)+2*y == x**2-2*x+3 # definição da EDO e atribuição da equação a uma variável
print('a) Resolução da EDO')
y1=desolve(DE, y); show(y1)
print('b) Resolução da EDO e Simplificação da Solução')
y2=desolve(DE, y).expand(); show(y2)
print('c) Método Utilizado')
desolve(DE, y, show_method=True)[1] # OBSERVE O USO DO PARÂMETRO [1]. O QUE ACONTECERIA SE VOCÊ USASSE [0]?
print('d) Impõe Condição Inicial X(0)=1')
y3=desolve(DE, y, ics=[0,1]).expand(); show(y3)

%html
</span></span><span style="font-family: Verdana;"><span
 style="color: rgb(51, 51, 255);"><span
 style="color: rgb(51, 51, 255);">Exemplo 2:
$y'\log(y)=y\sin(x)$</span><br>
<br>
</span></span><span style="font-family: Verdana;">É
simples verificar que se trata de uma EDO a variáveis separáveis e
veremos que o Sage reconhece esse fato.<br>
Por outro lado, o Sage fornece uma solução em forma implícita; veremos
que, neste caso, podemos utilizar o comando <span
 style="font-style: italic; color: rgb(51, 51, 255);">solve</span>
para obter uma expressão explícita para a solução.<br>
Por fim, construiremos os gráficos correspondentes à solução da EDO
para diferentes condições iniciais.<br>
<br>
#Exemplo 2:
x = var('x'); y = function('y')(x)
desolve(diff(y,x)*log(y) == y*sin(x), y, show_method=True)[1] # Verificando que o Sage usa método das variáveis separáveis
ed = desolve(diff(y,x)*log(y) == y*sin(x), y); # Resolve a EDO e atribui a solução à variável ed
show(ed) # Observe que a solução é uma equação envolvendo y e x, ou seja, y é dado implicitamente em termos de x
# ESSA EQUAÇÃO PODE SER RESOLVIDA ATRAVÉS DO COMANDO SOLVE
sol=solve(ed, y)
show(sol) # Veja que existem duas soluções possíveis, correspondendo aos sinais + e - do argumento da função exponencial!
%html
Agora vamos traçar os gráficos para a primeira solução (o procedimento é análogo, para a segunda); além disso, vamos assumir $c\geq 1$
Para isso, precisamos atribuir valores numéricos à constante C, mas como ter acesso a essa constante ?
Observe que a função $y(x)$ depende tanto da variável dependente $x$ como da constante C. O Sage possui um comando que retorna as variáveis/parâmetros de uma equação
ed.variables()
%html
Vemos portanto que as variáveis da equação armazenada em $ed$ são _C e x, nessa ordem; ou seja, _C é a variável de índice 0 e x é a variável de índice 1.<br>
Para acessar C, executamos o comando:
c=ed.variables()[0] # [0] seleciona a variável de índice 0
show(c)
%html
Como fazemos para atribuir o valor 5 ao parâmetro C? Usamos o comando:
solve(ed, y)[0].substitute(c == 5).rhs()
%html
No comando acima, executamos os seguintes passos:<br>
a) resolvemos a equação <em>ed</em> obtendo y=f(x)<br>
b) substituimos c=5 na expressão de f(x)<br>
c) selecionamos o lado direito (através de <em>rhs</em>() ) da equação y=f(x) (porque queremos graficar f(x))<br>
<br>
Agora, podemos traçar a solução para c=5
plot(solve(ed, y)[0].substitute(c == 2).rhs(), x, -3, 3)
%html
Podemos graficar simultaneamente diferentes soluções particulares, correspondentes a diferentes condições iniciais (valores de C).<br>
Observe o uso de uma estrutura de repetição (for) cuja sintaxe é da linguagem PYTHON (já mencionamos que o Sage usa Python).<br>
A expressão for k in range(1,10,2) significa que o contador k parte do valor 1 e vai até 10 de 2 em 2. Portanto, k=1, 3, 5, 7,9.

P = Graphics()
for k in range(1,10,2):
	P += plot(solve(ed, y)[0].substitute(c==1+k/4).rhs(), x, -3, 3)
P.show()
%html
<h2 style="color: rgb(51, 102, 255);">3. Equações
Diferenciais Ordinárias de Ordem 2</h2>
<br style="font-family: Verdana;">
<span style="font-family: Verdana;">Futuramente, veremos
que, quando se resolve determinadas Equações Diferenciais Parciais pelo
Método de Separação de Variáveis naturalmente somos conduzidos ao
problema de resolver uma Equação Diferencial Ordinária de Ordem 2. <br>
Por esse motivo, apresentamos aqui como resolver EDOs de segunda ordem
com o Sage, mas apenas no caso em que as equações são lineares e a
coeficientes constantes.<br>
<br>
</span><span style="font-family: Verdana;"><span
 style="color: rgb(51, 51, 255);"><span
 style="color: rgb(51, 51, 255);">Exemplo 1:
$y''+3y=x^2-7x+31$</span></span></span><br>
<br>
x = var('x'); y = function('y')(x)
DE = diff(y,x,2)+3*y == x^2-7*x+31
sol=desolve(DE, y).expand()
show(sol)
%html
IMPONDO DUAS CONDIÇÕES INICIAIS (para a função e sua derivada no instante t=0): $y(0)=1$ e $y'(0)=2$
solA=desolve(DE, y, ics=[0,1,2]).expand()
show(solA)
%html
IMPONDO DUAS CONDIÇÕES DE CONTORNO: $y(0)=1$ e $y(-1)=0$
solB=desolve(DE, y, ics=[0,1,-1,0]).expand()
show(solB)

t,L,R,C,E,wd=var('t,L,R,C,E,wd')
assume(L>0)
assume(C>0)
assume(R>0)
assume(E>0)
assume(wd>0)
assume((C*R^2-4*L) > 0)
q=function('q',t)
ed = L*diff(q,t,2)+R*diff(q,t,1)+q/C==E*sin(wd*t)
sol=desolve(ed,q,ivar=t)
show(sol)
forget()

t,L,R,C,E,wd=var('t,L,R,C,E,wd')
assume(L>0)
assume(C>0)
assume(R>0)
assume(E>0)
assume(wd>0)
#assume((C*R^2-4*L) > 0)
q=function('q',t)
ed = L*diff(q,t,2)+q/C==0
sol=desolve(ed,q,ivar=t)
show(sol)
forget()
x,a,b,c,d=var('x,a,b,c,d')
assume(a>0)
assume(b>0)
assume(c>0)
assume(d>0)
#assume((C*R^2-4*L) > 0)
p=function('p')(x)
ed = ((a*x-b)^2)*diff(p,x,2)+(c*x-d)*diff(p,x,1)==1
sol=desolve(ed,p,ivar=x)
show(sol)
forget()
x,a,b,c,d=var('x,a,b,c,d')
assume(a>0)
assume(b>0)
assume(c>0)
assume(d>0)
p=function('p')(x)
ed = ((a*x+b)^2)*diff(p,x,2)+(c*x+d)*diff(p,x,1)==1
sol=desolve(ed,p,ivar=x)
show(sol)
forget()