Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
MATLAB
Races de ecuaciones
Sistemas de ecuaciones
Valores y vectores
propios
Integracin numrica
Ecuaciones
diferenciales
Interpolacin,
regresin
Numrico
Mtodo de Euler
Vamos aresolver la ecuacin diferencial de primer orden
dx
= f (t, x)
dt
con con la condicin inicial de que en el instante t0 la posicin es x0
La primera derivada nos permite conocer la posicin xi+1 en el instante ti+1, a partir de la posicin xi en el instante
ti de acuerdo a la frmula siguiente. La lnea de color rojo es la tangente a la curva en el instante ti
xi+1=xi+f(ti,xi)h
El procedimiento de Euler produce un error que se acumula a cada paso h de integracin, que es el segmento en
color azul que une los dos puntos en la figura.
Escribimos una funcin denominada euler, a la que le pasaremos:
la funcin f(t,x),
la condicin inicial de que en el instante t0 la posicin es x0,
el instante final tf
el nmero de pasos de integracin n
y nos devolver un vector t y su correspondiente vector x.
function [t,x] =euler(f,t0,tf,x0,n)
h=(tf-t0)/n;
t=t0:h:tf;
x=zeros(n+1,1); %reserva memoria para n+1 elementos del vector x
x(1)=x0;
for i=1:n
x(i+1)=x(i)+f(t(i),x(i))*h;
end
end
cos tdt
x = sin t
Tomamos un intervalo h=/6, y construimos la siguiente tabla
t
0
/6
/3
/2
2/3
5/6
dx
= cos t
dt
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=sin
t
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
Hay diferencia entre la solucin exacta y la obtenida mediante integracin numrica por el mtodo de Euler
Mtodo de Runge-Kutta
En esta seccin vamos a estudiar la aplicacin del mtodo de Runge-Kutta a:
Una ecuacin diferencial de primer orden
Un sistema de dos ecuaciones diferenciales de primer orden
Una ecuacin difrencial de segundo orden
Un sistema de dos ecuaciones diferenciales de segundo orden
k2 = hf (t +
k3 = hf (t +
1
2
1
2
h, x +
h, x +
k4 = hf (t + h, x + k3 )
x(t + h) = x(t) +
k1 )
k2 )
1
k + 2k 2 + 2k3 + k4 )
6 ( 1
Definimos la funcin rk_1 que resuelve la ecuacin diferencial de primer orden, cuando le pasamos:
la funcin f(t,x),
dq
1
t
=
dtq = C V (1 exp(
CV q
RC
RC ))
0
dy
= g(t, x, y)
dt
k1 = hf (t, x, y)
l 1 = hg(t, x, y)
k2 = hf (t +
k3 = hf (t +
1
2
1
2
h, x +
h, x +
k1 , y +
k2 , y +
k4 = hf (t + h, x + k3 , y + l 3 )
x(t + h) = x(t) +
l1 , )
l2 )
1
k + 2k 2 + 2k3 + k4 )
6 ( 1
l 2 = hg (t +
l 3 = hg (t +
1
2
1
2
h, x +
h, x +
k1 , y +
k2 , y +
l 4 = hg (t + h, x + k 3 , y + l 3 )
y(t + h) = y(t) +
l1 )
l2 )
1
l + 2 l 2 + 2l 3 + l 4 )
6 (1
Definimos la funcin rk_2_1 que resuelve el sistema de dos ecuaciones diferenciales de primer orden, cuando le
pasamos:
Consideremos una serie radioactiva de tres elementos A-->B-->C en la que, una sustancia radiactiva A se
desintegra y se transforma en otra sustancia radiactiva B, que a su vez se desintegra y se transforma en una
sustancia C estable. Las ecuaciones diferenciales que gobiernan el proceso y sus soluciones analticas son,
respectivamente,
dx
= axx = x 0 exp(at)
dt
dy
a
x exp(at) exp(bt))
= ax byy =
dt
ba 0(
La solucin analtica que aparece a la derecha, se ha obtenido con las condiciones iniciales t=0, x=x0 e y=0. La
segunda solucin se obtiene siempre que a sea distinto de b. En el caso de que a sea igual a b, la solucin
analtica para y es
y = x 0 a exp(at)
La interpretacin del sistema de ecuaciones diferenciales no es complicada. En la unidad de tiempo, desaparecen
ax ncleos de la sustancia A al desintegrarse (primera ecuacin). En la unidad de tiempo, se producen ax ncleos
de la sustancia B y a su vez desaparecen bx ncleos de la sustancia B, que al desintegrarse se transforman en
ncleos de la sustancia C estable (segunda ecuacin).
Escribimos el script radioactivo en el que definiremos las funciones f(t,x,y), g(t,x,y), las condiciones iniciales y
llamaremos a la funcin rk_2_1
a=input('parmetro a: ');
b=input('parmetro b: ');
x0=input('valor inicial de x: ');
y0=input('valor inicial de y: ');
tf=input('tiempo final, tf: ');
n=input('nmero de pasos, n: ');
f=@(t,x,y) -a*x;
g=@(t,x,y) a*x-b*y;
%condiciones iniciales
t0=0;
[t,x,y]=rk_2_1(f,g,t0,tf,x0,y0,n);
hold on
plot(t,x,'b')
plot(t,y,'r')
xlabel('t')
ylabel('x,y');
legend('x(t)','y(t)')
title('dx/dt=-ax, dy/dt=ax-by')
hold off
parmetro b: .2
valor inicial de x: 100
valor inicial de y: 0
tiempo final, tf: 10
nmero de pasos, n: 40
Una ecuacin diferencial de segundo orden es equivalente a un sistema de dos ecuaciones diferenciales de primer
orden, por lo que aplicaremos el mismo esquema.
dx
=v
dt
dv
= f (t, x, v)
dt
k1 = hv
l 1 = hf (t, x, v)
k2 = h (v +
k3 = h (v +
1
2
1
2
l1 )
l2 )
k4 = h (v + l 3 )
x(t + h) = x(t) +
1
k + 2k 2 + 2k3 + k4 )
6 ( 1
l 2 = hf (t +
l 3 = hf (t +
1
2
1
2
h, x +
h, x +
k1, v +
k2, v +
l 4 = hf (t + h, x + k 3 , v + l 3 )
v(t + h) = v(t) +
l1 )
l2 )
1
l + 2 l 2 + 2l 3 + l 4 )
6 (1
Definimos la funcin rk_2 que resuelve la ecuacin diferencial de segundo orden, cuando le pasamos:
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 t
comprendido 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
La ecuacin diferencial que describe un oscilador armnico amortiguado y su solucin para unas condiciones
iniciales fijadas es
d 2x
dx
+
2
+ 20 x = 0
2
dt
dt
2 2
=
0
x = exp(t) (A sin(t) + B cos(t))
dx
v=
= exp(t) (A sin(t) + B cos(t)) + exp(t) (A cos(t) B sin(t))
dt
v 0 + x 0
x = exp(t) (
sin(t) + x 0 cos(t))
Escribimos el script oscilador en el que definiremos la funcin f(t,x,v), las condiciones iniciales y llamaremos a la
funcin rk_2
w0=input('frecuencia angular w0: ');
g=input('rozamiento, gamma: ');
x0=input('posicin inicial, x0: ');
v0=input('velocidad inicial,v0: ');
tf=input('tiempo final, tf: ');
n=input('nmero de pasos, n: ');
f=@(t,x,v) -2*g*v-w0*w0*x;
%condiciones iniciales
t0=0;
hold on
%solucin numrica
[t,x,v]=rk_2(f,t0,tf,x0,v0,n);
plot(t,x,'b')
%solucin analtica
w=sqrt(w0*w0-g*g);
x=((v0+g*x0)*sin(w*t)/w+x0*cos(w*t)).*exp(-g*t);
plot(t,x,'r')
grid on
xlabel('t')
ylabel('x');
legend('aproximado','exacto')
title('oscilador amortiguado')
hold off