Anda di halaman 1dari 7

Cristian Amador Loli Prudencio

Pgina 1

11. MTODOS MULTIPASO
Ahora tenemos que el problema 1 a parte del valor inicial posee varios valores como datos
adicionales para reajustar la solucin, es decir:

0 0 1 1
( ) :[ , ] /
' ( , )
( ) , ( ) ,..., ( )
m m
Hallar y y x a b
y F x y
y x y y x y y x y
=

= = =

R
(14)
En esta ecuacin diferencial ya se dan m+1 datos 0 0 1 1
( ) , ( ) ,..., ( )
m m
y x y y x y y x y = = =
, y la
solucin aproximada tiene que ajustarse a estos datos (m+1 datos), por dicho motivo estas
aproximaciones se calculan por los Mtodos Multipaso. Si m = 1 (2 datos) se llama Mtodo de 2
pasos, si m = 2 (3 datos) se llama Mtodo de 3 pasos, si m = 3 (4 datos) se llama Mtodo de 4
pasos, y as sucesivamente.

Resolvemos el problema:
0 0 1 1
( ) :[ , ] /
' ( , )
( ) , ( )
Hallar y y x a b
y F x y
y x y y x y
=

= =

R
(15)

Figura 9.


12. MTODO DE ADAMS BASHFORTH (2 pasos - predictor)

Para resolver (15), el mtodo de solucin es:

1 -1
0 0 1 1
-1 -1 -1
[- 3 ]
2
siendo:
, datos iniciales
( , )
( , )
n n n n
n n n
n n n
h
w w f f
w y w y
f F x w
f F x w
+

= + +

= =

(16)
Cristian Amador Loli Prudencio


Pgina 2

Los puntos i
x
se toman igualmente espaciados 0
, 1, 2,.., ,...
i
x x ih i n = + =


Orden de aproximacin
El error de aproximacin de este mtodo es de orden 2, esto es
( ) Error O h =


Ejemplo:
Sea
' 3
(0) 2, (0.1) 2.035263517
y xy x
y y
= +

= =


Hallar y(0.2) por Adams Bashforth.
Solucin:
Identificamos los datos
0 1
0 1
0, 0.1
(0) 2, y(0.1)=2.035263517
0.1
( , ) 3
x x
w y w
h
F x y xy x
= =

= = =

= +


