Solución Numérica de Ecuaciones Diferenciales
Solución Numérica de Ecuaciones Diferenciales
Solución Numérica de Ecuaciones Diferenciales
diferenciales (I)
Las leyes que gobiernan los fenmenos de la naturaleza se expresan
habitualmente en forma de ecuaciones diferenciales. Las ecuaciones del
movimiento de los cuerpos (la segunda ley de Newton) es una ecuacin
diferencial de segundo orden, como lo es la ecuacin que describe los sistemas
oscilantes, la propagacin de las ondas, la transmisin del calor, la difusin, el
movimiento de partculas subatmicas, etc.
Pocas ecuaciones diferenciales tienen una solucin analtica sencilla, la mayor
parte de las veces es necesario realizar aproximaciones, estudiar el
comportamiento del sistema bajo ciertas condiciones. As, en un sistema tan
simple como un pndulo, la amplitud de la oscilacin ha de ser pequea y el
rozamiento ha de ser despreciable, para obtener una solucin sencilla que
describa aproximadamente su movimiento peridico.
Se estudia el procedimiento de Runge-Kutta que se aplica de forma directa a
una ecuacin diferencial de primer orden, pero veremos como se extiende a un
sistema de ecuaciones de primer orden, a un ecuacin diferencial de segundo
orden y a un sistema de ecuaciones diferenciales de segundo orden.
El procedimiento de Runge-Kutta se puede programar fcilmente en los
ordenadores y adems, se emplea mucho en la prctica, debido a la su
exactitud relativamente elevada de la solucin aproximada de la ecuacin
diferencial. La justificacin del procedimiento de Runge-Kutta no es sencilla,
el lector interesado puede consultar algn libro de mtodos numricos de
anlisis.
Mtodo de Euler
Vamos aresolver la ecuacin diferencial de primer orden
dxdt=f(t,x)
la funcin f(t,x),
el instante final tf
x0= cos ( t ) dt
0
x=sin ( t )
dx/dt=cost
1
0.866
0.5
0
-0.5
-0.866
x(Euler)
0
0.523
0.977
1.239
1.239
0.977
0.523
x=sint
0
0.5
0.866
1
0.866
0.5
0
Esta tabla nos ilustra el modo de aplicar el mtodo de Euler a una ecuacin
diferencial de primer orden. Para aplicar el mtodo de Euler precisamos de un
paso h pequeo, incluso as los errores se van acumulando y al cabo de cierto
tiempo la diferencia entre el valor exacto y el calculado es grande.
Escribimos en script euler_script en el que definiremos la funcin f(t,x), las
condiciones iniciales y llamaremos a la funcin euler. Finalmente,
representaremos grficamente la solucin exacta y la obtenida aplicando el
mtodo de Euler
tf=input('tiempo final, tf: ');
n=input('nmero de pasos, n: ');
f=@(t,x) cos(t);
%condiciones iniciales
t0=0;
x0=0;
[t,x]=euler(f,t0,tf,x0,n);
hold on
plot(t,x,'b')
y=sin(t);
plot(t,y,'r')
xlabel('t')
ylabel('x');
legend('aproximada','exacta')
title('dx/dt=cost')
hold off
>> euler_script
tiempo final, tf: pi
nmero de pasos, n: 40
Mtodo de Runge-Kutta
En esta seccin vamos a estudiar la aplicacin del mtodo de Runge-Kutta a:
la funcin f(t,x),
el instante final tf
end
end
2.
El tiempo final, tf
el nmero de pasos, n.
3.
4.
5.
6.
el valor inicial de x es x0
el valor inicial de y es y0
y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6;
end
end
hold off
la funcin f (t,x,v)
las condiciones iniciales: posicin inicial x0 y velocidad inicial v0 en el
instante t0
el nmero n de pasos de integracin entre t0 y el tiempo final tf
Nos devuelve los vectores de las posiciones x y las velocidades v para cada
instante que se guarda en el vector tcomprendido entre el instante inicial t0 y el
final tf.
function [t,x,v] =rk_2(f,t0,tf,x0,v0,n)
h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 element(i)os del
vect(i)or x(i)
v=zeros(n+1,1);
x(1)=x0; v(1)=v0;
for i=1:n
k1=h*v(i);
l1=h*f(t(i),x(i),v(i));
k2=h*(v(i)+l1/2);
l2=h*f(t(i)+h/2,x(i)+k1/2,v(i)+l1/2);
k3=h*(v(i)+l2/2);
l3=h*f(t(i)+h/2,x(i)+k2/2,v(i)+l2/2);
k4=h*(v(i)+l3);
l4=h*f(t(i)+h,x(i)+k3,v(i)+l3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
v(i+1)=v(i)+(l1+2*l2+2*l3+l4)/6;
end
end