Soluções gráficas de equações diferenciais
1) Plotando várias soluções de equações diferenciais com seq e plot
Uma das grandes vantagens do uso do Maple é a facilidade de se plotar gráficos de soluções de equações diferenciais.
Podemos plotar uma ou mais soluções de uma equação diferencial de vários modos dentro do Maple V. Descrevemos a seguir três modos de se plotar gráficos de equações diferenciais
O Maple não resolve simultaneamente uma equação diferencial com mais de uma condição inicial. Um modo de plotar uma família de soluções de uma equação diferencial, com mais de uma condição inicial, é gerar uma sequência de condições iniciais e depois gerar uma lista de soluções com o comando dsolve.
Vmaos usar o comando seq para criar uma sequência de condições iniciais
seq( f(i), i = m..n)
na qual
é uma função e i varia de m até n, m e n inteiros. Por exemplo
> restart;
> seq(i*0.5, i = -2..2); define uma sequência de reais com intervalo de 0,5
> EquDifs := seq( { D(y)(x)=y(x), y(0)=0.5*i} , i=-2..2); define a sequência de equações diferenciais a serem resolvidas
> Sols := seq( dsolve( EquDifs[i], y(x)), i=1..5); dá a sequência de soluções
> Funcs := seq(rhs(Sols[i]), i=1..5); isolamos os segundos membros das igualdades
> plot({Funcs}, x = -2..2); plotamos todas as soluções simultaneamente
> EquDifs[1]; extrai a primeira equação da lista
>
2) Campo de Direções e o Retrato de Fase - DEtools[dfieldplot, phaseportrait]
Plotar o
Campo de Direções
para uma equação de primeira ordem não-autônoma y' = f(x,y) em um conjunto N pontos (
), ...,(
), significa desenhar um segmento de reta (ou seta) em cada ponto (xJ, yJ) com coefiecinte angular m = tan (
) = f( xJ,yJ). Este segmento é tangente à solução y(x) que passa pelo ponto (xJ, yJ), isto é, satisfaz a condição y(xJ) = yJ.
Dentro da biblioteca DEtools temos os comandos para se plotar o Campo de Direções de uma equação y' = f(x,y) com dfieldplot . A sintaxe do comando é
dfieldplot( y' = f(x,y), [y ] , x = a..b, y = c..d , dirgrid = [m, n], arrows = OPÇÃO, outras opções )
Na opção "dirgrid" escolhe-se uma grade de "m x n" pontos (o defaul é [10,10] ) no domínio dado. Em "arrows = OPÇÃO" podemos escolher THIN (seta fina), SLIM (seta delgada), THICK (seta espessa), LINE (segmento de reta), NONE (nada)" para o desenho das linhas tangentes.
> with(DEtools): carregamos a biblioteca DEtools
dfieldplot(D(y)(x)=y,[y], x=-2..4, y=-1..2,\
dirgrid=[20,20], arrows=LINE);
>
Com o comando phaseportrait da biblioteca DEtools o Maple plota o Retrato de Fase da equação nos pontos e domínios especificados. Este comando plota automaticamente também o Campo de Direções das soluções . Chamamos atenção de que o Maple emprega métodos numéricos para plotar as soluções e, portanto, não é permitido parâmetros literais na equação dada . A sintaxe do comando é dada por
phaseprotrait( D(y)(x)=f(x,y), [y], x=a..b,{ [x1,y1], ..., [xN,yN] }, y=c..d , OutrasCaracterísticas=opção)
Vamos plotar as soluções da equação y' = -2y + exp(x) nos 6 pontos especificados abaixo
> restart; with(DEtools):
> eq2 := D(y)(x )= -2*y(x)+exp(-x);
> phaseportrait(eq2, [y], x=-2..4, {[0,-1], [0,0], [0,.5], [0,.75], [0,1.5], [0,2]}, y=-1..2, linecolor=black);
Dentre as outras opções que estão descritas em DEtools[DEplot] temos
iterations, arrows, dirgrid, obsrange, scene, colour, linecolour, stepsized
Podemos usar ainda as opções dsolve/numeric (por exemplo, method = ) e de ?plot[options] (por exemplo, title = `equação1` ). Damos um exemplo no qual invertemos os eixos com scene = [y(x),x]
> phaseportrait(eq2,[y], x=-2..4,
> {[0,-1],[0,0],[0,.5],[0,.75],[0,1.5],[0,2]}, y=-1..2,
> scene=[y(x),x], method=classical[foreuler], stepsize=.05,
> linecolour=sin(t*Pi/2), title=`Solucao Invertida`,
> dirgrid=[20,20],arrows=LINE,linecolor = [gold, yellow, wheat, blue, green, black], colour=gray);
>
1) ?plot[options] que são axesfont, labelfont, linestyle, thickness, titlefont, resolution, xtickmarks, axes, color, colour, coords, font, scaling, style, symbol, view ,`
2) dsolve/numeric que são procedure, value, corrections, errorper,s tartinit, stepsize, tolerance, abserr, control, ctrl, itask, maxder, maxfun, maxkop, maxord, maxpts, maxstep, method, minrel, minstep, number, relerr, start, initial
Observação:
Ao resolver uma equação diferencial numericamente no Maple V, num intervalo arbitrariamente escolhido, podemos estar escolhendo um intervalo maior do que o domínio teórico da solução procurada. Neste caso o Maple V pode apresentar uma solução que fica " maluca" após passar por um desses pontos limites do domínio regular da função.
Por exemplo, a equação y' = - x / y tem como solução geral
. Se damos a condição inicial
, temos a solução
que tem o domínio
. Nos pontos
e
temos que
. Nestes pontos a equação diferencial não está definida pois a tangente à curva solução se torna vertical.
Vejamos o que ocorre quando tentamos calcular a solução num
domínio
com
phaseportrait.
O gráfico que deveria ser um arco de círculo aparece prolongado Se restringimos o
domínio
obtemos o arco de círculo esperado
> with(DEtools):
> phaseportrait(D(y)(x)=-(x/y),[y],x=-4..4, {[0,1]}, y=-2..2,linecolor=blue);
> phaseportrait(D(y)(x)=-(x/y), [y], x=-0.9..0.9, {[0,1]}, y=-1..1, linecolor=black, scaling=constrained);
Compare!
domínio
domínio
>
Devemos ter cautela ao investigar soluções de equações diferenciais numericamente com phaseportrait , pois, o que o Maple apresenta pode não exprimir uma verdade matemática. Isto pode trazer problemas e é muito comum quando a solução geral só pode ser expressa implicitamente. Um modo de resolver este problema é plotar as soluções implicitamente, conforme descrito a seguir.
c) Plotando soluções implícitas - plots[contourplot , implicitplot]
Vamos supor que queremos plotar as soluções da equção diferencial
que tem como solução geral
. Podemos traçar as curvas de nível das soluções no Maple com os comandos
contourplot
ou com
implicitplot
da bilioteca
plots
.
Com o comando contourplot traçamos curvas de nível de uma função dentro dos intervalos especificados.
Com este comando não podemos escolher quais curvas serão traçadas, mas podemos especificar a precisão desejada com a opção grid=[m,n] (default = [25,25]) . No exemplo abaixo vamos preencher os espaços entre as curvas com filled=true "num intervalo de cores" que vai do azul ao vermelho com coloring = [red, blue] pois cada cor é dada por um número
> with(plots):
>
contourplot(y-1/3*y^3-1/3*x^3,x=-3..3,y=-3..3, grid=[10,10],filled=true,
coloring=[yellow, blue]);
Outro modo de obter as curvas de nível da função acima é com implicitplot . Para usar este comando temos que explicitar todas as curvas de nível que queremos plotar. Um modo de obter a lista das curvas é usar o comando seq e depois usar implicitplot para plotá-las
> listaeq := seq(y-1/3*y^3-1/3*x^3=i*0.5,i=-5..5);
> with(plots):
> implicitplot({listaeq}, x=-3..3, y=-3..3);
>
Observação: Um modo de se obter os valores das constates CJ = F(x_J,y_J) para cada condição inicial é substituir (x_J,y_J) na solução geral F(x,y) = C com subs e depois calcular CJ numericamente com solve e evalf.
Voltar para o Sumário