Equações Diferenciais Ordinárias (EDO)

Produzido por Gustavo Barbosa
Ver Todos os Exercícios

Teoria

Introdução

E aí, jovens do meu Brasil varonil? Tudo joia? Lembram das Equações Diferenciais Ordinárias, as temidas EDOs? Não?

Hoje vamos aprender a resolver EDOs e sistemas de EDOS no MATLAB. Mas antes de aprendermos mais uma função topzera do MATLAB, vamos dar uma relembrada rápida no que são EDOs.

Vamos começar com as EDOs de primeira ordem. Uma EDO de primeira ordem é uma equação que tem essa carinha:

y ' = d y d x = g ( x , y )

onde x é uma variável independente.

Como podemos ver na equação acima, uma EDO é uma equação que envolve uma função, sua derivada e uma variável independente. Resolvemos uma EDO para encontrar essa função, no caso, y = f ( x ) .

Para encontrarmos y , precisamos integrar y ’ e isso normalmente gera uma família de funções. Para especificar uma única solução, usamos uma condição inicial, por exemplo:

y 0 = 1

A EDO de primeira ordem tem esse nome porque nela a derivada de maior ordem é a primeira derivada da função. Caso a EDO tivesse uma derivada segunda, ela seria de segunda ordem, e assim por diante.

“Tá, mas por que temos uma aula de MATLAB específica pra EDOs?”

O porquê, meu jovem gafanhoto, é que dependendo da EDO, não conseguimos resolvê-la analiticamente, na mão. Algumas podem ter umas funções bem diferentonas. Por isso, muitas vezes resolvemos as EDOs usando métodos numéricos. E o MATLAB já tem algumas funções prontas para resolver EDOs, baseadas nos métodos de Runge-Kutta.

“Runge o quê?”, você deve estar se perguntando.

Normalmente, a gente aprende os métodos de Runge-Kutta nas aulas de Cálculo Numérico. Eles são os métodos mais populares para solucionar EDOs.

Para entender esta aula de MATLAB sobre soluções de EDOs, você não precisa lembrar tintim por tintim desses métodos, só saber que eles existem e que o MATLAB usa eles para encontrar soluções numéricas de EDOs. Mas caso queira conhecer mais sobre os métodos de Runge-Kutta, aqui no Responde Aí tem uma aulinha bem legal sobre eles ;D

Resolvendo EDOs de primeira ordem no MATLAB

Depois de relembrarmos rapidinho o que é uma EDO, vamos ver como usar o MATLAB para calcular soluções numéricas para EDOs.

O MATLAB possui várias funções chamadas de o d e para solucionar EDOs de primeira ordem, sendo a principal diferença entre elas a precisão do resultado final. Algumas funções dão soluções mais precisas, outras nem tanto.

Vamos ver nesta aula a função o d e 45 , que é a que o MATLAB recomenda, pois resolve a maior parte dos problemas de EDO e tem uma precisão boa, mas todas as funções o d e têm uma sintaxe parecida.

A função o d e 45 tem o seguinte formato:

[ x , y ]   =   o d e 45 ( E D O _ f u n , x _ i n t , y 0 )

Vemos que ela exige três entradas:

  • E D O _ f u n : uma função representando a EDO de primeira ordem y ' = g ( x , y ) ;
  • x _ i n t : intervalo de integração, normalmente no formato [ x 0   x f ] : o intervalo começa em x 0 e termina em x f ;
  • y 0 : condição inicial de y = f ( x ) em x 0 .

E ela nos dá duas saídas: um vetor com valores de x (começando em x 0 e terminando em x f , correspondendo ao nosso intervalo de integração) e outro com os valores de y (iniciando em y 0 e terminando no valor de y correspondente a x f ), representando a solução da EDO. Em outras palavras, 𝑜𝑑𝑒45 nos retorna os os pontos que representam a função y = f ( x ) para o intervalo de integração x _ i n t .

Vamos de exemplo para ficar mais claro. Vamos resolver a EDO usando a o d e 45 :

y ' = g x , y = 3 x ²

No intervalo [ 2,4 ] , assumindo como condição inicial f ( 2 ) = 0,5 .

O primeiro passo é criar uma função no MATLAB representando a EDO:

Neste print, é criada uma função chamada g 1 que recebe valores de x e y . Ela retorna d y , que é a derivada de y e nossa EDO calculada para diversos valores de x .

Em um novo script, entre com a função ode45 para encontrarmos a solução de y ' = 3 x ² :

Seguindo a estrutura de o d e 45 : [ x , y ]   =   o d e 45 ( E D O _ f u n , x _ i n t , y 0 )

No lugar de 𝐸𝐷𝑂_𝑓𝑢𝑛, coloque o nome da função que você criou representando a EDO: ' g 1 ’. Não esqueça de pôr o nome entre aspas simples, como no print acima.

No lugar de x _ i n t , entre com o vetor de dois elementos [ 2   4 ] , indicando o intervalo de integração. Neste caso, x 0 = 2 e x f = 4 .

No lugar de y 0 , entre com 0,5 , que é a nossa condição inicial.

Ao rodarmos o programa, serão gerados os dois vetores x e y , representando a solução numérica da EDO.

Uma maneira legal de ver o resultado é por meio de gráficos, já que a o d e 45 nos retorna coordenadas. Neste exemplo, podemos também comparar a solução encontrada pela o d e 45   com a solução analítica de y ' = 3 x ² , que é:

