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:
donde V es un vector con las funciones del sistema. En otras palabras, el sistema debe estar en un formato como
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.
Solver | Tipo de Problema | Exactitud | Cuando Usar |
ode45 | No Rígido | Media | La mayor parte del tiempo ode45 debería ser el primer solucionador que intentes. |
ode23 | No Rígido | Baja | ode23 puede ser más eficiente que ode45 en problemas con tolerancias crudas, o en presencia de rigidez moderada. |
ode113 | No Rígido | Baja a Alta | ode113 puede ser más eficiente que ode45 en problemas con tolerancias de error estrictas, o cuando la función ODE es costosa de evaluar. |
ode15s | Rigidos | Baja a Media | Pruebe 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). |
ode23s | Rigidos | Baja | ode23s 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. |
ode23t | Rigidos | Baja | Use 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). |
ode23tb | Rigidos | Baja | Al igual que ode23s, el solucionador ode23tb podría ser más eficiente que ode15s en problemas con tolerancias de error crudas. |
ode15i | Completamente implicito | Baja | Use 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:
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:
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
reescribiendo la ecuación diferencial en dos ecuaciones de primer orden:
Solución NO Rígida
Para el sistema de Van der Pol no ser rígido, se establecen las siguientes condiciones iniciales:
Solución Rígida
Para el sistema de Van der Pol ser rígido, se establecen las siguientes condiciones iniciales:
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.
Mi nombre es Sergio Andres Castaño Giraldo, y en este sitio web voy a compartir una de las cosas que mas me gusta en la vida y es sobre la Ingeniería de Control y Automatización. El sitio web estará en constante crecimiento, voy a ir publicando material sobre el asunto desde temas básicos hasta temas un poco más complejos. Suscríbete al sitio web, dale me gusta a la página en Facebook y únete al canal de youtube. Espero de corazón que la información que comparto en este sitio, te pueda ser de utilidad. Y nuevamente te doy las gracias y la bienvenida a control automático educación.