resolución de ecuaciones diferenciales con matlab r2015a

27
Módulo 7: Cálculo II Docente: MSc. Joanny Ibarbia Pardo Resolución de ecuaciones diferenciales con MATLAB R2015a

Upload: joanny-ibarbia-pardo

Post on 15-Jan-2017

11.140 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Módulo 7: Cálculo II

Docente: MSc. Joanny Ibarbia Pardo

Resolución de ecuaciones diferenciales con MATLAB R2015a

Page 2: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

¿Qué es MATLAB?

MATLAB es un programa interactivo para computación numérica y

visualización de datos. Es ampliamente usado por ingenieros de control, en el

análisis y diseño, posee además una extraordinaria versatilidad y capacidad

para resolver problemas en matemática aplicada, física, química, ingeniería,

finanzas y muchas otras aplicaciones. Está basado en un sofisticado software

de matrices para el análisis de sistemas de ecuaciones. Permite resolver

complicados problemas numéricos sin necesidad de escribir un programa.

El nombre de MATLAB proviene de la contracción de los términos MATrix LABoratory

Page 3: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Ventajas del MATLAB

Su programación requiere menos tiempo que otros lenguajes como FORTRAN, C, PASCAL, etc.

Utiliza un lenguaje más cercano a la matemática.

Permite definir fácil y rápidamente nuevas funciones que se incorporan a MATLAB mediante el toolboxes.

Posee grandes capacidades gráficas.

Page 4: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

¿ Qué se puede realizar en MATLAB ?

Análisis de datos.

Polinomios

Gráficos 2D

Gráficos 3D

Ajuste de curvas

Interpolación

Análisis numérico

Resolución de ecuaciones diferenciales

Page 5: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Command Windows: Donde se ejecutan todas las instrucciones y programas. Se escribe la instrucción 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 (también se puede usar desde comand windows)

Workspace: Para ver las variables que se están usando y sus dimensiones (si son matrices)

Editor del Matlab: Todos los ficheros de comandos Matlab deben de llevar la extensión .m

Elementos básicos del escritorio de MATLAB

Page 6: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Command Windows

Command History

Current directory

Workspace

Interfaz del escritorio de MATLAB R2015a

Page 7: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Características básicas de MATLAB-El prompt de Matlab es >>. El usuario escribe a continuación.

-Para ejecutar se pulsa la tecla Enter.

-Se pueden recuperar comandos anteriores navegando con las flechas y .

-Se distinguen mayúsculas y minúsculas.

-Todos los comandos de MATLAB se escriben en minúsculas y los argumentos se envían entre paréntesis separados por coma.

-El carácter % se utiliza para insertar comentarios. Todo lo que sigue ( en la misma línea) es ignorado por MATLAB.

-Si se teclea al final de una instrucción ‘ ; ‘ ésta se ejecuta pero el resultado no se visualiza por pantalla.

-Dos comandos se pueden insertar en la misma línea separados por “, “ o por “ ; “.La diferencia entre los dos es que con “ , “ se muestran los resultados de las operaciones mientras que con “ ; “ la operación se ejecuta pero no se visualiza.

-El comando (>>clc) limpia o borra toda la ventana de comandos de MATLAB.

Page 8: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Características básicas de MATLAB ( continuación)

-El circunflejo ^ es la potenciación: >> 3^5

-El término ans es la primera variable que vemos de MATLAB. Concretamente, guarda la última salida dada por MATLAB (answer): >> 4+6 ans = 10

-La raíz cuadrada se puede calcular bien elevando a ½(^(1/2)) o bien utilizando el comando (>> sqrt).

-La prioridad de ejecución entre operaciones matemáticas es la habitual: primero se calcula la potenciación ^ , posteriormente los productos y divisiones * , / y en último lugar, las sumas y restas + y - . Este orden se puede cambiar utilizando paréntesis. La regla es sencilla: dada una expresión, lo primero que se calcula es lo que está dentro de cada paréntesis. Esta regla es recursiva, es decir, si dentro de un paréntesis hay otros paréntesis, para evaluar el primero se empezará con los paréntesis interiores.

-Help, helpwin y lookfor son comandos de ayuda: Ej. (>> help sin)

-El comando (>>demo) hace una demostración de las diferentes aplicaciones de MATLAB.

-Para cerrar o finalizar el uso de MatLab se usa el comando (>> quit) .

Page 9: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Resolución de ecuaciones diferenciales con MATLAB

Existen varios métodos para resolver ecuaciones diferenciales, los cuáles con adecuaciones necesarias se usan para resolver sistemas de ecuaciones diferenciales. Entre los más usados tenemos el método de Euler, de Euler Mejorado ó Euler-Gauss o método de Heun, método de la serie de Taylor, método de Milne, método de Adams-Bashforth-Moulton, método de Hamming y los métodos de Runge-Kutta. MatLab tiene implementado módulos básicos para resolver ecuaciones diferenciales y sistemas de ecuaciones diferenciales en forma directa, es decir, sin programar el algoritmo numérico. A continuación se describen los comandos más importantes empleados en MatLab para la resolución de ecuaciones diferenciales:

