Siguiente: Funciones y variables para contrib_ode, Anterior: contrib_ode, Subir: contrib_ode [Índice general][Índice]
La función ode2
de Maxima resuelve ecuaciones diferenciales
ordinarias (EDO) simples de primer y segundo orden. La función
contrib_ode
extiende las posibilidades de ode2
con métodos adicionales para ODEs lineales y no lineales de
primer orden y homogéneas lineales de segundo orden.
El código se encuentra en estado de desarrollo y la
syntaxis puede cambiar en futuras versiones. Una vez el código
se haya estabilizado podrá pasar a integrarse dentro de
Maxima.
El paquete debe cargarse con la instrucción load("contrib_ode")
antes de utilizarlo.
La sintaxis de contrib_ode
es similar a la de ode2
.
Necesita tres argumentos: una EDO (sólo se necesita el miembro
izquierdo si el derecho es igual cero), la variable dependiente y
la independiente. Si encuentra la solución, devolverá una
lista de resultados.
La forma de los resultados devueltos es diferente de la utilizada
por ode2
.
Puesto que las ecuaciones no lineales pueden tener múltiples
soluciones, contrib_ode
devuelve una lista de soluciones.
Las soluciones pueden tener diferentes formatos:
%t
o
%u
.
%c
hace referencia a la constante de integración en
las ecuaciones de primer orden.
%k1
y %k2
son las constantes para las ecuaciones
de segundo orden.
Si por cualquier razón contrib_ode no pudiese encontrar una
solución, devolverá false
, quizás después de
mostrar un mensaje de error.
Ejemplos:
En ocasiones es necesario devolver una lista de soluciones, pues algunas EDOs pueden tener múltiples soluciones:
(%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
Las EDOs no lineales pueden tener soluciones singulares sin constantes de integración, como en la segunda solución del ejemplo siguiente:
(%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
La siguiente ODE tiene dos soluciones paramétricas en términos
de la variable %t
. En este caso, las soluciones paramétricas
se pueden manipular para dar soluciones 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
En el siguiente ejemplo (Kamke 1.112) se obtiene una solución 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
La siguiente ecuación de Riccati se transforma en
una EDO lineal de segundo orden de variable %u
. Maxima
es incapaz de resolver la nueva EDO, por lo que la devuelve si
resolver:
(%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 EDOs de primer orden, contrib_ode
llama a ode2
.
Entonces trata de aplicar los siguientes métodos: factorización,
Clairault, Lagrange, Riccati, Abel y Lie. El método de Lie no
se intenta aplicar a las ecuaciones de Abel si el propio
método de Abel no obtiene solución, pero sí
se utiliza si el método de Riccati devuelve una EDO de
segundo orden sin resolver.
Para EDOs de segundo orden, contrib_ode
llama a ode2
y luego a odelin
.
Se mostrarán mensajes de depurado si se ejecuta la sentencia
put('contrib_ode,true,'verbose)
.
Siguiente: Funciones y variables para contrib_ode, Anterior: contrib_ode, Subir: contrib_ode [Índice general][Índice]