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
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 [
,
] digitando-se
NomeLista(xK);
Por exemplo, a equação diferencial y' = y com a condição inicial
, tem como solução
> restart;
> Lista1 := dsolve( {diff(y(x), x) - y = 0, y(0)=1}, y(x), type=numeric);
> Lista1(1); dá o valor do número neperiano e = exp(1)
> Lista1(1.1); dá o valor y(1,1) = exp(1,1)
> Lista1(-2.137); dá o valor de exp(-2,1123)
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 );
> odeplot(Lista1, [x, y(x)], -4..4, numpoints=25); os eixos foram invertidos
>
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
, 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};
>
Lista2 := dsolve(Linear, y(x), type=numeric, method=classical,
value = array([-1.7,1.0,1.5]));
>
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
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
não tem solução exata no Maple V
> Order := 15;
> dsolve( D(y)(x) = exp(x^3), y(x), series); solução geral no ponto x = 0,
> Order := 6;
> Serie6 := dsolve({D(y)(x) = exp(x^3), y(1) = 2}, y(x), series);
solução no ponto x = 1
> Poli := convert(rhs(Serie6), polynom); converte o lado direito de Serie1 em polinômio
> plot(Poli, x=0..2);
> restart;
> boyce2 := (3*x^2*y(x) + 2*x*y(x)+y(x)^3)+(x^2+y(x)^2)*D(y)(x) = 0;
> dsolve(boyce2, y(x));
Voltar para o Sumário