Vous êtes sur la page 1sur 3

clear all

close all
fprintf(' RK4 dos EDO :\n')
fprintf(' =============\n')
f1=input('La EDO Número 1 Dy1Dx=','s');
f2=input('La EDO Número 2 Dy2Dx=','s');
f3=input('La EDO Número 3 Dy3Dx=','s');
y0=input('Valores inciales de las variables dependientes y0=');
xi=input('Variable incial independiente xi=');
xf=input('Varible final varible independinte xf=');
dx=input('Tamaño de paso:');
n = 3;
x=xi;
m=1;
xp(m)=x;
yv1(1)=y0(1,1);
yv2(1)=y0(1,2);
yv3(1)=y0(1,3);
f=dsolve('Dz= -0.5*z','z(0)=4','x');
f=inline(f);
g=dsolve('Dz=4-0.3*z-0.1*4*exp(-x/2)','z(0)=6','x');
g=inline(g);
j=dsolve('Dz=10-0.5*((2*exp(-x/5)*exp(-(3*x)/10)*(20*exp(x/2) + 3))/3 -
(28*exp(-(3*x)/10))/3)+0.25*4*exp(-x/2)-0.15*z','z(0)=10','x');
j=inline(j);
for i = 1:n
yp(i,m) = y0(i);
y(i) = y0(i);
end
while (x<xf)
xend = x + dx;
if xend > xf
xend = xf;
end
h = dx;
[x,y] = integradorRK4con2EDO(x,y,n,h,xend,f1,f2,f3);
m = m +1;
xp(m) = x;
yv1(m)=f(x);
yv2(m)=g(x);
yv3(m)=j(x);
for i = 1:n
yp(i,m) = y(i);
end
end
fprintf('\n X Y1Verdad Y2Verdad Y3Verdad Y1RK4
Y2RK4 Y3RK4 err1 err2 \n')
for j = 1:m
err1 = abs((yv1(j)-yp(1,j))/yv1(j))*100;
err2 = abs((yv2(j)-yp(2,j))/yv2(j))*100;
err3 = abs((yv3(j)-yp(3,j))/yv3(j))*100;
fprintf('\n %3.5f %10.7f %10.7f %10.7f %10.7f %10.7f %10.7f \n
',xp(j),yv1(j),yv2(j),yv3(j),yp(1,j),yp(2,j),yp(3,j),err1,err2,err3)
end
function [x, y] = integradorRK4con2EDO(x,y,n,h,xend,f1,f2,f3)
while x < xend
if (xend - x) < h
h = xend - x;
end
[x,y] = RK4con2EDO(x,y,n,h,f1,f2,f3);
end
end

function [x,y] = RK4con2EDO(x,y,n,h,f1,f2,f3)


[k1] = derivesRK4con2EDO(x,y,f1,f2,f3);
for i = 1:n
ym(i) = y(i) +k1(i)*(h/2);
end
[k2] = derivesRK4con2EDO(x+h/2,ym,f1,f2,f3);
for i = 1:n
ym(i) = y(i) +k2(i)*(h/2);
end
[k3] = derivesRK4con2EDO(x+h/2,ym,f1,f2,f3);
for i = 1:n
ye(i) = y(i) +k3(i)*h;
end
[k4] = derivesRK4con2EDO(x+h,ye,f1,f2,f3);
for i = 1:n
slope(i) = (k1(i)+2*(k2(i)+k3(i))+k4(i))/6;
y(i)=y(i) + slope(i)*h;
end
x = x + h;
end

function [k] = derivesRK4con2EDO(x,y,f1,f2,f3)


syms x y1 y2 y3
%f1 = inline(f1);
%f2 = inline(f2);
ya = y(1);
yb = y(2);
yc = y(3);
dy1 =subs(f1,[x y1 y2],[x ya yb]);
dy2 =subs(f2,[x y1 y2],[x ya yb]);
dy3 =subs(f3,[x y1 y2 y3],[x ya yb yc]);
k=[dy1 dy2 dy3];
end

Vous aimerez peut-être aussi