Está en la página 1de 19

Ejercicio N1:

Programa:

function M_Runge_kutta4(a,b,f,y0,n)
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% f -> funcion y'=f(x,y)
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
% SALIDA:
% s -> valores de la funcion y(x) en los puntos x
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=2*x(1) - exp(x(1))/2 + x(1)^2 + 1;%Solucion Original(aqui poner la
solucion original de la ecuacion)
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%45s\n','Metodo de Runge Kutta de orden 3')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.8f\n',l,x(1),y(1),z(1),err(1))
for i=1:n
k1=f(x(i),y(i));
k2=f(x(i)+(h/2),y(i)+(k1*h/2));
k3=f(x(i)+(h/2),y(i)+(k2*h/2));
k4=f(x(i)+h,y(i)+k3*h);
y(i+1)=y(i)+(h/6)*(k1+2*k2+2*k3+k4); % ecuacion de Runge-Kutta
z(i+1)=3*exp(x(i+1)^2/2)-x(i+1)^2-2;
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.8f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
end
z=2*x - exp(x)/2 + x.^2 + 1; %solucion original
S=[x' y' z']; % valores numericos de y(x)
%grafica
plot(x,y,'*')
grid minor
grid on
ylabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
Ejecución del programa:
>> s=dsolve('Dy=y-x^2+1,y(0)=0.5','x')

s =

2*x - exp(x)/2 + x^2 + 1 %solución Exacta

>> f=inline('y-x^2+1')

f =

Inline function:
f(x,y) = y-x^2+1

>> M_Runge_kutta4(0,2,f,0.5,10)
Metodo de Runge Kutta de orden 3
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 0.50000 0.50000 0.00000000
1.000 0.20000 0.82929 0.82930 0.00000529
2.000 0.40000 1.21408 1.21409 0.00001144
3.000 0.60000 1.64892 1.64894 0.00001858
4.000 0.80000 2.12720 2.12723 0.00002685
5.000 1.00000 2.64082 2.64086 0.00003639
6.000 1.20000 3.17989 3.17994 0.00004737
7.000 1.40000 3.73234 3.73240 0.00005994
8.000 1.60000 4.28341 4.28348 0.00007429
9.000 1.80000 4.81509 4.81518 0.00009057
10.000 2.00000 5.30536 5.30547 0.00010895

Grafica:
Por el Método de Taylor de 4to orden

Programa:

function M_Teylor(a,b,y0,n)
%Programado por Apolinario Pariona Javier Elias
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
% SALIDA:
% S -> valores de la funcion y(x) en los puntos x
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=1+x(1)-3*exp(x(1));%Solucion Original(aqui poner la solucion
original de la ecuacion)
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%40s\n','Metodo de Teylor de orden n')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),err(1))
for i=1:n

f=y(i)-x(i)^2+1; %(definir la funcion)


df=f-2*x(i); %variable
ddf=df-2; %variable
dddf=ddf;
y(i+1)=y(i)+h*f+(h^2/2)*df+(h^3/6)*ddf+(h^4/24)*dddf;
%f=(x(i)+y(i))^2; %variable
% df=2*(x(i)+y(i))+2*(x(i)+y(i))*f; %variable
%ddf=2+4*f+2*x(i)*df+2*f^2+2*y(i)*df; %variable
% serie de teylor de 3º orden
% y(i+1)=y(i)+h*f+(h^2/2)*df+(h^3/6)*ddf;
z(i+1)=2*x(i+1) - exp(x(i+1))/2 + x(i+1)^2 + 1;
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
end
z=2*x - exp(x)/2 + x.^2 + 1;%Solucion Original
s=[x' y' z'];
plot(x,y,'*')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
>> M_Teylor(0,2,0.5,10)
Metodo de Teylor de orden n
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 0.50000 0.50000 0.00000
1.000 0.20000 0.82930 0.82930 0.00000
2.000 0.40000 1.21409 1.21409 0.00000
3.000 0.60000 1.64895 1.64894 0.00001
4.000 0.80000 2.12724 2.12723 0.00001
5.000 1.00000 2.64087 2.64086 0.00002
6.000 1.20000 3.17996 3.17994 0.00002
7.000 1.40000 3.73243 3.73240 0.00003
8.000 1.60000 4.28353 4.28348 0.00004
9.000 1.80000 4.81524 4.81518 0.00006
10.000 2.00000 5.30556 5.30547 0.00008

Grafica:
Ejercicio 2

Programa:

function M_euler_Ex(a,b,f,y0,n)
%Metodo de Euler Explicito
%Programado por Apolinario Pariona Javier Elias
% f -> funcion de tipo inline
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=exp(-x(1)^2);%Solucion Original
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%40s\n','Metodo de Euler Explicito')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),err(1))
for i=1:n
%while err>tol
y(i+1)=y(i)+h*f(x(i),y(i));
z(i+1)=exp(-x(i+1)^2);%Solucion Original
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
%end
end
z=exp(-x.^2);%Solucion Original
s=[x' y' z'];
plot(x,y,'*')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
>> s=dsolve('Dy=-2*x*y,y(0)=1','x')

s =

exp(-x^2)

>> f=inline('-2*x*y')

f =

Inline function:
f(x,y) = -2*x*y

Ejecución del programa:


>> M_euler_Ex(0,1,f,1,125)
Metodo de Euler Explicito
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 1.00000 1.00000 0.00000
1.000 0.00800 1.00000 0.99994 0.00006
2.000 0.01600 0.99987 0.99974 0.00013
3.000 0.02400 0.99962 0.99942 0.00019
4.000 0.03200 0.99923 0.99898 0.00026
5.000 0.04000 0.99872 0.99840 0.00032
6.000 0.04800 0.99808 0.99770 0.00038
7.000 0.05600 0.99731 0.99687 0.00045
8.000 0.06400 0.99642 0.99591 0.00051
... ... ... ... ...
122.000 0.97600 0.38686 0.38575 0.00111
123.000 0.98400 0.38081 0.37974 0.00107
124.000 0.99200 0.37482 0.37379 0.00103
125.000 1.00000 0.36887 0.36788 0.00099

Grafica:
Con el método de Euler Impicito:

Programa:

function M_euler_Im(a,b,y0,n)
%Programado por Apolinario Pariona Javier Elias
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=exp(-x(1)^2);%Solucion Original(aqui poner la solucion original de
la ecuacion)
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%40s\n','Metodo de Euler Implicito')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),err(1))
for i=1:n
% y(i+1)=y(i)+f(x(i+1),y(i+1))
% f(x(i+1),y(i+1))=(y(i+1)-y(i))/h
%y(i+1)=(y(i)+h*(50*cos(x(i+1))-sin(x(i+1))))/(50*h+1); %4
z(i+1)=exp(-x(i+1)^2);
y(i+1)=(y(i))/(1+2*h*x(i+1));
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
end
z=exp(-x.^2);%Solucion Original
s=[x' y' z'];
plot(x,y,'*')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
Ejecución del Programa:
>> M_euler_Im(0,1,1,125)
Metodo de Euler Implicito
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 1.00000 1.00000 0.00000
1.000 0.00800 0.99987 0.99994 0.00006
2.000 0.01600 0.99962 0.99974 0.00013
3.000 0.02400 0.99923 0.99942 0.00019
4.000 0.03200 0.99872 0.99898 0.00026
5.000 0.04000 0.99808 0.99840 0.00032
6.000 0.04800 0.99732 0.99770 0.00038
7.000 0.05600 0.99642 0.99687 0.00045
... ... ... ... ...
123.000 0.98400 0.37869 0.37974 0.00105
124.000 0.99200 0.37278 0.37379 0.00101
125.000 1.00000 0.36691 0.36788 0.00097

Grafica:
Ejercicio N3:

Programa:

function M_crank_nicolson(a,b,y0,n)
%Programado por Apolinario Pariona Javier Elias
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=cos(x(1)) - exp(-50*x(1));%Solucion Original(aqui poner la solucion
original de la ecuacion)
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%40s\n','Metodo de Crack Nicolson')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),err(1))
for i=1:n
% y(i+1)=y(i)+f(x(i+1),y(i+1))
% f(x(i+1),y(i+1))=(y(i+1)-y(i))/h
%y(i+1)=(y(i)+h*(50*cos(x(i+1))-sin(x(i+1))))/(50*h+1); %4
z(i+1)=cos(x(i+1)) - exp(-50*x(i+1));
%y(i+1)=((8+2*h(x(i)+x(i+1)))*y(i))/(8-2*h*(x(i)+x(i+1)));
y(i+1)=((1-25*h)*y(i)+h*(50*cos((x(i+1)+x(i))/2)-
sin((x(i+1)+x(i))/2)))/(25*h+1);
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
end
z=cos(x)-exp(-50*x);%Solucion Original
s=[x' y' z'];
plot(x,y,'*')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
Ejecución del programa:
>> M_crank_nicolson(0,2,0,11)
Metodo de Crack Nicolson
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 0.00000 0.00000 0.00000
1.000 0.18182 1.62960 0.98340 0.64619
2.000 0.36364 0.52805 0.93461 0.40656
3.000 0.54545 1.12089 0.85489 0.26600
4.000 0.72727 0.58235 0.74699 0.16464
5.000 0.90909 0.72432 0.61446 0.10986
6.000 1.09091 0.39506 0.46168 0.06662
7.000 1.27273 0.33879 0.29367 0.04512
8.000 1.45455 0.08849 0.11599 0.02750
9.000 1.63636 -0.04781 -0.06552 0.01771
10.000 1.81818 -0.25729 -0.24487 0.01242
11.000 2.00000 -0.41050 -0.41615 0.00565

Grafica:
Para el método de Taylor

Programa:

function M_Teylor(a,b,y0,n)
%Programado por Apolinario Pariona Javier Elias
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
% SALIDA:
% S -> valores de la funcion y(x) en los puntos x
h=(b-a)/n;
x=a:h:b;
y(1)=y0;
z(1)=cos(x(1))-exp(-50*x(1));%Solucion Original(aqui poner la solucion
original de la ecuacion)
l=0;
err(1)=abs(y(1)-z(1));
fprintf('%40s\n','Metodo de Teylor de orden n')
fprintf('--------------------------------------------------------------
\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','Real','error')
fprintf('--------------------------------------------------------------
\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),err(1))
for i=1:n

f=-50*(y(i)-cos(x(i)))-sin(x(i)); %(definir la funcion)


df=-50*(f+sin(x(i)))-cos(x(i)); %variable
% ddf=df-2; %variable
% dddf=ddf;
y(i+1)=y(i)+h*f+(h^2/2)*df;
%f=(x(i)+y(i))^2; %variable
% df=2*(x(i)+y(i))+2*(x(i)+y(i))*f; %variable
%ddf=2+4*f+2*x(i)*df+2*f^2+2*y(i)*df; %variable
% serie de teylor de 3º orden
% y(i+1)=y(i)+h*f+(h^2/2)*df+(h^3/6)*ddf;
z(i+1)=cos(x(i+1)) - exp(-50*x(i+1));
err(i+1)=abs(y(i+1)-z(i+1));
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),err(i+1))
end
z=cos(x)-exp(-50*x);%Solucion Original
s=[x' y' z'];
plot(x,y,'*')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
plot(x,z)
legend('y aprox','y exacta')
Ejecucion del Programa:

>> M_crank_nicolson(0,2,0,11)
Metodo de Crack Nicolson
--------------------------------------------------------------
i x(i) y(i) Real error
--------------------------------------------------------------
0.000 0.00000 0.00000 0.00000 0.00000
1.000 0.18182 1.62960 0.98340 0.64619
2.000 0.36364 0.52805 0.93461 0.40656
3.000 0.54545 1.12089 0.85489 0.26600
4.000 0.72727 0.58235 0.74699 0.16464
5.000 0.90909 0.72432 0.61446 0.10986
6.000 1.09091 0.39506 0.46168 0.06662
7.000 1.27273 0.33879 0.29367 0.04512
8.000 1.45455 0.08849 0.11599 0.02750
9.000 1.63636 -0.04781 -0.06552 0.01771
10.000 1.81818 -0.25729 -0.24487 0.01242
11.000 2.00000 -0.41050 -0.41615 0.00565

Grafica:

Ambos métodos se ven que tienen casi la misma eficacia pero el método de
Taylor es un poquito más eficiente (Eso se ve en error que hay con la
aproximada y el exacto)
Ejercicio N4:
Programa:
function M_Runge_kutta3_sistem2(a,b,f,g,y0,z0,n)
% ENTRADA:
% a -> valor inicial del segmento
% b -> valor final del segmento
% f -> funcion X'=f(t,z,w)
% g -> funcion Y'=f(t,z,w)
% y0 -> condicion inicial X(a)=y0
% z0 -> condicion inicial Y(a)=z0
% n -> numero de particiones
% SALIDA:
% S -> valores de las funciones X(t) y Y(t) en los puntos t
h=(b-a)/n;
x=a:h:b;
y(1)=y0; z(1)=z0;
l=0;
fprintf('%40s\n','Metodo Runge Kutta 4 de 2 sistemas')
fprintf('----------------------------------------------\n')
fprintf('%4s %12s %12s %12s\n','i','x(i)','y(i)','z(i)')
fprintf('----------------------------------------------\n')
fprintf('%6.3f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1))
for i=1:n
ky1=f(x(i),y(i),z(i));
kz1=g(x(i),y(i),z(i));
ky2=f(x(i)+h/2,y(i)+h*ky1/2,z(i)+h*kz1/2);
kz2=g(x(i)+h/2,y(i)+h*ky1/2,z(i)+h*kz1/2);
ky3=f(x(i)+h/2,y(i)+h*ky2/2,z(i)+h*kz2/2);
kz3=g(x(i)+h/2,y(i)+h*ky2/2,z(i)+h*kz2/2);
y(i+1)=y(i)+(ky1+2*ky2+2*ky3)*(h/6);
z(i+1)=z(i)+(kz1+2*kz2+2*kz3)*(h/6);
fprintf('%6.3f %12.5f %12.5f %12.5f\n',i,x(i+1),y(i+1),z(i+1))
end
s=[x' y' z'];
subplot(2,1,1)
plot(x,y,'.')
grid minor
grid on
xlabel('t')
xlabel('y')
title('Curva y(t)')
hold on
ezplot('exp(-x)*cos(x)',[0,1])%grafica del valor real en y
legend('y aprox','y exacta')
subplot(2,1,2)
plot(x,z,'.')
grid minor
grid on
xlabel('t')
xlabel('z')
title('Curva z(t)')
hold on
ezplot('exp(-x)*sin(x)',[0,1])%grafica del valor real en z
legend('z aprox','z exacta')
%plot(x,y,x,z);
>> S=dsolve('Dy=-y-z,Dz=y-z,y(0)=1,z(0)=0','x')

S =

struct with fields:

z: [1×1 sym]
y: [1×1 sym]

>> S.y

ans =

exp(-x)*cos(x)

>> S.z

ans =

exp(-x)*sin(x)

Ejecución del Programa:

>> M_Runge_kutta3_sistem2(0,1,f,g,1,0,20)
Metodo Runge Kutta 4 de 2 sistemas
----------------------------------------------
i x(i) y(i) z(i)
----------------------------------------------
0.000 0.00000 1.00000 0.00000
1.000 0.05000 0.95835 0.04002
2.000 0.10000 0.91684 0.07671
3.000 0.15000 0.87559 0.11021
4.000 0.20000 0.83471 0.14066
5.000 0.25000 0.79432 0.16821
6.000 0.30000 0.75451 0.19299
7.000 0.35000 0.71536 0.21515
8.000 0.40000 0.67696 0.23482
9.000 0.45000 0.63937 0.25213
10.000 0.50000 0.60265 0.26722
11.000 0.55000 0.56686 0.28021
12.000 0.60000 0.53204 0.29123
13.000 0.65000 0.49823 0.30039
14.000 0.70000 0.46546 0.30782
15.000 0.75000 0.43375 0.31363
16.000 0.80000 0.40314 0.31793
17.000 0.85000 0.37362 0.32082
18.000 0.90000 0.34522 0.32241
19.000 0.95000 0.31794 0.32280
20.000 1.00000 0.29178 0.32208
Grafica:
Ejercicio N5:

Programa:

function M_Runge_kutta2_sistem3(a,b,f,g,p,y0,z0,w0,n)
%Programado por Apolinario Pariona Javier Elias
% f -> funcion de tipo inline
% ENTRADA:
% g -> funcion de tipo inline
% p -> funcion de tipo inline
% a -> valor inicial del segmento
% b -> valor final del segmento
% y0 -> condicion inicial y(a)=y0
% n -> numero de particiones
% z0 -> condicion inicial z(a)=z0
% p0 -> condicion inicial p(a)=p0
h=(b-a)/n;
x=a:h:b;
y(1)=y0; z(1)=z0; w(1)=w0;
l=0;
fprintf('%42s\n','Metodo de Ronge Kutta 2 de 3 sistemas')
fprintf('----------------------------------------------\n')
fprintf('%4s %12s %12s %12s %12s\n','i','x(i)','y(i)','z(i)','w(i)')
fprintf('----------------------------------------------\n')
fprintf('%6.3f %12.5f %12.5f %12.5f %12.5f\n',l,x(1),y(1),z(1),w(1))
for i=1:n
ky1=f(x(i),y(i),z(i),w(i)); kz1=g(x(i),y(i),z(i),w(i));
kw1=p(x(i),y(i),z(i),w(i));
ky2=f(x(i)+h,y(i)+h*ky1,z(i)+h*kz1,w(i)+h*kw1);
kz2=g(x(i)+h,y(i)+h*ky1,z(i)+h*kz1,w(i)+h*kw1);
kw2=p(x(i)+h,y(i)+h*ky1,z(i)+h*kz1,w(i)+h*kw1);
y(i+1)=y(i)+(ky1+ky2)*(h/2);
z(i+1)=z(i)+(kz1+kz2)*(h/2);
w(i+1)=w(i)+(kw1+kw2)*(h/2);
fprintf('%6.3f %12.5f %12.5f %12.5f
%12.5f\n',i,x(i+1),y(i+1),z(i+1),w(i+1))
end
y'
s=[x' y' z' w'];
plot(x,y,x,z,x,w)
legend('y(x)','z(x)','w(x)')
pause
subplot(3,1,1)
plot(x,y,'.')
grid on
grid minor
xlabel('t')
xlabel('y')
title('Curva y(t)')
%hold on
%ezplot('2 - exp(x)',[0,2])%grafica del valor real en y
%legend('y aprox','y exacta')
subplot(3,1,2)
plot(x,z,'.')
grid minor
grid on
xlabel('t')
xlabel('z')
title('Curva z(t)')
%hold on
%ezplot('4*exp(x) - x*exp(x) - 2',[0,2])%grafica del valor real en z
%legend('z aprox','z exacta')
subplot(3,1,3)
plot(x,w,'.')
grid minor
grid on
xlabel('t')
xlabel('w')
title('Curva w(t)')
%hold on
%ezplot('5*exp(x) - x*exp(x) - 2',[0,2])%grafica del valor real en w
%legend('w aprox','w exacta')

Ejecucion del Programa:


>> M_Runge_kutta2_sistem3(0,1,f,g,p,0,0,0,20)
Metodo de Ronge Kutta 2 de 3 sistemas
----------------------------------------------------------
i x(i) y(i) z(i) w(i)
-----------------------------------------------------------
0.000 0.00000 0.00000 0.00000 0.00000
1.000 0.05000 0.00000 0.00000 0.00125
2.000 0.10000 0.00000 0.00013 0.00500
3.000 0.15000 0.00001 0.00050 0.01126
4.000 0.20000 0.00005 0.00125 0.02005
5.000 0.25000 0.00014 0.00251 0.03139
6.000 0.30000 0.00031 0.00439 0.04531
7.000 0.35000 0.00058 0.00704 0.06183
8.000 0.40000 0.00101 0.01057 0.08101
9.000 0.45000 0.00164 0.01514 0.10289
10.000 0.50000 0.00253 0.02086 0.12753
11.000 0.55000 0.00373 0.02789 0.15498
12.000 0.60000 0.00532 0.03636 0.18532
13.000 0.65000 0.00737 0.04642 0.21862
14.000 0.70000 0.00996 0.05823 0.25496
15.000 0.75000 0.01319 0.07192 0.29444
16.000 0.80000 0.01716 0.08767 0.33716
17.000 0.85000 0.02196 0.10564 0.38321
18.000 0.90000 0.02772 0.12599 0.43272
19.000 0.95000 0.03456 0.14891 0.48581
20.000 1.00000 0.04261 0.17458 0.54261

y =

0
0
0.0000
0.0000
0.0001
0.0001
0.0003
0.0006
0.0010
0.0016
0.0025
0.0037
0.0053
0.0074
0.0100
0.0132
0.0172
0.0220
0.0277
0.0346
0.0426
Graficas:
Comparando con la exacta
>> plot(0:0.05:1,y)
>> hold on
>> ezplot('exp(-x)/2 + exp(x)/2 - x^2/2 - 1',[0,1])

También podría gustarte