Saltar al contenido

Ecuaciones Diferenciales EDO

Hola controleras y controleros, en esta entrada vas a aprender detalladamente y con ejemplos como resolver ecuaciones diferenciales en Matlab, cual tipo de solver es el más adecuado utilizar y adicionalmente veremos algunos ejemplos de implementación.

Antes de comenzar te hago la invitación para que accedas a Nuestro Curso Gratuito de MATLAB desde Cero.

Y que te sucríbas al canal de YouTUBE para que sigas aprendiendo más sobre la programación de este software.

Resolver Ecuaciones Diferenciales en Matlab

Para poder resolver ecuaciones diferenciales en matlab deberemos inicialmente entender como el software trabaja para la solucione de este tipo de problemas comunes en la ingenieria.

En este punto, será importante que sepas como crear funciones dentro de matlab y también que sepas como usar las funciones anónimas de matlab (handle) pues te será de mucha ayuda para que puedas resolver ecuaciones diferenciales con Matlab.

Ecuaciones Diferenciales en Matlab

Matlab nos va a permitir calcular la solución de diversas ecuaciones diferenciales EDO usando sus solvers internos.

Matlab solo calcula soluciones numéricas de sistemas de ecuaciones diferenciales de primer orden. Para resolver ecuaciones diferenciales de orden superior se deben convertir, mediante un cambio de variables, en ecuaciones diferenciales de primer orden.

Antes de definir el sistema de ecuaciones en matlab, primero debe manipular manualmente dicho sistema para que tenga la forma:

dV/dt = f (t, V)

donde V es un vector con las funciones del sistema. En otras palabras, el sistema debe estar en un formato como

dy1/ dt = …; dy2 / dt = …., etc.

Solver de Ecuaciones Diferenciales en Matlab

Para la resolución de las EDO dentro del software de Matlab, una vez hemos expresado nuestro sistema de ecuaciones en diversas ecuaciones de primer orden, podremos emplear cualquiera de los siguientes solver para la resolución de estos problemas.

SolverTipo de ProblemaExactitudCuando Usar
ode45No RígidoMediaLa mayor parte del tiempo ode45 debería ser el primer solucionador que intentes.
ode23No RígidoBajaode23 puede ser más eficiente que ode45 en problemas con tolerancias crudas, o en presencia de rigidez moderada.
ode113No RígidoBaja a Altaode113 puede ser más eficiente que ode45 en problemas con tolerancias de error estrictas, o cuando la función ODE es costosa de evaluar.
ode15sRigidosBaja a MediaPruebe ode15s cuando ode45 falle o sea ineficiente y sospeche que el problema es rígido. También use ode15s al resolver ecuaciones algebraicas diferenciales (DAE).
ode23sRigidosBajaode23s puede ser más eficiente que ode15s en problemas con tolerancias crudas de error. Puede resolver algunos problemas rígidos para los cuales ode15s no es efectivo. ode23s calcula el jacobiano en cada paso, por lo que es beneficioso proporcionar el jacobiano a través de odeset para maximizar la eficiencia y la precisión. Si hay una matriz de masa, debe ser constante.
ode23tRigidosBajaUse ode23t si el problema es solo moderadamente rígido y necesita una solución sin amortiguación numérica. ode23t puede resolver ecuaciones algebraicas diferenciales (DAE).
ode23tbRigidosBajaAl igual que ode23s, el solucionador ode23tb podría ser más eficiente que ode15s en problemas con tolerancias de error crudas.
ode15iCompletamente implicitoBajaUse ode15i para problemas totalmente implícitos f (t, y, y ‘) = 0 y para ecuaciones algebraicas diferenciales (DAE) del índice 1.

Ecuaciones Diferenciales Rígidas

Un sistema rígido es uno que tiene componentes que cambian rápidamente, junto con componentes de cambio lento.

Un problema de EDO es rígido si la solución que se busca varía lentamente, pero hay soluciones cercanas que varían rápidamente, por lo que el método numérico se ejecuta en pequeños pasos para conseguir un resultado adecuado.

La rigidez no es más que un problema de eficiencia. Si no nos interesa el tiempo que el algoritmo le lleva para obtener la solución, entonces no estaríamos preocupados por la rigidez.

