Cabe mencionar que la solución que proporciona Octave es puramente numérica, es una matriz x, con cada filacorrespondiente a un elemento del vector t. El primer elemento de t debe ser t_0 (t subíndice 0 o t inicial) y debe corresponder al estado inicial del sistema x_0, de modo que la primera fila de la salida es x_0 y utilizando dicha matriz puedes obtener con gnuplot una gráfica demostrativa de como se comporta la ecuación en un intervalo determinado. Así que no te esperes resultados con variables, diferenciales y/o constantes como te lo daría un método convencional de solución.
Hay 4 pasos para resolver una ecuación diferencial en octave:
- El primer paso es definir una función que represente a la ecuación diferencial.
- El segundo paso es definir un vector que represente los valores que va a tomar la variable independiente (x).
- El tercer paso es definir la condición inicial para la ecuación.
- El cuarto y ùltimo paso es usar el comando lsode para integrar y resolver la ecuación diferencial.
Ahora explicaré un ejemplo para demostrar el funcionamiento de lsode.
La ecuación diferencial no lineal de primer orden que utilizaré para este ejemplo es:
dx/dt = ((e^-t) / (x^2)) con x_0 = 1 y en un rango de [0,20]
Con la terminal abierta en octave
octave:1> function suprema = f(x,t) "aquí declaramos la funcion con el
nombre suprema y de la forma f(x,t)"
> suprema = e^-t / x^2; "igualamos la funcion suprema con
nuestra ecuacion diferencial"
> endfunction "comando con el que indicamos que
terminamos de definir la ecuacion"
octave:2> x_0 = 1; "aquí declaramos el valor inicial de la
x_0 yo le puse 1"
octave:3> t = linspace(0, 20); "declaramos los valores de la variable
t con la funcion de linspace que crea
un vector utilizando como parámetros
los intervalos definidos para evaluar
la ecuación."
octave:4> y = lsode("f", x_0, t); "aquí indicamos que lsode que toma como
parámetros primero la función que
declaramos, después el valor que
le dimos de "x_0" y por ùltimo la
variable "t" que contiene el vector
de los intervalos en que queremos
resolver la ecuación. (Si queremos ver
los valores que calculó para "y"
omitimos el ; del final, pero en este
ejemplo mostraré la gráfica de la
función para una mejor representación).
octave:5> plot (t, y) "aquí ya sólo con la función plot
hacemos la referencia que queremos la
gráfica de "t" con respecto a "y"
NOTA: y = x(t)
La gráfica que nos arroja es la siguiente:
Referencias:
http://www.gnu.org/software/octave/doc/interpreter/Simple-Examples.html
http://www.youtube.com/watch?v=Rgu_ZkjIFFE
http://linuxandygt.blogspot.mx/2012/06/ecuaciones-diferenciales-no-lineales.html
http://homepages.math.uic.edu/~hanson/Octave/OctaveODE-EG.html
https://computation.llnl.gov/casc/nsde/pubs/u113855.pdf
http://softwarelibre.unsa.edu.ar/docs/descarga/2003/curso/htmls/octave/x24.html
ftp://ftp.inf.utfsm.cl/pub/Linux/Docs/LuCaS/Presentaciones/200304curso-glisa/octave/curso-glisa-octave-html/x853.html
http://webdelprofesor.ula.ve/ciencias/nunez/cursos/MetodosMatematicos2/2008B/S05_C13.pdf
La ecuación diferencial no lineal de primer orden que utilizaré para este ejemplo es:
dx/dt = ((e^-t) / (x^2)) con x_0 = 1 y en un rango de [0,20]
Con la terminal abierta en octave
octave:1> function suprema = f(x,t) "aquí declaramos la funcion con el
nombre suprema y de la forma f(x,t)"
> suprema = e^-t / x^2; "igualamos la funcion suprema con
nuestra ecuacion diferencial"
> endfunction "comando con el que indicamos que
terminamos de definir la ecuacion"
octave:2> x_0 = 1; "aquí declaramos el valor inicial de la
x_0 yo le puse 1"
octave:3> t = linspace(0, 20); "declaramos los valores de la variable
t con la funcion de linspace que crea
un vector utilizando como parámetros
los intervalos definidos para evaluar
la ecuación."
octave:4> y = lsode("f", x_0, t); "aquí indicamos que lsode que toma como
parámetros primero la función que
declaramos, después el valor que
le dimos de "x_0" y por ùltimo la
variable "t" que contiene el vector
de los intervalos en que queremos
resolver la ecuación. (Si queremos ver
los valores que calculó para "y"
omitimos el ; del final, pero en este
ejemplo mostraré la gráfica de la
función para una mejor representación).
octave:5> plot (t, y) "aquí ya sólo con la función plot
hacemos la referencia que queremos la
gráfica de "t" con respecto a "y"
NOTA: y = x(t)
La gráfica que nos arroja es la siguiente:
Por ùltimo sólo para comprobar los resultados que obtuve con octave, decidí usar Wolfram|Alpha para resolver la misma ecuación y obtuve el siguiente resultado:
Si comparamos las gráficas podemos ver que quitando las dimensiones son casi idénticas por lo que concluyo podemos confiar en la función lsode de octave cuando necesitemos resolver y/o representar ecuaciones diferenciales no lineales.
Referencias:
http://www.gnu.org/software/octave/doc/interpreter/Simple-Examples.html
http://www.youtube.com/watch?v=Rgu_ZkjIFFE
http://linuxandygt.blogspot.mx/2012/06/ecuaciones-diferenciales-no-lineales.html
http://homepages.math.uic.edu/~hanson/Octave/OctaveODE-EG.html
https://computation.llnl.gov/casc/nsde/pubs/u113855.pdf
http://softwarelibre.unsa.edu.ar/docs/descarga/2003/curso/htmls/octave/x24.html
ftp://ftp.inf.utfsm.cl/pub/Linux/Docs/LuCaS/Presentaciones/200304curso-glisa/octave/curso-glisa-octave-html/x853.html
http://webdelprofesor.ula.ve/ciencias/nunez/cursos/MetodosMatematicos2/2008B/S05_C13.pdf
Hubiera sido interesante saber qué algoritmo ocupa Octave para resolver la ecuación que les das ;) Van 14 pts.
ResponderEliminarHola, tu foro es bastante nefasto; resulta que tengo un kilombo de problema y tu basura no me sirve. Sos terrible Inutil.
ResponderEliminarSaludos cordiales, y exito en tu nefasta vida
pues a mi me sirvio, no culpes a otro de tu mediocridad
Eliminar