Está en la página 1de 27

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
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.


¿ 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


Elementos básicos del escritorio de MATLAB

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
Interfaz del escritorio de MATLAB R2015a

Workspace

Command
Windows

Command
History

Current directory
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.


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) .


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.
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.
Resolución de ecuaciones diferenciales con MATLAB

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.

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.


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.
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’
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’) 2t


y = C1 e - 2t - 1
ans =

C1*exp(2*t) - 2*t - 1
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: Traducción de la solución general:

>>dsolve(‘D2x + 2 * Dx + x = 0’) x = C1 e -t + C2 t e -t

ans =

C1*exp(-t) + C2*t*exp(-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.)
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.
a)
>>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

b) La variable independiente es x
>>dsolve (‘Ds = a* x^2’, ‘x’)
ans = MATLAB resuelve la ecuación:

1/3*a*x^3+C1
Se visualiza la solución: s =⅓ ax3 + C1
Solución general en MATLAB (continuación)

La variable independiente se define como a.


>>dsolve(‘Ds = a*x^2’, ‘a’)

ans = MATLAB resuelve la ecuación:

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: dsolve ( ‘eq’, ‘cond1’, ‘var’)

Para una EDO de orden superior: dsolve ( ‘eq’, ‘cond1’, ‘cond2’,… ‘var’)
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.
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


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))


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.
Solución de los ejercicios 1 y 2

1)

>> 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))

2)

>> dsolve('D2y-4*y=5','y(0)=0','Dy(0)=1')

ans =

(3*exp(-2*t))/8 + (7*exp(2*t))/8 - 5/4


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)
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)
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)
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)

También podría gustarte