Está en la página 1de 2

Tutorial n° 1:

Programa:
%RUNGE-KUTTA
clear all;clc
n=input('Número de ecuaciones: ');
y=input('Valores iniciales dependientes: ');
xi=input('Valor inicial de la variable independiente: ');
xf=input('Valor final de la variable independiente: ');
dx=input('Tamaño de paso: ');
xout=input('Tamaño de paso: ');
x=xi;
m=1;
xp(m)=x;
for i=1:n
yp(i,m)=y(i);
end
while x<xf
xend=x+xout;
if xend>xf
xend=xf;
end
h=dx;
[x,y]=integratork(x,y,n,h,xend);
m=m+1;
xp(m)=x;
for i=1:n
yp(i,m)=y(i);
end

end
plot(xp,yp,'--r')
hold on
grid on
hold off

function [x,y]=integratork(x,y,n,h,xend)
while x<xend
if (xend-x)<h
h=xend-x;
end
[x,y]=RK4(x,y,n,h);
End
End
corriendo el programa:
function [x,y]=RK4(x,y,n,h)
K1=derivrk(x,y);
for i=1:n
ym(i)=y(i)+K1(i)*(h/2);
end
K2=derivrk(x+h/2,ym);
for i=1:n
ym(i)=y(i)+K2(i)*(h/2);
end
K3=derivrk(x+h/2,ym);
for i=1:n
ye(i)=y(i)+K3(i)*h;
end
K4=derivrk(x+h,ye);
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 [dy]=derivrk(x,y)
dy(1)=1/15*(1-y(1))-0.5*(y(1)*(y(2))^2-0.1*y(3))-0.2*y(1)*y(3);
dy(2)=1/15*(2-y(2))-(y(1)*(y(2))^2-0.1*y(3));
dy(3)=1/15*(-y(3))+0.5*(y(1)*(y(2))^2-0.1*y(3))-0.2*y(1)*y(3);
dy(4)=1/15*(-y(4))+0.2*y(1)*y(3);
end

También podría gustarte