Beruflich Dokumente
Kultur Dokumente
Departamento de Matemtica
Laboratorio de Computacin para las Aplicaciones de la Matemtica en Ingeniera
26 de junio de 2017
1
Departamento de Matemticas U.T.F.S.M Anlisis Numrico Mat-270
ndice
1. APROXIMACION DE SOLUCIONES DE ECUACIONES Y SISTEMAS DE DIFE-
RENCIALES ORDINARIAS CON ALGORITMOS DE ORDEN UNO Y DOS 3
1.1. Mtodo de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2. Mtodo de Euler-Cauchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. APROXIMACIN DE SOLUCIONES DE SISTEMAS DE ECUACIONES DIFEREN-
CIALES ORDINARIAS 7
2.1. Mtodo de Runge-Kutta de orden 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2. Mtodo de Runge-Kutta de orden 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3. Mtodo de Adams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3. PROBLEMAS A VALORES EN LA FRONTERA PARA ECUACIONES DIFEREN-
CIALES ORDINARIAS (Opcional) 11
3.1. Mtodo del disparo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
4. INESTABILIDAD DEL METODO DE MILNE 15
4.1. Mtodo de Milne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
NOTA: observar que mediante la aplicacin de este mtodo, la resolucin de la ecuacin diferencial an-
terior se reduce al clculo de valores de una sucesin, iniciada por el valor denido "y(x0 )"
Ejemplos
f=@(t,y) y-t.^2+t-1.25;
a=0;
b=2;
Ahora denamos el paso (para este caso usaremos 0.1) y el valor inicial dado, dado que obtendremos una
sucesin de puntos, es conveniente utilizar un arreglo para "guardar"los valores de ", es decir y(1) = y0
2
h=0.1;
y(1)=1.25;
Con esto podemos aplicar fcilmente la frmula de Euler al problema dado utilizando la forma anterior y
un comando para realizar un loop, deniendo los valores de "t"previamente utilizando la informacin del
dominio y el paso.
t=a:h:b;
n=length(t);
for i=1:n-1
y(i+1)=y(i)+h*(f(t(i),y(i)));
end
As obtuvimos los valores de "para todo el recorrido "t"[0,2]. Ahora contrastemos la solucin obtenida
2
real=@(t)(t+0.5).^2-exp(t)+2
plot(t,real(t),'o',t,y,'r-')
clear y
y(1)=1.25;
h=0.05;
t=a:h:b;
n=length(t);
for i=1:n-1
y(i+1)=y(i)+h*(f(t(i),y(i)));
end
plot(t,real(t),'o',t,y,'r-')
fy=@(y,z) -0.7*y+0.5*z;
fz=@(y,z) 0.2*y-0.5*z;
Ahora realizamos una operacin anloga al ejercicio anterior para pasos h= 0.1, 0.05 y 0.01 , para un
dominio t entre 0 y 2.
a=0;
b=2;
h=[0.1 0.05 0.01];
j=1;
y1(1)=0;
z1(1)=2;
t1=a:h(j):b;
n=length(t1);
for i=1:n-1
y1(i+1)=y1(i)+h(j)*(fy(y1(i),z1(i)));
z1(i+1)=z1(i)+h(j)*(fz(y1(i),z1(i)));
end
j=2;
y2(1)=0;
z2(1)=2;
t2=a:h(j):b;
n=length(t2);
for i=1:n-1
y2(i+1)=y2(i)+h(j)*(fy(y2(i),z2(i)));
z2(i+1)=z2(i)+h(j)*(fz(y2(i),z2(i)));
end
j=3;
y3(1)=0;
z3(1)=2;
t3=a:h(j):b;
n=length(t3);
for i=1:n-1
y3(i+1)=y3(i)+h(j)*(fy(y3(i),z3(i)));
z3(i+1)=z3(i)+h(j)*(fz(y3(i),z3(i)));
end
plot(t1,y1,'r-',t2,y2,'g',t3,y3,'b --')
figure(2)
plot(t1,z1,'r-',t2,z2,'g',t3,z3,'b --')
En 3d:
plot3(t1,y1,z1,'r-',t2,y2,z2,'g',t3,y3,z3,'b--')
grid on
Se observa que la solucin tiende a curvarse para rodear el origen, acercndose y bordendolo lentamente,
como si este fuera una especie de "sumidero". Tericamente para los sistemas lineales, los valores caracte-
rsticos indican el comportamiento cuando "t"tiende a innito, usemos el comando .eig"para obtener los
vectores y valores propios.
La diagonal "Dontiene los valores propios, al ser ambos negativos se deduce que el origen es un sumidero
que atrae a las trayectorias, lo cual coincide con nuestra observacin.
Ejemplos
P.V.I. Unidimensional
y0 = y t2 + t 1,25 0<t<2
y(0) = 1,25
y = (t + 0,5)2 et + 2
El planteo comienza de la misma forma que en el mtodo de Euler presentado anteriormente, ya que lo nico
que vara es la forma de clculo de la "sucesin":
clear all; close all
f=@(t,y) y-t.^2+t-1.25;
a=0;
b=2;
h=0.1;
y(1)=1.25;
real=@(t)(t+0.5).^2-exp(t)+2;
t=a:h:b;
n=length(t);
for i=1:n-1
z(i+1)=y(i)+h*f(t(i),y(i));
y(i+1)=y(i)+(h/2)*(f(t(i+1),z(i+1))+f(t(i),y(i)));
end
Vemos si los clculos coinciden a travs de un grco
plot(t,real(t),'o',t,y,'r-')
Notar que el parecido es mucho mayor que al aplicar la formula de Euler sola. Intentar con pasos menores
y analizar la magnitud del error absoluto.
Ejercicio Propuesto ( Problema bidimensional )
Aplicar el mtodo de Euler-Cauchy para aproximar la solucin del sistema :
x0 = 0,7x + 0,5y x(0) = 0
0
y = 0,2x 0,5y y(0) = 2
La solucin de este sistema es y = cos(0,3t) , z = 0,3 sin(0,3t) la que determina una trayectoria elptica
en el plano de fase recorrida en sentido antihorario.
y=reshape(y,length(y),1);
t=reshape(t,length(t),1);
h=t(2)-t(1);
for i=1:(length(t)-1)
k1=f(y(:,i),t(i));
k2=f(y(:,i)+(h/2)*k1,t(i)+(h/2));
k3=f(y(:,i)+(h/2)*k2,t(i)+(h/2));
k4=f(y(:,i)+h*k3,t(i)+h);
y(:,i+1)=y(:,i)+(h/6)*(k1+2*k2+2*k3+k4);
end
y=y';
clear all
h=0.1;
N=50;
t=[0:h:N*h];
f=@(W,t)[0 1;-0.09 0]*[W(1);W(2)];
w0=[1;0];
dd=rk4(f,w0,t);
plot(dd(:,1),dd(:,2))
N=100;
t=[0:h:N*h];
ddd=rk4(f,w0,t);
plot(ddd(:,1),ddd(:,2));
Se dan varias vueltas por el mismo crculo
clear all
h=0.1;
N=100;
t=[0:h:N*h];
w0=[1;0];
f=@(W,t)[-0.7 0.5;0.2 -0.5]*[W(1);W(2)];
d3=rk4(f,w0,t);
plot(d3(:,1),d3(:,2))
1 5 27 125
n+1 = n + k1 + k4 + k5 + k6 (2.2.1)
24 48 56 336
Donde:
k1 = hf (tn , n )
h 1
k2 = hf tn + , n + k1
2 2
h 1 1
k3 = hf tn + , n + k1 + k2
2 4 4
k4 = hf (tn + h, n k2 + 2k3 )
2 7 10 1
k5 = hf tn + h, n + k1 + k2 + k4
3 27 27 27
1 28 1 546 54 378
k6 = hf tn + h, n + k1 k2 + k3 + k4 k5
5 625 5 625 625 625
function y=rk5(f,y,t)
y=reshape(y,length(y),1);
t=reshape(t,length(t),1);
h=t(2)-t(1);
for i=1:(length(t)-1)
k1=h*f(y(:,i),t(i));
k2=h*f(y(:,i)+(k1/2),t(i)+(h/2));
k3=h*f(y(:,i)+(k2/4)+(k1/4),t(i)+(h/2));
k4=h*f(y(:,i)+2*k3-k2,t(i)+h);
k5=h*f(y(:,i)+(7/27)*k1+(10/27)*k2+(1/27)*k4,t(i)+(2/3)*h);
k6=h*f(y(:,i)+(28/625)*k1-(1/5)*k2+(546/625)*k3+(54/625)*k4
-(378/625)*k5,t(i)+(h/5));
y(:,i+1)=y(:,i)+(k1/24)+(5/48)*k4+(27/56)*k5+(125/336)*k6;
end
y=y';
end
La solucin de este sistema es y = cos(0,3t) , y = 0,3 sin(0,3t) la que determina una trayectoria elptica
en el plano de fase recorrida en sentido antihorario.
La siguiente funcin implementa el mtodo. Ntese que primero se debe haber denido la funcin F, igual
que en el caso de RK4. Antes de comenzar los clculos, se utilizan puntos encontrados con la aproximacin
anterior.
Pongamos a prueba el metodo previo a crear la funcin:
function y=adams4(f,y,t)
y=reshape(y,length(y),1);
t=reshape(t,length(t),1);
h=t(2)-t(1);
for i=1:(length(t)-1)
y=y';
end
clear all
h=0.1;
N=57;
t=[0:h:N*h];
f=@(W,t)[0 1;-0.09 0]*[W(1);W(2)];
w0=[1;0];
d6=adams4(f,w0,t);
plot(d6(:,1),d6(:,2))
El mtodo del disparo para el problema no lineal con valor de frontera de segundo orden y 00 = f (t, , y, y 0 ),
a < t < b , y(a) = y1 ; y(b) = y2 lleva ese nombre por la analoga con el procedimiento de dispararles a
objetos situados en un blanco jo.
Se comienza con un disparo y 0 (a) = z1 lo que determina un P.V.I. en t = a , el cual se resuelve obteniendose el
valor y(b) correspondiente. Si este valor no est cerca de y2 se corrige la elevacin hasta dar con l. Existiendo
otros procedimientos, sta vez emplearemos biseccin para acercarse a usando para ello dos elevaciones una
que de un valor y(b) por arriba y otro por abajo. Supondremos por esto que la funcin f cumple con las
condiciones para aplicar el teorema de existencia y unicidad de soluciones.
Ejemplo
pendiente z=0.2
paso:0.1
nmero de puntos:10
tiempo inicial:2
punto incial:1/2 + log(2)
y=W(1,1);
z=W(2,1);
Wp=[z ; z + 2*(y-log(t))^3 - 1/t];
Adems redenimos la funcin para iterar con RK4, de manera que utilice la funcin G:
function [W,t]=rk4d(h,N,ti,W0)
W(:,1) = W0;
Wn=W0;
tn = ti; t(1) = tn;
for n=1:N,
k1 = G(tn , Wn);
k2 = G(tn + 1/2*h , Wn + 1/2*h*k1);
k3 = G(tn + 1/2*h , Wn + 1/2*h*k2);
k4 = G(tn + h , Wn + h*k3);
W(:,n+1) = Wn + h/6*(k1 + 2*k2 + 2*k3 + k4);
tn = tn + h;
Wn = W(:,n+1);
t(n+1) = tn;
end
Ultima aproximacion:
lista(1,11)
Conclusin: con el paso 0.1 el tiempo avanzando en 10 iteraciones es t = 2 + 0,1 20 = 3. Se logr llegar
a la abcisa y = 1,33274 y necesitamos llegar a la abicsa y = 1,43195. Probemos con otro DISPARO.
pendiente z = 0.3
paso = 0.1
numero de puntos: 20
tiempo inicio : 2
punto inicial (1/2 + ln(2), 0.3)
lista = rk4d(0.1, 20, 2, [1/2 + log(2); 0.3]);
figure(1);
plot(lista(1,:),lista(2,:),'o');
grid on;
Ultima aproximacion:
lista(1,21)
Conclusin: Se logr llegar a la abcisa y = 1,53381 y necesitamos llegar a la abcisa y = 1,43195.
El disparo correcto se encontrar entre ambos.
Disparemos con pendiente entre 0.2 y 0.3 y coloquemos la pared en el objetivo y = 1,43195 para mirar el
efecto.
Uniremos los puntos con rectas para percibir mejor las trayectorias.
Haremos otro disparo con pendiente entre 0.2 y 0.3 paso = 0.1 ; numero de puntos : 10 ; tiempo inicio :
2, punto inicial ( 1/2 + log(2) , 0.3)
figure(1);
lista1 = rk4d(0.1, 10, 2, [1/2 + log(2); 0.2]);
lista1'
disp(sprintf('Ultima aproximacion: %d', lista1(1,11)))
subplot(2,2,1), plot(lista1(1,:),lista1(2,:)); grid on;
title('Pendiente 0.2'); axis([1.2 1.5 0 0.5]);
lista2 = rk4d(0.1, 10, 2, [1/2 + log(2); 0.23]);
lista2'
disp(sprintf('Ultima aproximacion: %d', lista2(1,11)))
subplot(2,2,2), plot(lista2(1,:),lista2(2,:)); grid on;
title('Pendiente 0.23'); axis([1.2 1.5 0 0.5]);
lista3 = rk4d(0.1, 10, 2, [1/2 + log(2); 0.26]);
lista3'
disp(sprintf('Ultima aproximacion: %d', lista3(1,11)))
subplot(2,2,3), plot(lista3(1,:),lista3(2,:)); grid on;
title('Pendiente 0.26'); axis([1.2 1.5 0 0.5]);
Ultima aproximacion:
lista4(1,11)
figure(1);
plot(lista1(1,:),lista1(2,:),'b', lista2(1,:),lista2(2,:),'b', lista3(1,:),lista3(2,:),
'b',lista4(1,:),lista4(2,:),'b', [1/3 + log(3) 1/3 + log(3)],[0 1],'r');
grid on;
De la lista se obtiene que la pendiente correcta es aproximadamente z = 0,26 Cmo automatizar el
disparo de tal manera de obtener el disparo correcto con precisin deseada?
Si n <y3: z1 = zz , n1 = n ;
Si n >y3: z2 = zz , n2 = n ;
Esto se detiene hasta cuando
abs[fin- y3 ] < 10^(-5)
y3=1/3 + log(3);
z1 = 0.23;
fin1= 1.39197;
z2 = 0.26;
fin2 = 1.45209;
for i=1:30,
zz=(z1+z2)/2;
lista = rk4d(0.1, 10, 2, [1/2 + log(2); zz]);
fin=lista(1,11);
disp(sprintf('iteracion %d: zz=%d, fin=%d',i,zz,fin));
if fin < y3,
z1 = zz;
fin1 = fin;
elseif fin >=y3,
z2 = zz;
fin2 = fin;
end
if abs(fin-y3) <= 10^(-5)
break;
end
end
Comparacion:
format
t=2:0.1:3;
digits(6)
e=abs(lista(1,:)'- (1./t+log(t))');
disp(sprintf(' Tiempo Aproximacin Exacto Error'));
disp([vpa(t') vpa(lista(1,:)') vpa((1./t+log(t))') vpa(e)]);
Ejercicio
Este ejercicio fu tomado del mismo texto y tiene por solucin exacta:
16
y = t2 +
t
Sin embargo existen mtodos o algoritmos que son inestables. Uno de ellos es el mtodo de Milne.
Es una frmula que se obtiene integrante la ecuacin diferencial y 0 (t) = f (t, y(t)) y utilizando las frmulas
de integracin abierta y cerrada de Newton-Cotes conocidas tambin con el nombre de frmulas de Simpson.
4h 28
yn+1 = yn3 + 0
(2yn2 0
yn1 + yn0 ) + h5 y (5) () (4.1.1)
3 90
h 0 h5
yn+1 = yn1 + (yn1 + 4yn0 + yn+1
0
) + y (5) () (4.1.2)
3 90
La ecuacin 4.1.1 Frmula de Milne predictor y 4.1.2 Frmula de Milne corrector.
Ejemplo:
Ejercicio:
Comprobar que con el problema y 0 = y se obtiene que el error desciende, sin embargo, si se disminuye
el paso no se obtiene en correspondencia un descenso de acuerdo a la prediccin terica de cuarto orden, de
hecho el error se conserva. Eso tambin es signo de la inestabilidad.