Soluções numéricas de equações diferenciais

Exemplo 1) Resolver uma equação diferencial numericamente

Calcula-se a solução numérica de y' = f(x,y) com a condição inicial [Maple Math] acrescentando-se a opção type=numeric ( o defaut é type = exact) no comando dsolve

NomeLista := dsolve( { D(y)(x) = f(x,y), y(a)=b }, y(x), type=numeric)

O retorno é o "procedimento" ( proc... end ) usado para calcular uma lista que contém os pares de pontos

[ [x=x0, y(x)=y(x0 )] , [x=x1,y(x)=y(x1)], .....,[x=xN,y(x)=y(xN)] ]

Esta lista não aparece explicitamente. Podemos explicitar o elemento da lista dado por [ [Maple Math] , [Maple Math] ] digitando-se

NomeLista(xK);

Por exemplo, a equação diferencial y' = y com a condição inicial [Maple Math] , tem como solução [Maple Math]

> restart;

> Lista1 := dsolve( {diff(y(x), x) - y = 0, y(0)=1}, y(x), type=numeric);

[Maple Math]

> Lista1(1); dá o valor do número neperiano e = exp(1)

[Maple Math]

> Lista1(1.1); dá o valor y(1,1) = exp(1,1)

[Maple Math]

> Lista1(-2.137); dá o valor de exp(-2,1123)

[Maple Math]

Exemplo 2) Plotar uma solução numérica

Os dados numéricos obtidos com o type = numeric pode ser plotado com o comando odeplot

dentro da biblioteca plots. Para isto devemos explicitar o intervalo do domínio da variável independente x. Podemos usar ainda todas as demais opções de plot[options]

odeplot(NomeLista, [VarEixoX, VarEixoY], Domínio, OpçõesDEplot[options], )

Afim de compar a precisão na plotagem , no exemplo abaixo plotamos a Lista1 obtida acima no intervalo [-2,2] de dois modos: primeiramente com 5 pontos e depois com 25 pontos, No segundo desenho invertemos a posição dos eixos

> with(plots): carrega a biblioteca plots

> odeplot(Lista1, [y(x), x],-2..2, numpoints=4 );

[Maple Plot]

> odeplot(Lista1, [x, y(x)], -4..4, numpoints=25); os eixos foram invertidos

[Maple Plot]

>

Exemplo 3) Outros métodos numéricos

O Maple pode empregar vários métodos de integração numérica tais como :

method = rkf45, method = dverk78, method = classical, method = gear, method = mgear, method = lsode, or method = taylorserie.

O default é o method = rkf45 ( Fehlberg fourth-fifth order Runge-Kutta method).

Para maiores informações consulte

dsolve[numeric] , dsolve[rkf45] , dsolve[dverk78] , dsolve[classical] , dsolve[gear] , dsolve[mgear] , dsolve[lsode] , dsolve[taylorseries] ,

`,` unexpected

No exemplo a seguir vamos calcular a solução numérica de y'=y com [Maple Math] , através do método "classic" e dispondo os resultados num formato especial com a opção value=array

> restart;

> Linear := {diff(y(x), x)=y(x), y(0)=1};

[Maple Math]

> Lista2 := dsolve(Linear, y(x), type=numeric, method=classical,
value = array([-1.7,1.0,1.5]));

[Maple Math]

>

Soluções por séries de potências de equações diferenciais

Calcula-se as soluções numéricas de equações diferenciais y' = f(x,y) colocando-se type=series como opção do comando dsolve. O Maple pode dar a solução geral do desevolvimento da série de potências em x = 0 (default) com

dsolve( D(y)(x)=f(x,y) , y(x), type=series)

ou desenvolver a série num ponto x = a se damos o valor inicial [Maple Math]

dsolve( { D(y)(x)=f(x,y), y(a)=b }, y(x), type = series)

A ordem da série Order = n (o default é n = 6 ) deve ser escolhida antes de se calcular a solução. Como nas soluções exatas de equações diferencias, o retorno é uma "igualdade" na qual o segundo membro é uma série. Se queremos usar a aproximação apresentada pelo Maple como uma expressão algébrica , devemos converter a série num polinômio e depois usá-lo.

Por exemplo, a equação [Maple Math] não tem solução exata no Maple V

> Order := 15;

[Maple Math]

> dsolve( D(y)(x) = exp(x^3), y(x), series); solução geral no ponto x = 0,

[Maple Math]

> Order := 6;

[Maple Math]

> Serie6 := dsolve({D(y)(x) = exp(x^3), y(1) = 2}, y(x), series);

solução no ponto x = 1

[Maple Math]
[Maple Math]

> Poli := convert(rhs(Serie6), polynom); converte o lado direito de Serie1 em polinômio

[Maple Math]

> plot(Poli, x=0..2);

[Maple Plot]

> restart;

> boyce2 := (3*x^2*y(x) + 2*x*y(x)+y(x)^3)+(x^2+y(x)^2)*D(y)(x) = 0;

[Maple Math]

> dsolve(boyce2, y(x));

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Voltar para o Sumário