Académique Documents
Professionnel Documents
Culture Documents
1
comportamiento del sistema bajo ciertas condiciones. Así, en un sistema tan
simple como un péndulo, la amplitud de la oscilación ha de ser pequeña y el
rozamiento ha de ser despreciable, para obtener una solución sencilla que
describa aproximadamente su movimiento periódico.
Método de EULER
Fórmulas usadas:
yi+1 = yi + h f(xi,yi) xi+1 = xi + h
Donde:
i=0, 1, 2, 3,…
h = tamaño del incremento con x
f(xi,yi) = segundo miembro de la ED de primer orden cuando tiene la forma:
dy/dx = f(x,y)
2
Esta fórmula es conocida como el método de Euler (punto medio). Se predice un
nuevo valor de Y por medio de la pendiente (igual a la primera derivada en el valor
original de X).
Pasos:
3
y0=5
h=0.1
iii. Planteamos la ecuación de Euler utilizando los datos iniciales:
y0+1 = y0 + h f(x0,y0)
y1 = y0 + h (2x0–3y0+1)
y1 = 5+(0.1)(2(1)–3(5)+1)
iv. Desarrollamos hasta el valor buscado en x, en este caso: x=1.2 (límite
superior del intervalo).
x1 = x0 + h = 1 + 0.1 = 1.1
y1 = 5+(0.1)(2–15+1)
y1 = 5+(0.1)(–12)
y1 = y(1.1) = 3.8000
NOTA: Primero observamos que esta ecuación sí puede resolverse por métodos
tradicionales de ecuaciones diferenciales. Por ejemplo, podemos aplicar el método
de separación de variables. Veamos las dos soluciones.
Solución Analítica:
Solución Numérica:
Aplicamos el método de Euler y para ello, observamos que la distancia entre x0=0
y x1=0.5 no es lo suficientemente pequeña. Si dividimos esta distancia entre cinco
4
obtenemos un valor de h=0.1 y por lo tanto, obtendremos la aproximación
deseada en cinco pasos.
De esta forma, tenemos los siguientes datos:
x0=0
y0=1
h=0.1
f(x,y)=2xy
Sustituyendo estos datos en la fórmula de Euler, tenemos, en un primer paso:
x1 = x0+h = 0.1
y1 = y0+h f(x0,y0) = 1+0.1*(2*0*1) = 1
n xn yn
0 0 1
1 0.1 1
2 0.2 1.02
3 0.3 1.0608
4 0.4 1.12445
5 0.5 1.2144
Puesto que en este caso, conocemos el valor verdadero, podemos usarlo para
calcular el error relativo porcentual que se cometió al aplicar la fórmula de Euler.
Tenemos que:
lϵvl = abs((1.28402 – 1.2144)/1.28402)*100% = 5.42%
Este método se basa en la misma idea del método anterior, pero hace un
refinamiento en la aproximación, tomando un promedio entre ciertas pendientes.
La fórmula es la siguiente:
5
Donde
Solución:
Vemos que este es el mismo ejercicio del método anterior. Así que definimos
h=0.1 y encontraremos la aproximación después de cinco iteraciones. A diferencia
del método de Euler 1, en cada iteración requerimos de dos cálculos en vez de
uno solo: el de yn* primero y posteriormente el de yn.
Para aclarar el método veamos con detalle las primeras dos iteraciones. Primero
que nada, aclaramos que tenemos los siguientes datos iniciales:
6
x0=0
y0=1
h=0.1
f(x,y)=2xy
Nótese que el valor de y1* coincide con el y1 (Euler 1), y es el único valor que va a
coincidir, pues para calcular y2* se usará y1 y no y1*
n xn yn
0 0 1
1 0.1 1.01
2 0.2 1.040704
3 0.3 1.093988
4 0.4 1.173192
5 0.5 1.28336
7
6.2 Método de Runge Kutta de cuarto orden
Los métodos de Runge kutta tienen el error local de truncamiento del mismo orden
que los métodos de Taylor, pero prescinden del cálculo y evaluación de las
derivadas de la función f(t,y).
En esta expresión las ponderaciones wi, i = 1,...,m son constantes para las que en
general se pide que su suma sea igual a 1, es decir, w1+w2+...+wm = 1, y cada kj
es la función f evaluada en un punto seleccionado (t,y) para el cual ti≤t≤ti+1. Se
mostrará que los kj se definen en forma recursiva.
8
Runge-Kutta de primer orden.
y teniendo en cuenta que yi=y(ti), resulta k1= f(ti,yi), obteniendo así la fórmula de
Euler yi+1 = yi + h f(ti,yi). Por lo tanto, se dice también que el método de Euler es
un método de Runge Kutta de primer orden.
Donde
donde el subíndice i indica que todas las derivadas están evaluadas en el punto
(ti,yi).
Reemplazando k1 y teniendo en cuenta la expresión de k2, tenemos que:
9
Por otro lado, se hace un desarrollo de Taylor de orden 3 de la función y(t),
calculado en el punto ti+1, obteniendo:
Sucede que se tienen cuatro incógnitas, pero tres ecuaciones, con lo que queda
un grado de libertad en la solución del sistema. Se trata de usar este grado de
libertad para hacer que los coeficientes de h3 en las expresiones coincidan. Esto
obviamente no se logra para cualquier f.
10
Runge-Kutta de cuarto orden.
11
Ejercicio: Con el método RK4, obtener una aproximación del valor de y(1.5) para
el siguiente problema de valor inicial, tomando un paso h = 0.1.
h=(xN-x0)/N
Resulta entonces,
12
Al analizar la tabla anterior y comparar los resultados obtenidos con el método
RK4 con los valores reales, se ve por qué es tan difundido este método. En la
próxima tabla se comparan los métodos de Euler y Runge Kutta de orden 4 para el
mismo problema.
dx/dt = f(t,x,y)
dy/dt = g(t,x,y)
13
se esquematiza en la tabla adjunta. Como vemos además de los cuatro números
k1, k2, k3, k4 para la primera ecuación diferencial precisamos otros cuatro números
l1, l2, l3, l4 para la segunda ecuación diferencial. A partir del valor de x en el
instante t, se determina el valor de x en el instante t+h, y a partir del valor de y en
el instante t se determina el valor de y en el instante t+h mediante las fórmulas de
la última fila de la tabla.
Nos devuelve los vectores x e y para cada instante que se guarda en el vector t
comprendido entre el instante inicial t0 y el final tf.
for i=1:n
k1=h*f(t(i),x(i),y(i));
l1=h*g(t(i),x(i),y(i));
k2=h*f(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
l2=h*g(t(i)+h/2,x(i)+k1/2,y(i)+l1/2);
k3=h*f(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
l3=h*g(t(i)+h/2,x(i)+k2/2,y(i)+l2/2);
k4=h*f(t(i)+h,x(i)+k3,y(i)+l3);
l4=h*g(t(i)+h,x(i)+k3,y(i)+l3);
x(i+1)=x(i)+(k1+2*k2+2*k3+k4)/6;
y(i+1)=y(i)+(l1+2*l2+2*l3+l4)/6;
end
end
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 analíticas son,
respectivamente,
14
dx/dt = −ax x = x0 e−at
y=x0 a e−at
a=input('parámetro a: ');
b=input('parámetro b: ');
x0=input('valor inicial de x: ');
y0=input('valor inicial de y: ');
tf=input('tiempo final, tf: ');
n=input('número 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
15
>> radioactivo
parámetro a: 0.1
parámetro b: .2
valor inicial de x: 100
valor inicial de y: 0
tiempo final, tf: 10
número de pasos, n: 40
d2x/dt2 = f(t,x,v)
16
Definimos la función rk_2 que resuelve la ecuación diferencial de segundo orden,
cuando le pasamos:
• la función f (t,x,v)
• las condiciones iniciales: posición inicial x0 y velocidad inicial v0 en el
instante t0
• el número n de pasos de integración 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 elementos del
vector 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
2
d2x/dt2 + 2 ץdx/dt + ω x=0
0
2
ω = √ω − ץ2
0
17
v= dx/dt = − ץe−ץt (A sin(ωt)+B cos(ωt))+ω e−γt (A cos(ωt)−B sin(ωt))
x0 = B
t=0
v0 = − ץB+ωA
18
rozamiento, gamma: 0.5
posición inicial, x0: 1.5
velocidad inicial, v0: 0
tiempo final, tf: 8
número de pasos, n: 100
Mecánica
19
objetos de dimensiones atómicas, necesitamos establecer un conjunto de leyes
denominadas mecánica cuántica
Circuitos eléctricos
Así como la mecánica tiene como base fundamental las leyes de Newton, la
electricidad también tiene una ley que describe el comportamiento de los circuitos
eléctricos, conocida como la ley de Kirchhoff. Realmente, la teoría de la
electricidad está gobernada por un cierto conjunto de ecuaciones conocidas en la
teoría electromagnética como las ecuaciones de Maxwell. La ley de Kirchhoff es
adecuada para estudiar las propiedades simples de los circuitos eléctricos. El
circuito eléctrico más simple es un circuito en serie, en el cual tenemos una fem
(fuerza electromotriz), la cual actúa como una fuente de energía tal como una
batería o generador, y una resistencia, la cual consume o usa energía, tal como
una bombilla eléctrica, tostador, u otro electrodoméstico.
Circuitos más complicados, pero para muchos casos más prácticos, son circuitos
que contienen otros elementos distintos a resistencias. Dos elementos importantes
son inductores y condensadores. Un inductor se opone a cambios en corriente.
Tiene un efecto de inercia en electricidad de la misma manera que una masa tiene
un efecto de inercia en mecánica. Un condensador es un elemento que almacena
energía.
Considere una pieza de material de longitud indefinida acotada por dos planos
paralelos A y B, según la figura, suponiendo que el material es uniforme en todas
sus propiedades, por ejemplo, calor específico, densidad, etc.
20
Considerando que los planos A y B se mantienen a 50º C y 100ºC,
respectivamente, todo punto en la región entre A y B alcanza cierta temperatura
que no cambia posteriormente. Así todos los puntos en el plano C entre A y B
estarán a 75ºC,y en el plano E a 90ºC. Cuando la temperatura en cada punto de
un cuerpo no varía con el tiempo decimos que prevalecen las condiciones de
estado estacionario o que tenemos un flujo de calor en estado estacionario.
La ecuación diferencial dt/dy = ay nos dice que la variación con el tiempo de una
cantidad y es proporcional a y. Si la constante de proporcionalidad a es positiva
siendo y positivo, entonces dy/dt es positivo e y aumenta. En este caso hablamos
de que y crece, y el problema es de crecimiento. Por otro lado, si a es negativo
siendo y positivo, entonces dy/dt es negativo e y decrece. Aquí el problema es uno
que involucra decrecimiento.
El cable colgante.
21
Considere aquella parte del cable entre el punto más bajo y cualquier punto P en
el cable con coordenadas (x, y). Esta parte estará en equilibrio debido a la tensión
T en P (según la segunda figura), la fuerza horizontal H en C, y la carga vertical
total en el segmento CP del cable denotada por W(x), la cual asumimos que actúa
en algún punto Q, no necesariamente en el centro del arco CP. Para el equilibrio,
la suma algebraica de las fuerzas en la dirección x (u horizontal) debe ser igual a
cero, y la suma algebraica de fuerzas en el eje y (o vertical) debe ser igual a cero.
Otra forma de indicar lo mismo es que la suma de fuerzas hacia la derecha debe
ser igual a la suma de las fuerzas hacia la izquierda, y la suma de fuerzas hacia
arriba debe ser igual a la suma de fuerzas hacia abajo. Descomponemos la
tensión T en dos componentes (líneas punteadas en la figura), la componente
horizontal con magnitud TcosØ, y la componente vertical con magnitud TsenØ.
22
La resonancia mecánica.
La resonancia mecánica puede también servir para propósitos útiles. Por ejemplo,
si un automóvil se quedara atascado en la nieve (o barro), puede, al “mecerlo”, ser
puesto a vibrar con su frecuencia natural. Entonces, al aplicarle una fuerza con
esta misma frecuencia, la resonancia mecánica resultante puede ser algunas
veces suficiente para liberarlo.
23
• x0 es un vector que contiene los valores iniciales.
• options es una estructura que se crea con la función odeset, que
explicaremos al final de esta página ya que es un asunto bastante
complicado.
• params son parámetros que queremos pasar a la función odefun
Rdq/dt = Vε/R−q/CR
V0=10;
R=input('Resistencia R: ');
C=input('Capacidad C: ');
tf=input('tiempo final, tf: ');
f=@(t,x) V0/R-x/(R*C);
tspan=[0 tf];
x0=0;
[t,x]=ode45(f,tspan,x0);
plot(t,x,'r')
xlabel('t')
ylabel('q');
title('carga del condensador')
>> carga_1
Resistencia R: 2
Capacidad C: 0.8
tiempo final, tf: 10
dx/dt = −ax
dy/dt = ax−by
tspan=[0 tf];
fg=@(t,x) [-a*x(1);a*x(1)-b*x(2)];
[t,x]=ode45(fg,tspan,x0);
plot(t,x)
xlabel('t')
ylabel('x,y');
title('dx/dt=-ax, dy/dt=ax-by')
25
function z=func_radioactivo(t,x,a,b)
z=[-a*x(1);a*x(1)-b*x(2)]; % x(1) es x, x(2) es y
end
27
(posición, velocidad) en el vector xe. Finalmente, ie es un índice que es útil cuando
se vigilan varios eventos.
3.-Le pasamos opts a la función ode45 en su cuarto parámetro
[t,x,te,xe,ie]=ode45(odefunc,tspan,x0,opts);
Escribimos el script oscilador_2 para resolver la ecuación diferencial de segundo
orden y detener el proceso de integración de acuerdo con lo estipulado en el
parámetro opts.
w0=2;
g=0.25;
x0=[2.5 0];
tf=10;
f=@(t,x) [x(2);-2*g*x(2)-w0*w0*x(1)];
tspan=[0 10];
opts=odeset('events',@opcion_ode45);
[t,x,te,xe,ie]=ode45(f,tspan,x0,opts);
te,xe,ie
plot(t,x(:,1),'r')
grid on
xlabel('t')
ylabel('x');
title('oscilador amortiguado')
28
Definimos una nueva versión de la función opcion1_ode45
function [detect,stopin,direction]=opcion1_ode45(t,x)
detect=[x(1) x(2)]; %[posición, velocidad]
stopin=[0 0];
direction=[0 0];
end
Creamos la estructura opts mediante odeset y se la pasamos al procedimiento de
integración ode45.
w0=2;
g=0.25;
x0=[2.5 0];
tf=10;
f=@(t,x) [x(2);-2*g*x(2)-w0*w0*x(1)];
tspan=[0 7];
opts=odeset('events',@opcion1_ode45);
[t,x,te,xe,ie]=ode45(f,tspan,x0,opts);
hold on
plot(t,x(:,1),'r')
plot(te(ie==1),xe(ie==1),'o','markersize',6,'markerface
color','k')
plot(te(ie==2),xe(ie==2),'o','markersize',6,'markerface
color','b')
grid on
xlabel('t')
ylabel('x');
title('oscilador amortiguado')
hold off
29
Si solamente estamos interesados en los máximos definimos una nueva versión
de la función opcion2_ode45
function [detect,stopin,direction]=opcion2_ode45(t,x)
detect=x(2);
stopin=0;
direction=-1;
end
30
dx/dt = −σx+σy
dy/dt = ρx−y−xz
dz/dt = −βz+xy
donde σ=10, β=8/3 y ρ=28
function fg=lorentz(t,x,p)
%x(1) es x, x(2) es y y x(3) es z
% p(1) es sigma, p(2) es beta y p(3) es rho
fg=[-p(1)*x(1)+p(1)*x(2); p(3)*x(1)-x(2)-x(1)*x(3); -p(2)*x(3)+x(1)*x(2)];
end
31
ylabel('z');
title('Atractor de Lorentz')
figure
subplot(3,1,1)
plot(t,x(:,1))
ylabel('x');
subplot(3,1,2)
plot(t,x(:,2))
ylabel('y');
subplot(3,1,3)
plot(t,x(:,3))
ylabel('z');
xlabel('t')
>> lorentz_script
32