y = f x = x 3 - 7,5

Para isto, no mesmo script onde usamos a função o d e 45 , digite as linhas de código:

Na primeira linha, calculamos y = f ( x ) com a solução analítica da EDO para cada valor do vetor x criado por o d e 45 e armazenamos o resultado no vetor y _ a n l .

Na segunda linha, geramos o gráfico com as curvas da solução analítica e da solução numérica, apresentado abaixo:

A curva azul é a solução analítica e as bolinhas vermelhas representam a solução numérica dada por o d e 45 . Viu como elas são bem próximas? :)

Sistemas de EDOs de primeira ordem

Agora, digamos que queremos resolver um sistema de EDOs como o abaixo:

y ' 1 = y 1 + 2 y 2 y ' 2 = 3 y 1 + 2 y 2

Onde y 1 = f ( x ) e y 2 = g ( x ) .

As entradas e as saídas da função o d e 45 vão ser um pouquinho diferentes, mas o funcionamento segue a mesma lógica.

Vamos criar uma função no MATLAB, chamada de e d o _ s i s t , representando o sistema de EDOs:

Como queremos encontrar duas funções ( y 1 e y 2 ), a entrada y da função e d o _ s i s t é um vetor de dois elementos, o primeiro elemento representando y 1 e o segundo elemento, y 2 . O vetor representando as derivadas das funções y 1 e y 2 , d y d x , também é um vetor de dois elementos.

Para resolver o sistema de EDOs, digite os seguintes comandos em um novo script do MATLAB:

A primeira linha cria as condições iniciais de y 1 e y 2 . Elas são representadas por um vetor de dois elementos, y 0 = [ 1 1 ] T . Se se tratasse de um sistema de EDOs com três EDOs, y 0 teria que ter três elementos, e assim por diante.

A segunda linha define o intervalo de integração da variável independente x , que vai de 7 a 10 .

Em seguida, usamos a o d e 45 para resolver o sistema. A saída será um vetor x , representando a variável independente, e uma matriz y . A matriz y tem duas colunas, a primeira representando y 1 e a segunda, y 2 . Se tivesse uma terceira função envolvida, esta matriz teria três colunas, entendeu?

Novamente, podemos ver o resultado do sistema de EDOs em forma de gráfico:

Este comando plota a primeira coluna da matriz y em função de x , representando y 1 . Ele também plota, no mesmo gráfico, uma curva dos valores da segunda coluna da matriz y em função do vetor x , representando y 2 .

Vamos ver como ficou? Rodando o programa, temos este lindo gráfico:

A curva em azul representa y 1 e a vermelha, y 2 .

E as EDOs de ordem superior?

Lembra que eu falei que o o d e 45 só resolve EDOs de primeira ordem? Por isso, para resolver EDOs de ordem superior no MATLAB, as transformamos em um conjunto de equações de primeira ordem.

Vamos de exemplo. Considere a EDO linear de segunda ordem:

y ' ' = g x , y , y ' = y ' 1 - y 2 - y

Queremos encontrar y = f ( x ) . Para transformar a EDO de segunda ordem em um sistema de EDOs de primeira ordem, vamos definir duas novas funções:

u 1 x = y '

u 2 x = y

Substituindo u 1 e u 2 na EDO original, conseguimos gerar um sistema de EDOs de primeira ordem:

u ' 1 = y ' ' = g x , u 2 , u 1 = u 1 1 - u 2 2 - u 2

u ' 2 = y ' = u 1

Desta forma, podemos resolver o problema como fizemos na seção anterior. Vamos criar uma função no MATLAB chamada de e d o _ o r d 2 com o sistema de EDOs de primeira ordem:

Vamos resolver o sistema de EDOs para o intervalo [ 0 ,   20 ] e com condições iniciais:

y ' 0 = u 1 0 = 0

y 0 = u 2 0 = 0,25

Para encontrarmos a solução do sistema de EDOs, criamos um novo script com as linhas de código:

A primeira linha de código define as condições iniciais para u 1 e u 2 e as armazena no vetor y 0 .

A segunda define o intervalo de integração no vetor de dois elementos x _ i n t .

A terceira linha usa a função o d e 45 para resolver o sistema de EDOs. Ela vai retornar o vetor x , com valores de 0 a 20 , e a matriz u , que possui duas colunas: uma representando u 1 , isto é, a primeira derivada y ’ , e outra coluna representando u 2 , que é a função y = f ( x ) que queríamos encontrar.

A quarta linha gera um gráfico contendo uma curva da primeira coluna de u em função de x e outra curva com os dados da segunda coluna de u em função de x . Em outras palavras, o gráfico terá uma curva representando u 1 , que é a primeira derivada da função y   =   f ( x ) , e outra representando u 2 , que é a própria função y   =   f ( x ) .

Rodando o programa, temos este gráfico maneiro:

Em azul, temos a curva de u 1 , isto é, a curva de y ' . Em vermelho, temos a curva de u 2 , que na verdade é a função y = f ( x ) que estávamos procurando.

Ufa! Vimos bastante coisa hoje, né? Agora é hora de praticar ;D Faça os exercícios que montei com muito carinho para ficar craque em resolver EDOs!

Resolvendo EDOs de primeira ordem no MATLAB

Sistemas de EDOs de primeira ordem

E as EDOs de ordem superior?