Ecuaciones diferenciales en Matlab
En este documento veremos un resumen de las ecuaciones diferenciales en el entorno de Matlab.
A lo largo del documento trabajaremos con la ecuación:
Resolución simbólica de EDOs
La resolución simbólica nos permite encontrar la solución exacta de una EDO. Para ello, deberemos:
1- definir las variables dependiente e independiente mediante el comando syms
syms y(x)
2- definir la EDO
edo_ana = diff(y,x)==3*y-x*y;
3- usar el comando dsolve para encontrar la solución de la ecuación
sol_ana=dsolve(edo_ana,cond)
sol_ana =
Si además nos dan condiciones iniciales, podemos añadir un nuevo paso 3 como
3- definir las condiciones iniciales
cond= y(1)==3;
4- y de nuevo aplicar el comando dsolve
sol_ana=dsolve(edo_ana,cond)
sol_ana =
Resolución numérica de EDOs
Para resolver numéricamente una EDO deberemos seguir pasos parecidos a la resolución analítica. Sin
embargo, deberemos usar las funciones propias de la resolución numérica.
1- Definimos la ecuación diferencial
1
edo_num= @(x,y) 3*y-x*y;
2- Definimos el instante de tiempo inicial y todos aquellos de los que queremos la solución.
tiempos= 1:0.1:3;
3- Definimos la ocndición inicial para la variable dependiente
var_dep= 3;
4- calculamos la solución del a ecuación diferencial
[xi,yi]=ode45(edo_num,tiempos,var_dep)
xi = 21×1
1.0000
1.1000
1.2000
1.3000
1.4000
1.5000
1.6000
1.7000
1.8000
1.9000
yi = 21×1
3.0000
3.6459
4.3869
5.2258
6.1633
7.1966
8.3196
9.5221
10.7899
12.1049
Alternativamente, podemos definir la ecuación diferencial mediante una función. Para ello, vamos a generar un
nuevo archivo mediante New-> Function. Copia la función siguiente:
function [xs] = edo_script(x,y)
%EDO_EJ3 ecuación diferencial del ejemplo 3 del tema 4 (Mat 3 - GOI)
% xs es la variable de salida.
% x es la variable de entrada
xs = 3*y-x*y;
end
Una vez definido generado el archivo y guardado podemos continuar como:
2- Definimos el instante de tiempo inicial y todos aquellos de los que queremos la solución.
2
tiempos= 1:0.1:3;
3- Definimos la ocndición inicial para la variable dependiente
var_dep= 3;
4- calculamos la solución del a ecuación diferencial
[xi,yi]=ode45(@edo_script,tiempos,var_dep)
xi = 21×1
1.0000
1.1000
1.2000
1.3000
1.4000
1.5000
1.6000
1.7000
1.8000
1.9000
yi = 21×1
3.0000
3.6459
4.3869
5.2258
6.1633
7.1966
8.3196
9.5221
10.7899
12.1049
Representación gráfica
Para realizar la representación gráfica vamos a utilizar las funciones fplot (para las soluciones analíticas) y
plot (para la solución numérica). También usaremos el comando hold on para realizar la gráfica de las dos
funciones en el mismo diagrama
Representamos la solución analítica
fplot(sol_ana,[0 3])
Indicamos a Matlab que queremos dibujar una nueva gráfica en la misma ventana
hold on
Represetnamos la solución numérica
plot(xi,yi)
3
Indicamos que ya hemos acabado de representar todas las funciones
hold off
añadimos la leyenda de las gráficas
legend(["analítica","numérica"])
Comparación de resultados
Finalmente, podemos comparar los resultados obtenidos mediante los dos métodos.
Primero calculamos los valores de la solución analítica en los puntos xi en los que tenemos la aproximación de
la solución numérica. Para ello usamos la función subs que nos permite substituir en una expresión simbólica
una variable por un valor. Si el nuevo valor es un vector, hara tantas substituciones como valores tiene el
vector.
so_an_i=subs(sol_ana,x,xi); %encontramos los valores en xi
A continuación calculamos la diferencia entre la solución analítica y la numérica.
dif_i=so_an_i-yi; %calculamos la diferencia
4
Finalmente dibujamos al gráfica de las diferencias para ver la evolución del error de la solución numérica..
plot(xi,dif_i) %realizamos la representación gráfica