[ ]
1 0 1 2
3
2
f f
h
w w + + =
Veamos: ( ) ( ) 0 2 , 0 ,
0 0 0
= = = F w x F f
( ) ( ) 51 0.71057905 035263517 . 2 , 1 . 0 ,
1 1 1
= = = F w x F f
Reemplazando: [ ] 5265 2.14185037 3
2
1 . 0
035263517 . 2 ) 2 . 0 (
1 0 2
= + + = f f w y

13. MTODO DE ADAMS MOULTON (2 pasos - predictor corrector)

Para resolver el problema (15), el mtodo de solucin es:
( )
( )

\
|
=
=
=
= =
(

+ + + =

+ +

+ +
... , ,
,
,
,
:
5 8
12
1 1 1 1
1 1 1
1 1 0 0
1 1 1
o Bashforth Adams o Kutta Runge por calcula se w donde w x F f
w x F f
w x F f
iniciales datos y w y w
siendo
f f f
h
w w
n n n n
n n n
n n n
n n n n n
(17)
Los puntos i
x
se toman igualmente espaciados 0
, 1, 2,.., ,...
i
x x ih i n = + =


Orden de aproximacin
El error de aproximacin de este mtodo es de orden 3, esto es
( ) Error O h =


Ejemplo:
Sea
' 3
(0) 2, (0.1) 2.035263517
y xy x
y y
= +

= =


Hallar y(0.2) por Adams Moulton.
Cristian Amador Loli Prudencio


Pgina 3

Solucin:
Identificamos los datos
0 1
0 1
0, 0.1
(0) 2, y(0.1)=2.035263517
0.1
( , ) 3
x x
w y w
h
F x y xy x
= =

= = =

= +


Por Runge Kutta de orden 4:
2 1 1 2 3 4
1
[ 2 2 ]
6
w w k k k k = + + + +

135285226 . 2
2
=

w
Por Adams Moulton:
0 0 0
1 1 1
2 2 2
2 1 0 1 2
( , ) (0, 2) 0
( , ) (0.1, 2.035263817) 0.7105791451

( , ) (0.2, 2.135285226) 1.481171136


0.1

[- 8 5 ]
12
f F x w F
f F x w F
f F x w F
w w f f f
= = =
= = =
= = =
= + + +

2
(0.2) 2.144351224 y w =


14. PROGRAMAS EN MATLAB DE LOS MTODOS DE DOS PASOS
PROGRAMA EN MATLAB DE ADAMS BASHFORTH DE 2 PASOS
Programa prbash2.m
function [x,y]=prbash2(fun,x0,xf,N,y0,y1)
%Mtodo de Adasms Bashforth de dos pasos
%[x,y]=prbash2(fun,x0,xf,N,y0,y1)
%calcula las imagenes ajustadas a los dos datos
%iniciales (x0,y0), (x1,y1).
F = inline(fun,'x','y');
h = (xf-x0)/N;
x= x0:h:xf;
w(1)=y0;w(2)=y1;
fprintf('%5.3f %.9f %.9f \n', x(1), F(x(1),w(1)), w(1));
fprintf('%5.3f %.9f %.9f \n', x(2), F(x(2),w(2)), w(2));
for i = 3:N+1
w(i) = w(i-1)+0.5*h*(-F(x(i-2),w(i-2))+3*F(x(i-1),w(i-1)));
fprintf('%5.3f %.9f %.9f \n', x(i), F(x(i),w(i)),w(i));
end
y=w;
fprintf('Resultado exitoso \n');
end


PROGRAMA EN MATLAB DE ADAMS MOULTON DE 2 PASOS
Programa prmou2.m
function [x,y]=prmou2(fun,x0,xf,N,y0,y1)
%Mtodo de Adams Moulton de dos pasos
%[x,y]=prmou2(fun,x0,xf,N,y0,y1)
%calcula las imagenes ajustadas a los dos datos
%iniciales (x0,y0), (x1,y1).
F = inline(fun,'x','y');
h = (xf-x0)/N;
x= x0:h:xf;
Cristian Amador Loli Prudencio


Pgina 4

w(1)=y0;w(2)=y1;
fprintf('%5.3f %.9f %.9f \n', x(1), F(x(1),w(1)), w(1));
fprintf('%5.3f %.9f %.9f \n', x(2), F(x(2),w(2)), w(2));
for i = 3:N+1
K1 = h*F(x(i-1), w(i-1));
K2 = h*F(x(i-1)+0.5*h, w(i-1)+0.5*K1);
K3 = h*F(x(i-1)+0.5*h, w(i-1)+0.5*K2);
K4 = h*F(x(i), w(i-1)+K3);
w(i) = w(i-1)+(K1+2*K2+2*K3+K4)/6;
fprintf('w(%d) por Runge Kutta %.9f \n',i, w(i));
w(i) = w(i-1)+1/12*h*(-F(x(i-2),w(i-2))+8*F(x(i-1),w(i-1))+5*F(x(i),w(i)));
fprintf('%5.3f %.9f %.9f \n', x(i), F(x(i),w(i)),w(i));
end
y=w;
fprintf('Resultado exitoso \n');
end


15. SISTEMAS DE ECUACIONES DIFERENCIALES
Un sistema de "n" ecuaciones diferenciales ordinarias de primer orden, con condiciones
iniciales, es de la forma:
1 1 1 2 1 0 1
2 2 1 2 2 0 2
3 3 1 2 3 0 3
1 2 0
' ( , , ,... ), ( )
' ( , , ,... ), ( )
' ( , , ,... ), ( )
.
.
' ( , , ,... ), ( )
n
n
n
n n n n n
y F x y y y y x
y F x y y y y x
y F x y y y y x
y F x y y y y x

= =

= =

= =

= =

(18)
para "n" funciones reales de variable real
( ) , 1, 2,...
i
y x i n =
.

Para resolver (18) se puede seguir los mtodos de Euler, Taylor, Heun y Runge Kutta
expresados convenientemente.

Por ejemplo aplicando Heun para resolver
1 0 1
2 0 2
' ( , , ), ( )
' ( , , ), ( )
y F x y z y x
z F x y z z x

= =

= =


Se tiene la frmula:

1 1 2
1 1
2 1 1 1
1 1
1
[ ]
2
:
( , , )
( , , )
( )
n n
n n n
n n n
n n
w w k k
siendo
k hF x w
k hF x h w k T
y x w
+
+ +
= + +
=
= + + +


1 1 2
1 2
2 2 1 1
1 1
1
[ ]
2
:
( , , )
( , , )
( )
+
+ +
= + +
=
= + + +

n n
n n n
n n n
n n
T T
Siendo
T hF x w
T hF x h w k T
z x


Por ejemplo aplicando Runge Kutta de orden 4 para resolver
1 0 1
2 0 2
' ( , , ), ( )
' ( , , ), ( )
y F x y z y x
z F x y z z x

= =

= =


Se tiene la frmula:

Cristian Amador Loli Prudencio


Pgina 5

1 1 2 3 4
1 1
1 1
2 1
2 2
3 1
4 1 3 3
1 1
1
[ 2 2 ]
6
:
( , , )
( , , )
2 2 2
( , , )
2 2 2
( , , )
( )
n n
n n n
n n n
n n n
n n n
n n
w w k k k k
siendo
k hF x w
k T h
k hF x w
k T h
k hF x w
k hF x h w k T
y x w
+
+ +
= + + + +
=
= + + +
= + + +
= + + +


1 1 2 3 4
1 2
1 1
2 2
2 2
3 2
4 2 3 3
1 1
1
[ 2 2 ]
6
:
( , , )
( , , )
2 2 2
( , , )
2 2 2
( , , )
( )
+
+ +
= + + + +
=
= + + +
= + + +
= + + +

n n
n n n
n n n
n n n
n n n
n n
T T T T
Siendo
T hF x w
k T h
T hF x w
k T h
T hF x w
T hF x h w k T
z x


De forma anloga se puede aplicar Runge Kutta de orden 4 para resolver un Sistema de
Ecuaciones Diferenciales de Primer Orden con tres incgnitas y(x), z(x), u(x); con cuatro
incgnitas; etc.

Ejemplo
Resuelva el sistema de EDO por Heun en el intervalo [0,1] con tamao de paso h=0.1.

2 0 4y
1 0 5 3y
= ) z( , e xz = z'
= ) y( , e + xz = y'
x
x

Solucin:
Identificamos los datos
0
0 0
1
2
0
(0) 2, z(0)=2
0.1
( , , ) 3 5
( , , ) 4
x
x
x
w y
h
F x y z y xz e
F x y z y xz e

= = =

= +


Con la frmula de Heun
1 0 1 2
1 1 0 0 0
2 1 0 0 1 0 1
1 1
1
[ ]
2
:
( , , )
( , , )
( )
w w k k
siendo
k hF x w
k hF x h w k T
y x w
= + +
=
= + + +


1 0 1 2
1 2 0 0 0
2 2 0 0 1 0 1
1 1
1
[ ]
2
:
( , , )
( , , )
( )
T T
Siendo
T hF x w
T hF x h w k T
z x
= + +
=
= + + +


se tiene:
1 1
1 2
2 1 1 1
2 2 1 1
0.1 (0,1, 2) 0.4
0.1 (0,1, 2) 0.3
0.1 (0.1,1 , 2 ) 0.415517092
0.1 (0.1,1 , 2 ) 0.426482908
k F
T F
k F k T
T F k T
= =
= =
= + + =
= + + =

1 0 1 2
1 0 1 2
1
(0.1) [ ] 1.407758546
2
1
(0.1) [ ] 2.363241454
2
y w w k k
z T T
= + + =
= + + =

Repitiendo el mismo proceso se tiene:
Cristian Amador Loli Prudencio


Pgina 6



16. PROGRAMAS EN MATLAB PARA SISTEMAS DE EDO DE ORDEN 1

PROGRAMA EN MATLAB para dos EDO de primer orden por HEUN
Programa heundos.m
function [x, y, z] = heundos(fun1,fun2,x0,xf,N,y0,z0)
% Autor: Cristian Loli Prudencio
% Sintaxis: [x, y, z]=heundos(fun1,fun2,x0,xf,N,y0,z0)
h=(xf-x0)/N;
x=x0:h:xf;
y(1)=y0;z(1)=z0;
f=inline(fun1);g=inline(fun2);
for i=1:N
k1(i)=h*f(x(i),y(i),z(i));
t1(i)=h*g(x(i),y(i),z(i));
k2(i)=h*f(x(i)+h,y(i)+k1(i),z(i)+t1(i));
t2(i)=h*g(x(i)+h,y(i)+k1(i),z(i)+t1(i));
y(i+1)=y(i)+1/2*(k1(i)+k2(i));
z(i+1)=z(i)+1/2*(t1(i)+t2(i));
fprintf('k1=%.9f t1=%.9f k2=%.9f t2=%.9f\n',k1(i),t1(i),k2(i),t2(i));
fprintf('w%d=%.9f n%d=%.9f\n',i,y(i+1),i,z(i+1));
end
x(N+1)=xf;
end

PROGRAMA EN MATLAB para dos EDO de primer orden por RK4
Programa rk4dos.m
function [x, y, z] = rk4dos(fun1,fun2,x0,xf,N,y0,z0)
% Autor: Cristian Loli Prudencio
% Sintaxis: [x, y, z]=rk4dos(fun1,fun2,x0,xf,N,y0,z0)
h=(xf-x0)/N;
x=x0:h:xf;
y(1)=y0;z(1)=z0;
f=inline(fun1);g=inline(fun2);
for i=1:N
k1(i)=h*f(x(i),y(i),z(i));
t1(i)=h*g(x(i),y(i),z(i));
k2(i)=h*f(x(i)+h/2,y(i)+k1(i)/2,z(i)+t1(i)/2);
t2(i)=h*g(x(i)+h/2,y(i)+k1(i)/2,z(i)+t1(i)/2);
k3(i)=h*f(x(i)+h/2,y(i)+k2(i)/2,z(i)+t2(i)/2);
t3(i)=h*g(x(i)+h/2,y(i)+k2(i)/2,z(i)+t2(i)/2);
k4(i)=h*f(x(i)+h,y(i)+k3(i),z(i)+t3(i));
t4(i)=h*g(x(i)+h,y(i)+k3(i),z(i)+t3(i));
y(i+1)=y(i)+1/6*(k1(i)+2*k2(i)+2*k3(i)+k4(i));
z(i+1)=z(i)+1/6*(t1(i)+2*t2(i)+2*t3(i)+t4(i));
fprintf('k1=%.9f t1=%.9f\n',k1(i),t1(i));
fprintf('k2=%.9f t2=%.9f\n',k2(i),t2(i));
fprintf('k3=%.9f t3=%.9f\n',k3(i),t3(i));
fprintf('k4=%.9f t4=%.9f\n',k4(i),t4(i));
fprintf('y(%.2f)=%.9f\n',x(i+1),y(i+1));
fprintf('z(%.2f)=%.9f\n',x(i+1),z(i+1));
end
Cristian Amador Loli Prudencio


Pgina 7

x(N+1)=xf;
end

Anda mungkin juga menyukai