function [G, iniciales] = formaciclos(recetas, p)1%formaciclos2% G = formaciclos(F, p)3%4% Construye las matrices c�clicas de per�odo p para una F constante. Por5% ejemplo, si p fuera 4 nos quedar�a6% |F0 F1 F2 F3| |F4 F5 F6 0 | |0 0 0 0 |7% G0 = |0 F0 F1 F2| G1 = |F3 F4 F5 F6| G2 = |0 0 0 0 |8% |0 0 F0 F1| |F2 F3 F4 F5| |F6 0 0 0 |9% |0 0 0 F0| |F1 F2 F3 F4| |F5 F6 0 0 |10%11% [G, iniciales] = formaciclos({F_1, F_2, F_3, ...}, [p_1, p_2, p_3, ...])12% F_i recetas i13% p_i n�mero de instantes en los que se usan las recetas i14% G recetas salida15% iniciales lista con los primeros procesos en cada instante16%17% Construye las matrices c�clicas de per�odo p para unas F que cambian en18% el tiempo. F debe escribirse entre llaves y p entre corchetes. Si p es19% un escalar se aplica a todas las recetas.2021if nargin < 2, p = []; end2223if ~iscell(recetas), recetas = {recetas}; end %redefine recetas como cell si no lo est� ya24numrec = length(recetas); %establece el n�mero de recetas25if isempty(p), p = 1; end %si p es [] resulta 1 para todos os casos26if size(p,2)==1, p=p.*ones(1,numrec); end %si p es un escalar se aplica a todas las recetas2728for c1 = 1:numrec %para cada receta29filas(c1) = size(recetas{c1},1); %establece el n�mero de filas30columnas(c1) = size(recetas{c1},2); %establece el n�mero de columnas31ancho(c1) = size(recetas{c1},3); %establece el n�mero de pasos temporales32end %33ver = filas * p'; %establece el n�mero de filas totales34hor = columnas * p'; %establece el n�mero de columnas totales35G = zeros(ver, hor, 2); %define la variable para almacenar la salida3637iniciales = []; %define la variable para almacenar la salida38procesos = 0; %define el n�mero de procesos inicial39htotal = 1; %la posici�n horizontal total es 140vtotal = 1; %la posici�n vertical total es 141for c0 = 1:numrec %para cada receta42for c1 = 1:p(c0) %para cada paso con la receta c043h1 = htotal; %establece la posici�n horizontal inicial como la total44v1 = vtotal; %establece la posici�n vertical inicial como la total45c3 = 1; %define el ancho de la salida como 146F = recetas{c0}; %almacena en F las recetas c047iniciales = [iniciales, procesos+1:procesos+columnas(c0)]; %a�ade a iniciales los primeros procesos48procesos = procesos + filas(c0); %cuenta el n�mero de procesos49for c2 = 1:ancho(c0) %para cada ancho de las recetas50if h1 + columnas(c0) - 1 > hor %si la posici�n horizontal final superase al n�mero de columnas totales51h1 = 1; %la posici�n horizontal inicial es 152c3 = c3 + 1; %aumenta el ancho de la salida53end %54h2 = h1 + columnas(c0) - 1; %establece la posici�n horizontal final55v2 = v1 + filas(c0) - 1; %establece la posici�n vertical final56G(v1:v2, h1:h2, c3) = F(:,:,c2); %pone F en la salida57h1 = h1 + columnas(c0); %a�ade el n�mero de columnas a la posici�n horizontal inicial58end %59htotal = htotal + columnas(c0); %a�ade el n�mero de columnas a la posici�n horizontal total60vtotal = vtotal + filas(c0); %a�ade el n�mero de filas a la posici�n vertical total61end %62end %636465