Equações Homogêneas de Coeficientes Constantes

Uma equação diferencial homogênea de coeficientes constantes é uma equação diferencial de ordem arbitrária que pode ser colocada na forma

(1)
a_N y^{(N)} + a_{N-1} y^{(N-1)} + \ldots + a_2 y^{\prime\prime} + a_1 y^\prime + a_0 y = 0

com condições iniciais

(2)
y^{(n)}(0) = y^{(n)}_0, \; \mbox{ para } n = 0, 1, \ldots, N

onde N é a ordem da equação, y^{(n)} é a derivada de n-ésima ordem da variável dependente, e a_n são os coeficientes (constantes) da equação. Esta equação pode ser solucionada supondo que a resposta seja do tipo:

(3)
y(x) = A e^{s x}

sendo x a variável independente, e as constantes A e s dependentes da equação. Se calcularmos as derivadas da equação 3 e substituirmos os resultados na equação 1, podemos encontrar os valores desconhecidos de A e s. A n-ésima derivada da equação 3 é dada por

(4)
\frac{d^ny}{dx^n} = A s^n e^{s x}

Substituindo na equação 1 obtemos

(5)
a_N A s^N e^{s x} + a_{N-1} A s^{N-1} e^{s x} + \ldots + a_2 A s^2 e^{s x} + a_1 A s e^{s x} + a_0 e^{s x} = 0

Uma vez que a exponencial nunca é zero para valores reais ou complexos de seu expoente, podemos simplificar a equação, obtendo o polinômio característico da equação diferencial, dado por

(6)
a_N s^N + a_{N-1} s^{N-1} + \ldots + a_2 s^2 + a_1 s + a_0 = 0

As soluções desse polinômio fornecem os valores s que estão nos expoentes da solução. Uma vez que existem N soluções para a equação 6, teremos várias soluções para a equação diferencial. E, considerando que derivadas e integrais tem a propriedade da superposição (ou seja, a soma de duas soluções também é uma solução), podemos reescrever a solução como

(7)
y(x) = \sum_{i = 0}^{N} A_i e^{s_i x}

onde s_i são as raízes do polinômio característico. Para calcular o valor das constantes A_i, utilizamos as condições iniciais. As condições iniciais são os valores assumidos pela variável dependente e suas derivadas quando o valor da variável dependente é feito igual a zero. Portanto, precisamos calcular as derivadas da solução na equação 8. Uma vez que aquela equação é um somatório de exponenciais, é fácil ver que a derivada de n-ésima ordem é dada por

(8)
y^{(n)}(x) = \sum_{i = 0}^{N} A_i s_i^n e^{s_i x}

Substituindo x = 0 e o respectivo valor da condição inicial, obtemos

(9)
y^{(n)}_0 = \sum_{i = 0}^{N} A_i s_i^n, \; \mbox{ para } n = 0, 1, \ldots, N

A equação 9, na verdade, leva a um conjunto de equações lineares com incógnitas A_i. Extendendo essa equação, para deixar mais clara a relação, obtemos:

