Professional Documents
Culture Documents
y'=
dy
=g ( x , y )
dx
Donde
de
es la variable independiente y
Ecuacin 2:
y =g2 ( x , y )=0.131 y
Ecuacin 3:
y =g3 ( x , y )=3.4444E-050.0015 y
Ecuacin 4:
Ecuacin 5:
y =g5 ( x , y )=3 y +e
Observe que
funcin de
'
'
'
'
2x
'
es una
como de
en las Ecuaciones 4 y 5.
Una solucin a una Edo de primer orden es una funcin
y=f ( x)
tal que
f ' ( x )=g(x , y ) . Calcular la solucin de una EDO implica integrar para obtener
y
a partir de
y=x 37.5
Solucin de la Ecuacin 2:
y=4 e0.131 x
Solucin de la Ecuacin 3:
y=0.0229630.020763 e0.0015 x
Solucin de la Ecuacin 4:
y=tan1 ( x 2+1)
Solucin de la Ecuacin 5:
y=4 e e
3x
2x
y=f ( x)
y ' =g( x , y )
que devuelve
y=f (x) .
y=f ( x)
y ' =g( x , y )
3
dy = 3*x.^2;
% Ecuacion 2
function dy = g2(x,y)
% g2 evalua una EDO de primer orden
dy = -0.131*y;
% Ecuacion 3
function dy = g3(x,y)
% g3 evalua una EDO de primer orden
dy = 3.4444E-5-0.0015*y;
% Ecuacion 4
function dy = g4(x,y)
% g4 evalua una EDO de primer orden
dy = 2*x.*cos(y).^2;
% Ecuacion 5
function dy = g5(x,y)
% g5 evalua una EDO de primer orden
dy = 3*y + exp(2*x);
% Archivo: SolucionesEDO.m
% Resuelve las EDO proporcionadas en g1.m,g2.m,g3.m,g4.m,g5.m
% Utiliza ode23
% Ecuacion 1:
% Intervalo [2,4] suponiendo y = f(2) = 0.5 como condicion inicial
[x,num_y]= ode23('g1',[2,4],0.5);
y = x.^3 - 7.5; % Solucion analitica
plot(x,num_y,x,y,'o')
title('Solucion de la Ecuacion 1')
xlabel('X'), ylabel('Y=f(X)'), grid on
%
% Ecuacion 2:
% Intervalo [0,5] suponiendo y = f(0) = 4 como condicion inicial
[x,num_y]= ode23('g2',[0,5],4);
y = 4*exp(-0.131*x);
% Solucion analitica
figure
plot(x,num_y,x,y,'o')
title('Solucion de la Ecuacion 2')
xlabel('X'), ylabel('Y=f(X)'), grid on
%
% Ecuacion 3
% Intervalo [0,120] suponiendo y=f(0) = 0.0022 como condicion
inicial
4
[x,num_y]= ode23('g3',[0,120],0.0022);
y = 0.022963 - 0.020763*exp(-0.0015*x); % Solucion analitica
figure
plot(x,num_y,x,y,'o')
title('Solucion de la Ecuacion 3')
xlabel('X'), ylabel('Y=f(X)'), grid on
%
% Ecuacion 4
% Intervalo [0,2] suponiendo y=f(0)= pi/4 como condicion inicial
[x,num_y]= ode23('g4',[0,2],pi/4);
y = atan(x.*x + 1); % Solucion analitica
figure
plot(x,num_y,x,y,'o')
title('Solucion de la Ecuacion 4')
xlabel('X'), ylabel('Y=f(X)'), grid on
%
% Ecuacion 5
% Intervalo [0,3] suponiendo y=f(0)=3 como condicion inicial
[x,num_y]= ode23('g5',[0,3],3);
y = 4*exp(3*x) - exp(2*x); % Solucion analitica
figure
plot(x,num_y,x,y,'o')
title('Solucion de la Ecuacion 5')
xlabel('X'), ylabel('Y=f(X)'), grid on
HEUN,
% Archivo: miEuler.m
% Resuelve una EDO por el metodo de EULER
function [t,y] = miEuler(f,t,y1)
% [t,y] = Solucion de aplicar Euler
% y1 es el valor inicial
% t nodos de integracion en [a,b]
% y es la solucion aproximada
n = length(t);
h = diff(t);
y = zeros(n,1);
y(1) = y1;
for k = 1:n-1
y(k+1)=y(k)+h(k)*feval(f,t(k),y(k));
end
% Archivo Heun.m
% Resuelve una EDO de primer orden por el metodo de HEUN
% Este metodo es conocido como Predictor - Corrector
function [t,y] = Heun(f,t,y1)
% [t,y] = Solucion de aplicar Heun
% y1 es el valor inicial
EULER
5
% t nodos de integracion en [a,b]
% y es la solucion aproximada
n = length(t);
h = diff(t);
y = zeros(n,1);
y(1) = y1;
for k = 1:n-1
k1 = feval(f,t(k),y(k))';
yp = y(k) + h(k)*k1;
% Predictor
k2 = feval(f,t(k)+h(k),yp)';
y(k+1) = y(k) + h(k)/2*(k1+k2); % Corrector
end
% Archivo EulerMod.m
% Metodo de Euler modificado
function [t,y] = EulerMod(f,t,y1)
% [t,y] = Solucion de aplicar Euler modificado
% y1 es el valor inicial
% t nodos de integracion en [a,b]
% y es la solucion aproximada
n = length(t);
h = diff(t);
y = zeros(n,1);
y(1) = y1;
for k = 1:n-1
y12 = y(k)+h(k)/2*feval(f,t(k),y(k)); % Estimacion de yk + h/2
y(k+1) = y(k) + h(k)*feval(f,t(k)+h(k)/2,y12); % Estimacion de
yk+1
end
% Archivo RungeKutta4.m
% Aplica el metodo de Runge-Kutta de cuarto orden
function [t,y] = RungeKutta4(f,t,y1)
% [t,y] = Solucion de aplicar RK4
% y1 es el valor inicial
% t nodos de integracion en [a,b]
% y es la solucion aproximada
n = length(t);
h = diff(t);
y = zeros(n,1);
y(1) = y1;
for k = 1:n-1
k1 = feval(f,t(k),y(k));
k2 = feval(f,t(k)+h(k)/2,y(k)+h(k)/2*k1);
k3 = feval(f,t(k)+h(k)/2,y(k)+h(k)/2*k2);
k4 = feval(f,t(k+1),y(k)+h(k)*k3);
y(k+1) = y(k) +h(k)/6*(k1+2*k2+2*k3+k4);
end
EJEMPLO 2:
Un lquido fluye de un tanque cnico invertido por un orificio circular a razn de
dx
2 gx
=0.6 r 20
dt
A( x)
Donde
r 0=3
A (x )
h=18000
R
3
r
A(x)
x
x ( 0 )=3 m
y a una altura
Inicialmente, se tiene
1
R2 3
3
=
60 3
De donde se deduce el rea a una altura
x :
R= 60 m
V0 =
7
2
A ( x ) = r =
20
2
x
3
dx
2 gx
=0,6 r 20
dt
20 /3 x 2
Para
hallar
el
nivel
t=10243600=864000 s
del
con
lquido
al
cabo
de
10
das
archivo deposito.m.
% Archivo deposito.m
% Para resolver el ejemplo de un tanque conico invertido
function z = deposito(t,y)
r0 = 0.003;
g = 9.8;
z = -0.6*pi*r0^2*sqrt(2*g)*(sqrt(y)/((20*pi/3)*y^2));
Ahora aplicamos los mtodos de Euler, Heun y Euler modificado respectivamente
haciendo:
>> [t,y1] = miEuler('deposito',0:18000:864000,3);
>> [t,y2] = Heun('deposito',0:18000:864000,3);
>> [t,y3] = EulerMod('deposito',0:18000:864000,3);
En la tabla 1, se presentan el nivel del lquido en el depsito al cabo de 10 das,
observamos que apenas ha descendido 0,7 m.
t
Euler
Heun
864000
2,283036
2,279216
Euler
Modificado
2,279230
Sol. Exacta
2,279214
dx
x
=C 2
dt
x
co
C=0,6 r 20
2 g
20 /3
5
x=( Ct + 35/ 2)
2
% ARCHIVO nivelexacto.M
% Para resolver el ejemplo de un tanque conico invertido
% Solucion analitica o exacta
function x = nivelexacto(t,x0)
r = 0.003;
g = 9.8;
C = -0.6*pi*r^2*sqrt(2*g)/(20*pi/3);
x = (5/2*C*t + 3^2.5).^(2/5);
De este modo calculamos los errores exactos de las aproximaciones
obtenidas haciendo:
>> x0 = 3; se = nivelexacto(t,x0)';
>> e1 = max(abs(y1-se))
Para el mtodo de Euler, e1 = 0.0038.
>> e2 = max(abs(y2-se))
Para el mtodo de Heun, e2 = 1.9706e-006
>> e3 = max(abs(y3-se))
Para el mtodo de Euler modificado, e3 = 1.6155e-005
b) Para establecer el orden de cada mtodo, vamos a obtener las soluciones
aproximadas con el doble de subintervalos, comparando con la solucin
exacta obtendremos nuevas estimaciones para el error, la relacin con los
errores hallados anteriormente nos indicara el orden del mtodo. Por
ejemplo, para el mtodo de Euler:
>> [t,y1] = miEuler('deposito',0:18000/2:8640000,3);
>> se = nivelexacto(t,x0)';
>> E1 = max(abs(y1-se))
E1 =
10.0077
Repetimos
para
Heun
para
modificado
e 3 /E 3=3,981835 4
Euler
modificado,
e 2/ E 2=4,053784 4
resultando
y para Euler
R=2,1
dI I dE
+ =
dt C dt
I ( 0 ) =1 amperio.
2,1 I +
1
0,06 t
I =e
(0.06 sen ( 2 t ) +2 cos ( 2t ) )
1,1
I ( 0 ) =1
Intensidad
0,757370
0,565464
0,439028
0,382297
0,389035
t
1,2
1,4
1,6
1,8
2,0
Intensidad
0,444205
0,526884
0,613883
0,683465
0,718580
10
uno = ones(size(tt));
dI = circuito(tt,II);
quiver(tt,II,uno,dI)
hold on, plot(t,y1), title('campo de direcciones')
h=0,2
paso
h=0,1 .