ode45.(Ordinary differential equation solver of 4th and 5th order). Es un método de un solo paso, es decir, para averiguar un punto sólo se basa en el calculado anteriormente. Está basado en la fórmula explícita de Runge-Kutta de 4º y 5º orden (Par de Dormand-Princce). En general, este método arroja resultados satisfactorios para la mayoría de los modelos continuos y resulta ser un bueno como primera aproximación cuando no se conoce mucho del sistema en estudio.

Page 10: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Resolución de ecuaciones diferenciales con MATLAB

ode23.Es un método de un solo paso basado en la fórmula de Runge-Kutta de 2º y 3º orden (par de Bogacki-Shampine). Este método resulta más eficiente que ode45 cuando las tolerancias del error no son tan estrictas y el sistema presenta un leve grado de rigidez.

ode113.Es un método multipaso, es decir, necesita conocer de varios puntos anteriores para calcular la solución actual. Es el método de orden variable de Adams-Bashforth-Moulton. Puede resultar más eficiente que ode45 cuando las tolerancias del error se tornan muy estrictas.

ode15s.Es un método multipaso de orden variable (entre uno y cinco) basado en las fórmulas de diferenciación numérica (NDFs). Si bien las NDFs están relacionadas con las fórmulas de diferenciación por atraso (BDFs o método de Gear), estas NDFs son mucho más eficientes. Este método es recomendable si el sistema es rígido (o un problema diferencial algebraico) o bien si el ode45 falla o resulta ineficaz.

Page 11: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

ode23s.Es un método de un solo paso basado en la fórmula modificada e Rosenbrock de segundo orden. Puede ser más eficiente que ode15s para altas tolerancias y en sistemas rígidos.

Resolución de ecuaciones diferenciales con MATLAB

ode23t.Es un método que utiliza interpolación libre para resolver ecuaciones diferenciales ordinarias y algebraicas por la regla trapezoidal, cuando el sistema es semirígido.

ode23tb.Ecuaciones diferenciales ordinarias mediante TR-BDF2. Es una fórmula implícita de RungeKutta, que utiliza en una primer paso la regla trapezoidal y en un segundo paso las fórmulas de diferenciación por atraso orden dos. Más eficiente que ode15s para tolerancias altas.

bvp4c. Ecuaciones diferenciales ordinarias con valores en la frontera.

Page 12: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Resolución 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 ecuación o bien un sistema de ecuaciones diferenciales.

Una ecuación diferencial ordinaria de primer orden es una ecuación que contiene la derivada de la variable dependiente. Si (t) es la variable independiente, e (y) es la variable independiente, la ecuación diferencial ordinaria de primer orden se pude escribir de la forma:

Una ecuación diferencial de segundo orden contiene la segunda derivada de la variable dependiente. Su forma general es:

La solución para estas ecuaciones es una función y= f(t) que satisface la ecuación. La solución puede ser general o particular. Una solución general contiene constantes. En la solución particular las constantes deben tener valores numéricos específicos tal que la solución satisfaga las condiciones iniciales.

Page 13: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución general en MATLAB ( reglas a tener en cuenta )

Para obtener una solución general, el comando dsolve debe tener la forma:

dsolve (‘eq’) o dsolve(‘eq’,’var’)

-eq es la ecuación a resolver. Debe ser introducida como cadena, incluso si las variables que contiene son objetos simbólicos.

-Se puede usar cualquier letra (en mayúsculas o minúsculas) 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 tecleándola en forma de cadena dentro del parámetro var.

-Cuando se teclea la ecuación, 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 ecuación dy/dt + 3y =100, se introduciría como: ‘Dy + 3 * y = 100’

Page 14: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución general en MATLAB (continuación)

-La segunda derivada se representa como D2, la tercera derivada como D3, y así sucesivamente. Por ejemplo, la ecuación:

Se introduciría en el MATLAB como ‘D2y + 3 * Dy + 5 * y = sin (t)’

-En la solución que ofrece MATLAB, se utilizan C1, C2, C3, etc., como constantes de integración.

Por ejemplo, veamos el código correspondiente a una solución general para la ecuación diferencial de primer orden:

Según MATLAB: Traducción de la solución general

>>dsolve(‘Dy =4*t + 2*y’)

ans =

C1*exp(2*t) - 2*t - 1

y = C1 e 2t - 2t - 1

Page 15: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución general en MATLAB (continuación)

A continuación veamos una solución general para la ecuación diferencial ordinaria de segundo orden:

Según MATLAB:

>>dsolve(‘D2x + 2 * Dx + x = 0’)

