Siguiente: descriptive, Anterior: cobyla [Índice general][Índice]
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: Posibles mejoras a contrib_ode, Anterior: Introducción a contrib_ode, Subir: contrib_ode [Índice general][Índice]
Devuelve la lista de soluciones de la ecuación diferencia ordinaria (EDO) eqn de variable independiente x y variable dependiente y.
La función odelin
resulve EDOs homogéneas lineales
de primer y segundo orden con variable independiente x
y variable dependiente y. Devuelve un conjunto fundamental
de soluciones de la EDO.
Para EDOs de segundo orden, odelin
utiliza un
método desarrollado por Bronstein y Lafaille, que busca las soluciones
en términos de funciones especiales 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
Devuelve el valor de la ecuación diferencia ordinaria (EDO) eqn después de sustituir una posible solución soln. El valor es cero si soln es una solución de 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 la variable method
se le asigna el método aplicado.
%c
¶%c
es la constante de integración para EDOs de primer
orden.
%k1
¶%k1
es la primera constante de integración para EDOs de segundo
orden.
%k2
¶%k2
es la segunda constante de integración para EDOs de segundo
orden.
gauss_a(a,b,c,x)
y gauss_b(a,b,c,x)
son funciones
geométricas 2F1 . Representan dos soluciones independientes
cualesquiera de la ecuación 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).
El único uso que se hace de estas funciones es en las soluciones de
EDOs que devuelven odelin
y contrib_ode
. La definición
y utilización de estas funciones puede cambiar en futuras distribuciones
de Maxima.
Véanse también gauss_b
, dgauss_a
y gauss_b
.
Véase también gauss_a
.
The derivative with respect to x of gauss_a(a,b,c,x)
.
Derivada de gauss_b(a,b,c,x)
respecto de x.
Función M de Kummer, tal como la definen Abramowitz y Stegun, Handbook of Mathematical Functions, Sección 13.1.2.
El único uso que se hace de esta función es en las soluciones de
EDOs que devuelven odelin
y contrib_ode
. La definición
y utilización de estas funciones puede cambiar en futuras distribuciones
de Maxima.
Véanse también kummer_u
, dkummer_m
y dkummer_u
.
Función U de Kummer, tal como la definen Abramowitz y Stegun, Handbook of Mathematical Functions, Sección 13.1.3.
Véase también kummer_m
.
Derivada de kummer_m(a,b,x)
respecto de x.
Derivada de kummer_u(a,b,x)
respecto de x.
Siguiente: Pruebas realizadas con contrib_ode, Anterior: Funciones y variables para contrib_ode, Subir: contrib_ode [Índice general][Índice]
Este paquete aún se encuentra en fase de desarrollo. Aspectos pendientes:
ode1_factor
para que trabaje con
raíces múltiples.
ode1_factor
para que intente
resolver factores de orden superior. En este momento sólo
intenta resolver factores lineales.
ode1_lagrange
para que prefiera
raíces reales a las complejas.
ode1_lie
.
Existen algunos problemas: algunas partes no están implementadas,
algunos ejemplos no terminan de ejecutarse, otros producen errors,
otros devuelven respuestas muy complejas.
Siguiente: Referencias para contrib_ode, Anterior: Posibles mejoras a contrib_ode, Subir: contrib_ode [Índice general][Índice]
Los procedimientos fueron probados con cerca de mil ecuaciones tomadas de Murphy, Kamke, Zwillinger y otros. Éstas se encuentran en el directorio de pruebas.
ode1_clairault
encuentra todas las
soluciones conocidas, incluídas las singulares,
de las ecuaciones de Clairault en Murphy y Kamke.
ode1_lie
son
demasiado complejas e imposibles de interpretar.
Anterior: Pruebas realizadas con contrib_ode, Subir: contrib_ode [Índice general][Índice]
Siguiente: descriptive, Anterior: cobyla [Índice general][Índice]