Sie sind auf Seite 1von 3

%Método de Runge Kutta 

 
clear
 
k1=1; %Estos son ejemplos del valor de k1 y k2
k2=1;
k3=1;
 
%Aquí se definen las funciones del lado derecho de la ecuación diferencial
 
fCTG=@(t,CTG,CDG,CMG,CA,G,CME) k1*CTG*CA;
fCDG=@(t,CTG,CDG,CMG,CA,G,CME) ­k1*CTG*CA­k2*CDG*CA;
fCMG=@(t,CTG,CDG,CMG,CA,G,CME) k2*CDG*CA­k3*CMG*CA;
fCA=@(t,CTG,CDG,CMG,CA,G,CME) k1*CTG*CA­k2*CDG*CA­k3*CMG*CA;
fG=@(t,CTG,CDG,CMG,CA,G,CME) k2*CDG*CA;
fCME=@(t,CTG,CDG,CMG,CA,G,CME) ­k1*CTG*CA+k2*CDG*CA+k2*CDG*CA;
 
 
%Condiciones iniciales
t(1)=0; %Tiempo inicial en cero
CTG(1)=1; %Estos son ejemplos de condiciones iniciales
CDG(1)=1; 
CMG(1)=1;
CA(1)=1;
G(1)=1;
CME(1)=1;
 
 
 
%Tamaño de paso para el análisis
h=0.0001;
tfinal=1;
 
%Numero de iteraciones
N=ceil(tfinal/h); %ceil solo sirve para redondear y que el valor de esa 
división sea entero.
 
%ciclo de iteraciones
 
for i=1:N
    t(i+1)=t(i)+h; %va incrementando el tiempo 
    
   %Cálculo de las k para cada ecuación diferencial.
   
   % Evalúa cada función para encontrar constantes k para la primer ecuación
   % diferencial y las constantes k para la segunda ecuación
   % diferencial, falta añadir las otras cuatro ecuaciones diferenciales
  k1CTG=fCTG(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
  k1CDG=fCDG(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
  k1CMG=fCMG(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
  k1CA=fCA(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
  k1G=fG(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
  k1CME=fCME(t(i),CTG(i),CDG(i),CMG(i),CA(i),G(i),CME(i));
 
  k2CTG=fCTG(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
  k2CDG=fCDG(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
  k2CMG=fCMG(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
  k2CA=fCA(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
  k2G=fG(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
  k2CME=fCME(t(i)+h/2,CTG(i)+h/2*k1CTG,CDG(i)+h/2*k1CDG,CMG(i)+h/2*k1CMG,CA(i)
+h/2*k1CA,G(i)+h/2*k1G,CME(i)+h/2*k1CME);
 
  k3CTG=fCTG(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
  k3CDG=fCDG(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
  k3CMG=fCMG(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
  k3CA=fCA(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
  k3G=fG(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
  k3CME=fCME(t(i)+h/2,CTG(i)+h/2*k2CTG,CDG(i)+h/2*k2CDG,CMG(i)+h/2*k2CMG,CA(i)
+h/2*k2CA,G(i)+h/2*k2G,CME(i)+h/2*k2CME);
 
 
  k4CTG=fCTG(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
  k4CDG=fCDG(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
  k4CMG=fCMG(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
  k4CA=fCA(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
  k4G=fG(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
  k4CME=fCME(t(i)+h/2,CTG(i)+h/2*k3CTG,CDG(i)+h/2*k3CDG,CMG(i)+h/2*k3CMG,CA(i)
+h/2*k3CA,G(i)+h/2*k3G,CME(i)+h/2*k3CME);
 
 %Se calculan los valores de CTG,CDG,CMG,CA y G para cada intervalo t. 
 CTG(i+1)=CTG(i)+h/6*(k1CTG+2*k2CTG+2*k3CTG+k4CTG);
 CDG(i+1)=CDG(i)+h/6*(k1CDG+2*k2CDG+2*k3CDG+k4CDG);
 CMG(i+1)=CMG(i)+h/6*(k1CMG+2*k2CMG+2*k3CMG+k4CMG);
 CA(i+1)=CA(i)+h/6*(k1CA+2*k2CA+2*k3CA+k4CA);
 G(i+1)=G(i)+h/6*(k1G+2*k2G+2*k3G+k4G);
 CME(i+1)=CME(i)+h/6*(k1CME+2*k2CME+2*k3CME+k4CME);
 
 
  
  
end
 
 
%Gráfico del problema
figure(1); clf(1)
 
plot(t,CTG)
hold on
plot(t,CDG)
plot(t,CMG)
plot(t,CA)
plot(t,G)
plot(t,CME)
xlabel('Tiempo')
ylabel('Concentración')
legend('CTG','CDG','CMG','CA','G','CME')