ans = C1*exp(-t) + C2*t*exp(-t)

Traducción de la solución general:

x = C1 e -t + C2 t e -t

Si MATLAB no pude encontrar una solución para la ecuación, éste devuelve un objeto simbólico vacío, seguido del mensaje: “ Warning : explicit solution could not be found” (Aviso : podría no existir una solución explícita.)

Page 16: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución general en MATLAB (continuación)

Los ejemplos siguientes muestran la resolución de ecuaciones diferenciales que contienen variables simbólicas, además de variables dependientes e independientes.

>>dsolve (‘Ds = a* x^2’) La variable independiente es t (por defecto)

MATLAB resuelve la ecuación:ans = a*t*x^2 + C1 Se visualiza la solución: s = ax2t + c1

>>dsolve (‘Ds = a* x^2’, ‘x’) La variable independiente es x

MATLAB resuelve la ecuación:ans = 1/3*a*x^3+C1

Se visualiza la solución: s =⅓ ax3 + C1

a)

b)

Page 17: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución general en MATLAB (continuación)

>>dsolve(‘Ds = a*x^2’, ‘a’) La variable independiente se define como a.

MATLAB resuelve la ecuación:ans = 1/2*a^2*x^2+C1 Se visualiza la solución: s =1/2a2 x2+ C1

Solución particular

Si las condiciones iniciales o “en la frontera” han sido especificadas, se puede obtener una solución particular para una ecuación diferencial ordinaria. Una ecuación de primer orden requiere de una condición, una de segundo orden requiere dos condiciones , y así sucesivamente. Para obtener una solución 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’)

Page 18: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución particular (continuación)

Para resolver ecuaciones de orden superior se necesitan condiciones adicionales en la frontera que deben ser introducidas por parámetro. Si el número de condiciones es menor que el orden de la ecuación, MATLAB devolverá una solución que incluye las constantes de integración ( 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 ecuación. Si no se introduce ningún valor se toma por defecto t.

Page 19: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución particular (continuación)

Por ejemplo, veamos el código para resolver la ecuación diferencial de primer orden :

Con una condición inicial y(0) = 5:

>>dsolve(‘Dy + 4*y = 60’ ,’y(0) =5’)

ans =

15 - 10*exp(-4*t) Se visualiza la solución: y = 15 -10e-4t

Page 20: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución particular (continuación)

A continuación se muestra, en este otro ejemplo , el código MATLAB para resolver la ecuación 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 solución se visualiza: y = et cos(t) – et sen(t)

La solución se puede simplificar utilizando el comando factor.

>> factor (ans)

ans= [ exp(t), cos(t) - sin(t)] La solución se visualiza: y = et (cos(t) – sen(t))

Page 21: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Resolución de ejercicios

1) Calcule la solución general a la siguiente ecuación diferencial:

2) Calcule la solución a la siguiente ecuación diferencial que satisface las condiciones iniciales dadas.

Page 22: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Solución 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))

Page 23: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Graficando ecuaciones diferenciales en MATLAB

Ejemplo 1, consideremos la ecuación diferencial:

Solución general en MATLAB:

>> dsolve('Dy=2*x*y','x') ans = C1*exp(x^2)

Sabemos que esta constante C1 se determina usando una condición inicial para la ecuación diferencial, por ejemplo y(0) = 5. Para resolver la ecuación diferencial con esta condición inicial necesitamos el código:

>> dsolve('Dy=2*x*y','y(0)=5','x') ans = 5*exp(x^2)

Page 24: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Graficando ecuaciones diferenciales en MATLAB (cont.)

Para graficar esta solución requerimos de un intervalo sobre el cual se graficará la solución obtenida. Por ejemplo, si deseamos graficar sobre el intervalo [−2, 3] podemos hacer uso del siguiente código:

>> x=-2:0.05:3;>> y=eval(vectorize(ans));>> plot(x,y)

Page 25: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Graficando ecuaciones diferenciales en MATLAB(cont.)

Ejemplo 2, consideremos la ecuación diferencial:

Solución 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 condición inicial para la ecuación diferencial, por ejemplo y(0) = 0.01. Para resolver la ecuación diferencial con esta condición inicial necesitamos el código:

>> dsolve('Dy=0.1*y-0.02*y^2','y(0)=0.01','x') ans = 5/(exp(log(499) - x/10) + 1)

Page 26: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

Graficando ecuaciones diferenciales en MATLAB (cont.)

Para graficar esta solución requerimos de un intervalo sobre el cual se graficará la solución obtenida. Por ejemplo, si deseamos graficar sobre el intervalo [0, 120] podemos hacer uso del siguiente código:

>> x=0:1.5:120;>> y=eval(vectorize(ans));>> plot(x,y)

Page 27: Resolución de ecuaciones diferenciales  con  MATLAB  R2015a

MUCHAS GRACIAS