(10)
\left\{ \begin{array}{l} A_1 + A_2 + ... + A_N = y_0 \ s_1 A_1 + s_2 A_2 + ... + s_N A_N = y^\prime_0 \ s_1^2 A_1 + s_2^2 A_2 + ... + s_N^2 A_N = y^{\prime\prime}_0 \ \ldots \ s_1^N A_1 + s_2^N A_2 + ... + s_N^N A_N = y^{(N)}_0 \end{array} \right.

A solução do sistema de equações lineares nos dará os valores das constantes e portanto a solução do problema.

Exemplo

Suponha que desejamos solucionar a equação

(11)
y^{\prime\prime} - 5 y^\prime + 6 y = 0

com condições iniciais y(0) = 1 e y^\prime(0) = 0. O polinômio característico dessa equação é

(12)
s^2 - 5 s + 6 = 0

cujas soluções são dadas por s_1 = 2 e s_2 = 3. Portanto, a solução tem a forma

(13)
y(x) = A_1 e^{2x} + A_2 e^{3x}

Substituindo x = 0 e y = 1 nesta equação, obtemos

(14)
A_1 + A_2 = 1

Substituindo x = 0 e y = 0 na derivada da equação, obtemos

(15)
2A_1 + 3A_2 = 0

Solucionando este sistema, obtemos A_1 = 3 e A_2 = -2. Portanto, a solução é

(16)
y(x) = -3 e^{2t} + 2 e^{3t}

Solucionando com Python

Vamos resolver o mesmo exemplo, mas utilizando Python. Para solucionarmos uma equação com o Python, além do NumPy, necessitaremos também do SciPy, que contém algumas funções para trabalharmos com polinômios. Na linha de comando, digitamos

>>> from scipy import *
>>> from numpy import *

Lembramos que na linha de comando, um from … import * não causa muito problema, mas em scripts é recomendável utilizar import … para preservar o espaço de nomes. Suponha que os coeficientes da equação diferencial sejam dados em uma lista. Para criar e solucionar o polinômio característico, utilizamos as funções do SciPy como abaixo:

>>> edo = [ 1., -5., 6. ]
>>> pc = poly1d(edo)
>>> pc
poly1d([ 1., -5.,  6.])
>>> s = pc.roots
>>> s
array([ 3.+0.j,  2.+0.j])

A função poly1d() cria um polinômio com os coeficientes dados na lista. Os coeficientes aparecem na ordem com que costumamos escrever as equações, ou seja, o coeficiente relacionado à potência de maior grau vem em primeiro lugar. A propriedade poly1d.roots retorna as raízes do polinômio. Note que, por padrão, as funções trabalham com números complexos, o que pode ser um excelente recurso.

Para encontrarmos os valores das constantes multiplicativas, precisamos das condições iniciais, e também montar a matriz que representa o sistema linear na equação 10. Com o Python, e usando o NumPy, isso é fácil:

>>> sn = s.reshape((2, 1)) ** arange(N)
>>> sn
array([[ 1.+0.j,  3.+0.j],
       [ 1.+0.j,  2.+0.j]])
>>> sn = matrix(sn)
>>> sn
matrix([[ 1.+0.j,  3.+0.j],
        [ 1.+0.j,  2.+0.j]])

Usamos o método reshape() para transformar o vetor de uma dimensão que contém as raízes em uma matriz-coluna com duas linhas. Fazemos isso para aproveitarmos a habilidade de broadcasting do NumPy. Note também que convertemos o resultado para uma matriz, para que possamos utilizar as operações de álgebra de matrizes que o NumPy tem disponível. Para solucionar o sistema de equações, fazemos:

>>> ci = matrix([[ 1., 0. ]])
>>> A = ci * sn.getI()
>>> A
matrix([[-2.+0.j,  3.+0.j]])

Na segunda linha, o método getI() obtém a inversa da matriz sn. A ordem em que a multiplicação das matrizes é feita pode parecer meio estranha para quem está familiarizado com a forma matricial da solução de sistemas lineares. Poderíamos transpor as matrizes para colocar na ordem costumeira, mas essa é uma operação desnecessária, pois o resultado obtido é o mesmo. Podemos criar uma função que toma como parâmetros os dados da solução e retorna pontos arbitrários da curva:

def fn(x, s, A):
    s = array(s)
    A = array(A)
    return sum(A*exp(s*x))

Na segunda e terceira linha, convertemos as soluções de volta para o formato de um arranjo. Fazemos isso para garantir que não existirão problemas com as dimensões dos vetores. Essa função tem a vantagem de ser vetorizada, ou seja, funcionará tanto com valores numéricos como com arranjos de valores.
page_revision: 6, last_edited: 1192704822|%e %b %Y, %H:%M %Z (%O ago)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License