function [k, X, Y, Tn, Vn] = perturbacionode(F, G, k0, X0, Y0, problema)
%perturbacionode
%   [k, X, Y] = perturbacionode(F, G, k0, X0, Y0)
%
%   Integración de las ecuaciones diferenciales perturbativas para el 
%   problema de autovalores, para VN o para TE.
%
%   [k, X, Y, T, V] = perturbacionode(F, G, k0, X0, Y0, problema)
%      F         recetas en tiempo discreto con los procesos de producción
%      G         recetas en tiempo discreto con la perturbación
%      k0        autovalor o factor inicial
%      X0        autovector por la izquierda o intensidades iniciales
%      Y0        autovector por la derecha o valores iniciales
%      problema  para autovalores 0, para VN 1 (por defecto), y para TE 0
%      k         autovalor o factor final
%      X         autovector por la izquierda o intensidades finales
%      Y         autovector por la derecha o valores finales
%      T         puntos de análisis
%      V         magnitud de k, X e Y en cada punto de análisis
%
%   F y G deben tener la misma dimensión. En Matlab la integración se
%   efectúa con la función nativa ode45.m y en Octave con ode45octave.m

%Necesita perturbacionodefile.m, ode45octave.m

if nargin < 6, problema = []; end

if exist('OCTAVE_VERSION')              %si se usa Octave   
    [Tn, Vn] = ode45octave('perturbacionodefile', [0,1], [k0;X0';Y0], [], F, G, problema);
else                                    %si se usa Matlab
    [Tn, Vn] = ode45('perturbacionodefile', [0,1], [k0;X0';Y0], [], F, G, problema);
end                                     %
[filas, columnas, ancho] = size(F);     %determina el tamaño del problema
k = Vn(end, 1);                         %extrae k
X = Vn(end, 2:filas+1);                 %extrae X 
Y = Vn(end, filas+2:filas+columnas+1)'; %extrae Y
