[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
O resolvedor de equações diferenciais ordinárias (EDO) do MAXIMA, o ode2
, resolve
EDO's elementares de primeira e segunda ordem. A função
contrib_ode
extende ode2
com métodos adicionais para EDO's lineares
e EDO's não lineares de primeira ordem e EDO's lineares homogêneas de segunda ordem.
O código está ainda em desenvolvimemto e a seqüência de chamada da função pode mudar
em futuras versões. Uma vez que o código estiver estabilizado essa função pode ser
movida do diretório contrib e integrada dentro do MAXIMA.
Esse pacote deve torna-se disponível para uso com o comando load('contrib_ode)
em primeiro lugar.
A convenção de chamada para contrib_ode
é idêntica a ode2
.
Toma
três argumentos: uma EDO (somente o lado esquerdo precisa ser fornecido se o
lado direito for 0), a variável dependente, e a variável
independente. Quando contrib_ode
obtiver sucesso, retorna uma lista de soluções.
A forma de retorno da lista de solução difere de ode2
.
Como equações não lineares podem ter múltiplas soluções,
contrib_ode
retorna uma lista de soluções. Cada solução pode
ter várias formas:
%c
é usado para representar a constante de integração para equações de primeira ordem.
%k1
e %k2
são constantes para equações de segunda ordem.
Se contrib_ode
não puder obter uma solução por qualquer razão, false
é retornado, após
talvez mostrar uma mensagem de erro.
Isso é necessário para retornar uma lista de soluções, como mesmo EDO's de primeira ordem não lineares podem ter soluções multiplas. Por exemplo:
(%i1) load('contrib_ode)$ (%i2) eqn:x*'diff(y,x)^2-(1+x*y)*'diff(y,x)+y=0; dy 2 dy (%o2) x (--) - (x y + 1) -- + y = 0 dx dx (%i3) contrib_ode(eqn,y,x); x (%o3) [y = log(x) + %c, y = %c %e ] (%i4) method; (%o4) factor
EDO's não lineares podem ter soluções singulares sem constantes de integração, como na segunda solução do seguinte exemplo:
(%i1) load('contrib_ode)$ (%i2) eqn:'diff(y,x)^2+x*'diff(y,x)-y=0; dy 2 dy (%o2) (--) + x -- - y = 0 dx dx (%i3) contrib_ode(eqn,y,x); 2 2 x (%o3) [y = %c x + %c , y = - --] 4 (%i4) method; (%o4) clairault
A seguinte EDO possui duas soluções paramétricas em termos da variável fictícia %t. Nesse caso as soluções paramétricaspodem ser manipuladas para fornecer soluções explícitas.
(%i1) load('contrib_ode)$ (%i2) eqn:'diff(y,x)=(x+y)^2; dy 2 (%o2) -- = (y + x) dx (%i3) contrib_ode(eqn,y,x); (%o3) [[x = %c - atan(sqrt(%t)), y = - x - sqrt(%t)], [x = atan(sqrt(%t)) + %c, y = sqrt(%t) - x]] (%i4) method; (%o4) lagrange
O seguinte exemplo (Kamke 1.112) demonstra uma solução implícita.
(%i1) load('contrib_ode)$ (%i2) assume(x>0,y>0); (%o2) [x > 0, y > 0] (%i3) eqn:x*'diff(y,x)-x*sqrt(y^2+x^2)-y; dy 2 2 (%o3) x -- - x sqrt(y + x ) - y dx (%i4) contrib_ode(eqn,y,x); y (%o4) [x - asinh(-) = %c] x (%i5) method; (%o5) lie
A seguinte equação de Riccati é transformada em uma EDO linear de segunda ordem na variável %u. MAXIMA não está apto a resolver a nova EDO, de forma que essa nova EDO é retornada sem avaliação.
(%i1) load('contrib_ode)$ (%i2) eqn:x^2*'diff(y,x)=a+b*x^n+c*x^2*y^2; 2 dy 2 2 n (%o2) x -- = c x y + b x + a dx (%i3) contrib_ode(eqn,y,x); d%u --- 2 dx 2 n - 2 a d %u (%o3) [[y = - ----, %u c (b x + --) + ---- c = 0]] %u c 2 2 x dx (%i4) method; (%o4) riccati
Para EDO's de primeira ordem contrib_ode
chama ode2
. ode2
tenta então os
seguintes métodos: fatoração, Clairault, Lagrange, Riccati,
Abel e os métodos de simetria de Lie. O método de Lie não é tentado
sobre equações de Abel se o método de Abel falhar, mas é tendado
se o método de Riccati uma EDO de segunda ordem não resolvida.
Para EDO's de segunda ordem contrib_ode
chama ode2
e em seguida odelin
.
Rastros extensivos de depuração mensagens são mostradas se o comando
put('contrib_ode,true,'verbose)
for executado.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
Retorna uma lista de soluções da EDO eqn com variável independente x e variável dependente y.
odelin
resolve EDO's lineares homogêneas de primeira e
segunda ordem com
variável independente x e variável dependente y.
odelin
retorna um conjunto solução fundamental da EDO.
para EDO's de segunda ordem, odelin
usa um método, devido a Bronstein
e Lafaille, que busca por soluções em termos de funções
especiais dadas.
(%i1) load('contrib_ode); (%i2) odelin(x*(x+1)*'diff(y,x,2)+(x+5)*'diff(y,x,1)+(-4)*y,y,x); ...trying factor method ...solving 7 equations in 4 variables ...trying the Bessel solver ...solving 1 equations in 2 variables ...trying the F01 solver ...solving 1 equations in 3 variables ...trying the spherodial wave solver ...solving 1 equations in 4 variables ...trying the square root Bessel solver ...solving 1 equations in 2 variables ...trying the 2F1 solver ...solving 9 equations in 5 variables gauss_a(- 6, - 2, - 3, - x) gauss_b(- 6, - 2, - 3, - x) (%o2) {---------------------------, ---------------------------} 4 4 x x
Retorna o valor da EDO eqn após substituir uma possível solução sol. O valor é igual a zero se sol for uma solução of eqn.
(%i1) load('contrib_ode)$ (%i2) eqn:'diff(y,x,2)+(a*x+b)*y; 2 d y (%o2) --- + (a x + b) y 2 dx (%i3) ans:[y = bessel_y(1/3,2*(a*x+b)^(3/2)/(3*a))*%k2*sqrt(a*x+b) +bessel_j(1/3,2*(a*x+b)^(3/2)/(3*a))*%k1*sqrt(a*x+b)]; 3/2 1 2 (a x + b) (%o3) [y = bessel_y(-, --------------) %k2 sqrt(a x + b) 3 3 a 3/2 1 2 (a x + b) + bessel_j(-, --------------) %k1 sqrt(a x + b)] 3 3 a (%i4) ode_check(eqn,ans[1]); (%o4) 0
method
A variável method
é escolhida para o método que resolver com sucesso
uma dada EDO.
%c
%c
é a constante de integração para EDO's de primeira ordem.
%k1
%k1
é a primeira constante de integração para EDO's de segunda ordem.
%k2
%k2
é a segunda constante de integração para EDO's de segunda ordem.
gauss_a(a,b,c,x)
e gauss_b(a,b,c,x)
são funções
hipergeométricas 2F1. Elas represetnam quaisquer duas soluções
independentes da equação diferencial hipergeométrica
x(1-x) diff(y,x,2) + [c-(a+b+1)x diff(y,x) - aby = 0
(A&S 15.5.1).
O único uso dessas funções é em soluções de EDO's retornadas por
odelin
e contrib_ode
. A definição e o uso dessas
funções pode mudar em futuras versões do maxima.
Veja também gauss_b
, dgauss_a
e gauss_b
.
Veja gauss_a
.
A derivada em relação a x de gauss_a(a,b,c,x)
.
A derivada em relação a x de gauss_b(a,b,c,x)
.
A função M de Kummer, como definida em Abramowitz e Stegun, Handbook of Mathematical Functions, Section 13.1.2.
O único uso dessas funções é em soluções de EDO's retornadas por
odelin
e contrib_ode
. A definição e o uso dessas
funções pode mudar em futuras versões do maxima.
Veja também kummer_u
, dkummer_m
e dkummer_u
.
A função U de Kummer, como definida em Abramowitz e Stegun, Handbook of Mathematical Functions, Section 13.1.3.
Veja kummer_m
.
A derivada com relação a x de kummer_m(a,b,x)
.
A derivada com relação a x de kummer_u(a,b,x)
.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
Essas rotinas aida estão sendo aperfeiçoadas. É necessário ainda:
ode1_factor
para trabalhar com raízes multiplas.
ode1_factor
para tentar resolver fatores
de mais alta ordem. Atualmente somente tenta resolver fatores lineares.
ode1_lagrange
para preferiraízes reais a
raízes complexas.
ode1_lie
. Existem poucos porém
grandes problemas com essa rotina: algumas partes precisam de implementação; alguns casos de teste
parecem executar indefinidamente; outros casos de teste abortam inesplicavelmente; outros ainda retorna "soluções"
muito complexas. Seria surpreendente se estivesse pronto para se liberar uma versão estável.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
Asrotinas foram tesadas sobre aproximadamente mil casos de teste por Murphy, Kamke, Zwillinger e outros. Esses testes estão incluídos no subdiretório de testes.
ode1_clairault
encontra todas as soluções conhecidas,
incluindo soluções singulares, das equações de Clairault em Murphy e
Kamke.
ode1_lie
são extremamente complexas e
impossíveis de verificar.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
[ << ] | [ >> ] | [Top] | [Contents] | [Índice] | [ ? ] |
This document was generated by Viktor T. Toth on Dezembro, 11 2016 using texi2html 1.76.