Resolucin de ecuaciones diferenciales con MATLAB R2015a
1. 1. Resolucin de ecuaciones diferenciales con MATLAB R2015a
2. 2. Qu es MATLAB? MATLAB es un programa interactivo para computacin numrica y visualizacin de datos. Es ampliamente usado por ingenieros de control, en el anlisis y diseo, posee adems una extraordinaria versatilidad y capacidad para resolver problemas en matemtica aplicada, fsica, qumica, ingeniera, finanzas y muchas otras aplicaciones. Est basado en un sofisticado software de matrices para el anlisis de sistemas de ecuaciones. Permite resolver complicados problemas numricos sin necesidad de escribir un programa. El nombre de MATLAB proviene de la contraccin de los trminos MATrix LABoratory 3. 3. Ventajas del MATLAB Su programacin requiere menos tiempo que otros lenguajes como FORTRAN, C, PASCAL, etc. Utiliza un lenguaje ms cercano a la matemtica. Permite definir fcil y rpidamente nuevas funciones que se incorporan a MATLAB mediante el toolboxes. Posee grandes capacidades grficas. 4. 4. Qu se puede realizar en MATLAB ? Anlisis de datos. Polinomios Grficos 2D Grficos 3D Ajuste de curvas Interpolacin Anlisis numrico Resolucin de ecuaciones diferenciales 5. 5. Command Windows: Donde se ejecutan todas las instrucciones y programas. Se escribe la instruccin o el nombre del programa y se da click en Enter. Command History: Muestra los ltimos comandos ejecutados en Command Windows. Se puede recuperar el comando haciendo doble click. Current directory: Situarse en el directorio donde se va a trabajar. Help: ayuda sobre diversos temas de MATLAB (tambin se puede usar desde comand windows) Workspace: Para ver las variables que se estn usando y sus dimensiones (si son matrices) Editor del Matlab: Todos los ficheros de comandos Matlab deben de llevar la extensin .m Elementos bsicos del escritorio de MATLAB 6. 6. Command Windows Command History Current directory Workspace Interfaz del escritorio de MATLAB R2015a 7. 7. Caractersticas bsicas de MATLAB -El prompt de Matlab es >>. El usuario escribe a continuacin. -Para ejecutar se pulsa la tecla Enter. -Se pueden recuperar comandos anteriores navegando con las flechas y . -Se distinguen maysculas y minsculas. -Todos los comandos de MATLAB se escriben en minsculas y los argumentos se envan entre parntesis separados por coma. -El carcter % se utiliza para insertar comentarios. Todo lo que sigue ( en la misma lnea) es ignorado por MATLAB. -Si se teclea al final de una instruccin ; sta se ejecuta pero el resultado no se visualiza por pantalla. -Dos comandos se pueden insertar en la misma lnea separados por , o por ; . La diferencia entre los dos es que con , se muestran los resultados de las operaciones mientras que con ; la operacin se ejecuta pero no se visualiza. -El comando (>>clc) limpia o borra toda la ventana de comandos de MATLAB. 8. 8. Caractersticas bsicas de MATLAB ( continuacin) -El circunflejo ^ es la potenciacin: >> 3^5 -El trmino ans es la primera variable que vemos de MATLAB. Concretamente, guarda la ltima salida dada por MATLAB (answer): >> 4+6 ans = 10 -La raz cuadrada se puede calcular bien elevando a (^(1/2)) o bien utilizando el comando (>> sqrt). -La prioridad de ejecucin entre operaciones matemticas es la habitual: primero se calcula la potenciacin ^ , posteriormente los productos y divisiones * , / y en ltimo lugar, las sumas y restas + y - . Este orden se puede cambiar utilizando parntesis. La regla es sencilla: dada una expresin, lo primero que se calcula es lo que est dentro de cada parntesis. Esta regla es recursiva, es decir, si dentro de un parntesis hay otros parntesis, para evaluar el primero se empezar con los parntesis interiores. -Help, helpwin y lookfor son comandos de ayuda: Ej. (>> help sin) -El comando (>>demo) hace una demostracin de las diferentes aplicaciones de MATLAB. -Para cerrar o finalizar el uso de MatLab se usa el comando (>> quit) . 9. 9. Resolucin de ecuaciones diferenciales con MATLAB Existen varios mtodos para resolver ecuaciones diferenciales, los cules con adecuaciones necesarias se usan para resolver sistemas de ecuaciones diferenciales. Entre los ms usados tenemos el mtodo de Euler, de Euler Mejorado Euler-Gauss o mtodo de Heun, mtodo de la serie de Taylor, mtodo de Milne, mtodo de Adams-Bashforth- Moulton, mtodo de Hamming y los mtodos de Runge-Kutta. MatLab tiene implementado mdulos bsicos para resolver ecuaciones diferenciales y sistemas de ecuaciones diferenciales en forma directa, es decir, sin programar el algoritmo numrico. A continuacin se describen los comandos ms importantes empleados en MatLab para la resolucin de ecuaciones diferenciales: ode45.(Ordinary differential equation solver of 4th and 5th order). Es un mtodo de un solo paso, es decir, para averiguar un punto slo se basa en el calculado anteriormente. Est basado en la frmula explcita de Runge-Kutta de 4 y 5 orden (Par de Dormand- Princce). En general, este mtodo arroja resultados satisfactorios para la mayora de los modelos continuos y resulta ser un bueno como primera aproximacin cuando no se conoce mucho del sistema en estudio. 10. 10. Resolucin de ecuaciones diferenciales con MATLAB ode23.Es un mtodo de un solo paso basado en la frmula de Runge-Kutta de 2 y 3 orden (par de Bogacki-Shampine). Este mtodo resulta ms eficiente que ode45 cuando las tolerancias del error no son tan estrictas y el sistema presenta un leve grado de rigidez. ode113.Es un mtodo multipaso, es decir, necesita conocer de varios puntos anteriores para calcular la solucin actual. Es el mtodo de orden variable de Adams-Bashforth-Moulton. Puede resultar ms eficiente que ode45 cuando las tolerancias del error se tornan muy estrictas. ode15s.Es un mtodo multipaso de orden variable (entre uno y cinco) basado en las frmulas de diferenciacin numrica (NDFs). Si bien las NDFs estn relacionadas con las frmulas de diferenciacin por atraso (BDFs o mtodo de Gear), estas NDFs son mucho ms eficientes. Este mtodo es recomendable si el sistema es rgido (o un problema diferencial algebraico) o bien si el ode45 falla o resulta ineficaz. 11. 11. ode23s.Es un mtodo de un solo paso basado en la frmula modificada e Rosenbrock de segundo orden. Puede ser ms eficiente que ode15s para altas tolerancias y en sistemas rgidos. Resolucin de ecuaciones diferenciales con MATLAB ode23t.Es un mtodo que utiliza interpolacin libre para resolver ecuaciones diferenciales ordinarias y algebraicas por la regla trapezoidal, cuando el sistema es semirgido. ode23tb.Ecuaciones diferenciales ordinarias mediante TR-BDF2. Es una frmula implcita de RungeKutta, que utiliza en una primer paso la regla trapezoidal y en un segundo paso las frmulas de diferenciacin por atraso orden dos. Ms eficiente que ode15s para tolerancias altas. bvp4c. Ecuaciones diferenciales ordinarias con valores en la frontera. 12. 12. Resolucin de ecuaciones diferenciales ordinarias con MATLAB Las ecuaciones diferenciales ordinarias se pueden resolver en MATLAB con el comando dsolve. Este comando se utiliza para resolver una sola ecuacin o bien un sistema de ecuaciones diferenciales. Una ecuacin diferencial ordinaria de primer orden es una ecuacin que contiene la derivada de la variable dependiente. Si (t) es la variable independiente, e (y) es la variable independiente, la ecuacin diferencial ordinaria de primer orden se pude escribir de la forma: Una ecuacin diferencial de segundo orden contiene la segunda derivada de la variable dependiente. Su forma general es: La solucin para estas ecuaciones es una funcin y= f(t) que satisface la ecuacin. La solucin puede ser general o particular. Una solucin general contiene constantes. En la solucin particular las constantes deben tener valores numricos especficos tal que la solucin satisfaga las condiciones iniciales. 13. 13. Solucin general en MATLAB ( reglas a tener en cuenta ) Para obtener una solucin general, el comando dsolve debe tener la forma: dsolve (eq) o dsolve(eq,var) -eq es la ecuacin a resolver. Debe ser introducida como cadena, incluso si las variables que contiene son objetos simblicos. -Se puede usar cualquier letra (en maysculas o minsculas) como variable dependiente, excepto D. -En el comando dsolve (eq) MATLAB toma t como la variable independiente por defecto. -En el comando dsolve (eq, var) el usuario puede indicar la variable independiente teclendola en forma de cadena dentro del parmetro var. -Cuando se teclea la ecuacin, la letra D indica diferencial o derivada. Si (y) es la variable dependiente y (t) es la independiente, Dy significa dy/dt. Por ejemplo, la ecuacin dy/dt + 3y =100, se introducira como: Dy + 3 * y = 100 14. 14. Solucin general en MATLAB (continuacin) -La segunda derivada se representa como D2, la tercera derivada como D3, y as sucesivamente. Por ejemplo, la ecuacin: Se introducira en el MATLAB como D2y + 3 * Dy + 5 * y = sin (t) -En la solucin que ofrece MATLAB, se utilizan C1, C2, C3, etc., como constantes de integracin. Por ejemplo, veamos el cdigo correspondiente a una solucin general para la ecuacin diferencial de primer orden: Segn MATLAB: Traduccin de la solucin general >>dsolve(Dy =4*t + 2*y) ans = C1*exp(2*t) - 2*t - 1 y = C1 e 2t - 2t - 1 15. 15. Solucin general en MATLAB (continuacin) A continuacin veamos una solucin general para la ecuacin diferencial ordinaria de segundo orden: Segn MATLAB: >>dsolve(D2x + 2 * Dx + x = 0) ans = C1*exp(-t) + C2*t*exp(-t) Traduccin de la solucin general: x = C1 e -t + C2 t e -t Si MATLAB no pude encontrar una solucin para la ecuacin, ste devuelve un objeto simblico vaco, seguido del mensaje: Warning : explicit solution could not be found (Aviso : podra no existir una solucin explcita.) 16. 16. Solucin general en MATLAB (continuacin) Los ejemplos siguientes muestran la resolucin de ecuaciones diferenciales que contienen variables simblicas, adems de variables dependientes e independientes. >>dsolve (Ds = a* x^2) La variable independiente es t (por defecto) MATLAB resuelve la ecuacin: ans = a*t*x^2 + C1 Se visualiza la solucin: s = ax2t + c1 >>dsolve (Ds = a* x^2, x) La variable independiente es x MATLAB resuelve la ecuacin:ans = 1/3*a*x^3+C1 Se visualiza la solucin: s = ax3 + C1 a) b) 17. 17. Solucin general en MATLAB (continuacin) >>dsolve(Ds = a*x^2, a) La variable independiente se define como a. MATLAB resuelve la ecuacin:ans = 1/2*a^2*x^2+C1 Se visualiza la solucin: s =1/2a2 x2+ C1 Solucin particular Si las condiciones iniciales o en la frontera han sido especificadas, se puede obtener una solucin particular para una ecuacin diferencial ordinaria. Una ecuacin de primer orden requiere de una condicin, una de segundo orden requiere dos condiciones , y as sucesivamente. Para obtener una solucin particular se deben utilizar las siguientes sintaxis del comando dsolve. Para una EDO de primer orden: Para una EDO de orden superior: dsolve ( eq, cond1, var) dsolve ( eq, cond1, cond2, var) 18. 18. Solucin particular (continuacin) Para resolver ecuaciones de orden superior se necesitan condiciones adicionales en la frontera que deben ser introducidas por parmetro. Si el nmero de condiciones es menor que el orden de la ecuacin, MATLAB devolver una solucin que incluye las constantes de integracin ( C1, C2, C3, etc.) Las condiciones de frontera se teclean en forma de cadena, de la siguiente manera: El argumento var es opcional. Se puede utilizar para definir la variable independiente en la ecuacin. Si no se introduce ningn valor se toma por defecto t. 19. 19. Solucin particular (continuacin) Por ejemplo, veamos el cdigo para resolver la ecuacin diferencial de primer orden : Con una condicin inicial y(0) = 5: >>dsolve(Dy + 4*y = 60 ,y(0) =5) ans = 15 - 10*exp(-4*t) Se visualiza la solucin: y = 15 -10e-4t 20. 20. Solucin particular (continuacin) A continuacin se muestra, en este otro ejemplo , el cdigo MATLAB para resolver la ecuacin diferencial de segundo orden: Con las condiciones siguientes: a) b) >> dsolve('D2y- 2*Dy+2*y=0','y(0)=1','Dy(0)=0') ans = exp(t)*cos(t) - exp(t)*sin(t) La solucin se visualiza: y = et cos(t) et sen(t) La solucin se puede simplificar utilizando el comando factor. >> factor (ans) ans= [ exp(t), cos(t) - sin(t)] La solucin se visualiza: y = et (cos(t) sen(t)) 21. 21. Resolucin de ejercicios 1) Calcule la solucin general a la siguiente ecuacin diferencial: 2) Calcule la solucin a la siguiente ecuacin diferencial que satisface las condiciones iniciales dadas. 22. 22. Solucin de los ejercicios 1 y 2 1) >> dsolve('D2y-4*y=5','y(0)=0','Dy(0)=1') ans = (3*exp(-2*t))/8 + (7*exp(2*t))/8 - 5/4 2) >> dsolve('D2y+3*Dy-2*y=0') ans = C1*exp(t*(17^(1/2)/2 - 3/2)) + C2*exp(-t*(17^(1/2)/2 + 3/2)) 23. 23. Graficando ecuaciones diferenciales en MATLAB Ejemplo 1, consideremos la ecuacin diferencial: Solucin general en MATLAB: >> dsolve('Dy=2*x*y','x') ans = C1*exp(x^2) Sabemos que esta constante C1 se determina usando una condicin inicial para la ecuacin diferencial, por ejemplo y(0) = 5. Para resolver la ecuacin diferencial con esta condicin inicial necesitamos el cdigo: >> dsolve('Dy=2*x*y','y(0)=5','x') ans = 5*exp(x^2) 24. 24. Graficando ecuaciones diferenciales en MATLAB (cont.) Para graficar esta solucin requerimos de un intervalo sobre el cual se graficar la solucin obtenida. Por ejemplo, si deseamos graficar sobre el intervalo [2, 3] podemos hacer uso del siguiente cdigo: >> x=-2:0.05:3; >> y=eval(vectorize(ans)); >> plot(x,y) 25. 25. Graficando ecuaciones diferenciales en MATLAB(cont.) Ejemplo 2, consideremos la ecuacin diferencial: Solucin general en MATLAB: >> dsolve('Dy=0.1*y-0.02*y^2','x') ans = -5/(exp(C1 - x/10) - 1) Sabemos que esta constante C1 se determina usando una condicin inicial para la ecuacin diferencial, por ejemplo y(0) = 0.01. Para resolver la ecuacin diferencial con esta condicin inicial necesitamos el cdigo: >> dsolve('Dy=0.1*y- 0.02*y^2','y(0)=0.01','x') ans = 5/(exp(log(499) - x/10) + 1) 26. 26. Graficando ecuaciones diferenciales en MATLAB (cont.) Para graficar esta solucin requerimos de un intervalo sobre el cual se graficar la solucin obtenida. Por ejemplo, si deseamos graficar sobre el intervalo [0, 120] podemos hacer uso del siguiente cdigo: >> x=0:1.5:120; >> y=eval(vectorize(ans)); >> plot(x,y)