function [sk, sX, sY, sm, U, iU] = perturbacion(F, G, k, X, Y, problema, grado)1%perturbacion2% [sk, sX, sY] = perturbacion(F, G, k, X, Y)3%4% Series perturbativas para el problema de autovalores, para VN o para TE.5%6% [sk, sX, sY, sm, U, iU] = perturbacion(F, G, k, X, Y, problema, grado)7% F recetas en tiempo discreto con los procesos de producci�n8% G recetas en tiempo discreto con la perturbaci�n9% k autovalor o factor10% X autovector por la izquierda o intensidades11% Y autovector por la derecha o valores12% problema para autovalores 0, para VN 1 (por defecto), y para TE 213% grado grado de la serie (por defecto 100)14% sk serie para el factor15% sX serie para las intensidades16% sY serie para los valores17% sm serie para el multiplicador de la normalizaci�n18% U matriz de coeficientes del sistema lineal19% iU inversa de la matriz de coeficientes20%21% F y G deben tener la misma dimensi�n. Las series usan el formato de los22% polinomios en Matlab-Octave. Podemos aproximar la soluci�n de VN (o23% para los otros problemas) para las recetas F + h*G para un escalar h24% dado con el comando25% formapolyval(sk, h) para obtener el factor26% formapolyval(sX, h)' para las intensidades27% formapolyval(sY, h) para los valores28% siempre que estemos dentro del radio de convergencia y aplicaci�n de29% las series.3031if nargin < 6, problema = []; end32if nargin < 7, grado = []; end3334if isempty(problema), problema = 1; end %por defecto calcula las series para VN35if isempty(grado), grado = 100; end %por defecto el grado de las series es 1003637[filas, columnas, ancho] = size(F); %establece el tama�o del problema38if problema == 0, fbas = (X == X); cbas = (Y == Y); else fbas = (X ~= 0); cbas = (Y ~= 0); end %determina los procesos y materias b�sicos39if problema == 1, q = 1; else q = 0; end %si q es 1, k(h) - X(h)(A + h M)Y(h) = 0; si q es 0, 1 - X(h)(A + h M)Y(h) = 040if sum(fbas) ~= sum(cbas), disp(['Atenci�n, la soluci�n no es cuadrada']); end %avisa si la soluci�n no es cuadrada41X0 = X(fbas); %extrae las intensidades de los procesos b�sicos42for c2 = 1:ancho-2 %para el resto de pasos temporales43X0 = [X0, X(fbas)./k^c2]; %completa las intensidades que simbolizan la evoluci�n de los procesos44end %45if ancho > 2 %si hay m�s de dos pasos temporales46Yr = F(fbas,cbas,ancho)*Y(cbas)./k; Y0 = Yr; %calcula el Yr de la materia que simboliza el proceso en el �ltimo paso temporal y lo agrega a los valores47for c2 = ancho-1:-1:3 %para el resto de pasos temporales48Yr = (F(fbas,cbas,c2)*Y(cbas) + Yr)./k; Y0 = [Yr;Y0]; %calcula Yr de la materia que simboliza el proceso para ese paso temporal y lo agrega a los valores49end %50Y0 = [Y(cbas); Y0]; %agrega el Y de las materias b�sicas a los valores51else %si s�lo hay dos pasos temporales52Y0 = Y(cbas); %los valores son los de las materias b�sicas53end %54[A, B] = formaab(F(fbas,cbas,:)); %establece A y B para los procesos y materias b�sicos55[M, N] = formaab(G(fbas,cbas,:)); %establece M y N para los procesos y materias b�sicos5657[sk, sXn, sYn, sm, U, iU] = serieperturbacion(A, B, M, N, k, X0, Y0, q, grado, sum(fbas)); %calcula las series5859sX = zeros(filas, grado+1); %define la variable para almacenar la serie de las X60sX(fbas, :) = sXn(1:sum(fbas), :); %extrae las series de las intensidades de los procesos b�sicos y las a�ade61sY = zeros(columnas, grado+1); %define la variable para almacenar la serie de los Y62sY(cbas, :) = sYn(1:sum(cbas), :); %extrae las series de los valores de las materias b�sicas y las a�ade6364656667function [k, X, Y, m, U, iU] = serieperturbacion(A, B, M, N, k0, X0, Y0, q, grado, filasf)68%Resuelve sucesivamente el sistema lineal U dZn = Rn para cada grado n69% | 0 -A*Y0 B-k0*A 1| |Xn| | |70% |(-A*Y0)' q -X0*A 0| |kn| = |Rn|71% |(B-k0*A)' (-X0*A)' 0 0| |Yn| | |72% | 1 0 0 0| |mn| | |73[filas, columnas] = size(A); %establece el tama�o del problema74normaliza = [ones(filasf,1); zeros(filas-filasf,1)]; %establece que la suma de las X de los procesos que se inician sea cte75U = [zeros(filas), -A*Y0 , B-k0*A , normaliza ; %establece la matriz del sistema lineal76(-A*Y0)' , q , -X0*A , 0 ; %77(B-k0*A)' , (-X0*A)', zeros(columnas) , zeros(columnas,1); %78normaliza' , 0 , zeros(1,columnas), 0 ]; %79iU = inv(U); %calcula U^-180r = grado+1; %establece el n�mero de elementos de las series81X=zeros(filas,r); k=zeros(1,r); Y=zeros(columnas,r); m=zeros(1,r); %define dX, dk, dY, dm para almacenar las soluciones82X(:,r-(0))=X0'; k(r-(0))=k0; Y(:,r-(0))=Y0; m(:,r-(0))=0; %establece los t�rminos de grado 083for cn = 1:grado %para cada grado n84ci = 0; %construye Rn con los t�rminos para i = 085Rn = [M*Y(:,r-(cn-ci-1))*k(r-(ci)) - N*Y(:,r-(cn-1)) ; %86X(:,r-(ci))'*M*Y(:,r-(cn-ci-1)) ; %87(k(r-(ci))*X(:,r-(cn-ci-1))'*M - X(:,r-(cn-1))'*N)'; %880 ]; %89for ci = 1:cn-1 %a�ade a Rn los t�rminos para i = 1:n-190Rn = Rn + [k(r-(ci))*A*Y(:,r-(cn-ci)) + M*Y(:,r-(cn-ci-1))*k(r-(ci)) ;91X(:,r-(ci))'*A*Y(:,r-(cn-ci)) + X(:,r-(ci))'*M*Y(:,r-(cn-ci-1));92(k(r-(ci))*X(:,r-(cn-ci))'*A + k(r-(ci))*X(:,r-(cn-ci-1))'*M)' ;930 ];94end %95Zn = iU * Rn; %resuelve el sistema lineal con Zn = U^-1 Rn96X(:,r-(cn)) = Zn(1:filas); %extrae de la soluci�n Xn97k(r-(cn)) = Zn(filas+1); %extrae de la soluci�n kn98Y(:,r-(cn)) = Zn(filas+2:filas+columnas+1); %extrae de la soluci�n Yn99m(r-(cn)) = Zn(filas+columnas+2); %extrae de la soluci�n mn100end %101102103