Los métodos no rígidos pueden resolver problemas rígidos; solo que les toman mucho tiempo para hacerlo.

Sintaxis en Matlab

Una ecuación diferencial dentro de matlab se resuelve escribiendo la siguiente sintaxis:

Ecuación Diferencial Matlab
Ecuación Diferencial Matlab

donde tspan = [t0 tf] integra el sistema de ecuaciones diferenciales y′=f(t,y) de t0 a tf con condiciones iniciales x0. Cada fila del array de soluciones X1 corresponde a un valor devuelto en el vector de columna ts.

Todos los solvers de ODE de MATLAB® pueden resolver sistemas de ecuaciones con la forma y′=f(t,y), o bien problemas que impliquen una matriz de masas, M(t,y)y′=f(t,y). Los solvers utilizan sintaxis similares.

Ejemplo – Van der Pol

En sistemas dinámicos, el oscilador de van der Pol es un oscilador con amortiguamiento no lineal. Su evolución temporal obedece a una ecuación diferencial de segundo orden:

\dfrac{d^2x}{dt^2}-\mu(1-x^2)\dfrac{dx}{dt}+x=0

en la que x es la posición, función del tiempo t, y μ es un parámetro escalar que gobierna la no linealidad y el amortiguamiento.

Realizando un cambio de variable

x_1=x
x_2=\dfrac{dx}{dt}=\dot{x}

reescribiendo la ecuación diferencial en dos ecuaciones de primer orden:

\dot{x}_1=\dot{x}=x_2
\dot{x}_2=\ddot{x}=\mu(1-x_1^2)x_2-x_1

Solución NO Rígida

Para el sistema de Van der Pol no ser rígido, se establecen las siguientes condiciones iniciales:

\mu=1,\ x_1(0)=2,\ x_2(0)=0
Van der Pol No Rigido
Van der Pol No Rígido

Solución Rígida

Para el sistema de Van der Pol ser rígido, se establecen las siguientes condiciones iniciales:

\mu=1000,\ x_1(0)=2,\ x_2(0)=0
Van der Pol  Rígido
Van der Pol Rígido

Descargar Código

A continuación te dejo el script de Matlab tanto del programa principal, como de la función de Van der Pol para que lo descargues y lo reproduzcas en tu casa. Recuerda que para desbloquearlo basta compartir esta información en tus redes sociales, de esa forma, permites que este sitio web siga aportando más contenido gratuito y de calidad.

[sociallocker id=»948″]

Script Principal

%% Resolución de Ecuaciones Diferenciales Matlab
% Modelo de  Van der Pol
% by: Sergio Andres Castaño Giraldo
% https://controlautomaticoeducacion.com/matlab/
% youtube.com/c/SergioACastañoGiraldo


clc
clear 
close all

%% Caso 1 - No Rígido
x0 = [2 0]; %Condición Inicial
mu=1;
tspan=[0 30];
u=0;

%Solución de la EDO
[ts,y] = ode45(@(t,x)VanDerPol(t,x,u,mu),tspan,x0);

figure
subplot(1,2,1)
plot(ts,y(:,1))
title('x_1')
subplot(1,2,2)
plot(ts,y(:,2))
title('x_2')

%% Caso 1 - Rígido
x0 = [2 0]; %Condición Inicial
mu=1000;
tspan=[0 6000];
u=0;

%Solución de la EDO
[ts,y] = ode15s(@(t,x)VanDerPol(t,x,u,mu),tspan,x0);

figure
subplot(1,2,1)
plot(ts,y(:,1))
title('x_1')
subplot(1,2,2)
plot(ts,y(:,2))
title('x_2')

Función de Van der Pol en Matlab

function dx = VanDerPol(t,x,u,mu)
% Modelo de  Van der Pol
% by: Sergio Andres Castaño Giraldo
% https://controlautomaticoeducacion.com/matlab/
% youtube.com/c/SergioACastañoGiraldo

%Estados
x1 = x(1);
x2 = x(2);

%entradas

%ecuaciones diferenciales
dx1 = x2;
dx2 = mu*(1-x1^2)*x2-x1;

dx=[dx1;dx2];

[/sociallocker]

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.