Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
162 views
1
function [G, iniciales] = formaciclos(recetas, p)
2
%formaciclos
3
% G = formaciclos(F, p)
4
%
5
% Construye las matrices c�clicas de per�odo p para una F constante. Por
6
% ejemplo, si p fuera 4 nos quedar�a
7
% |F0 F1 F2 F3| |F4 F5 F6 0 | |0 0 0 0 |
8
% G0 = |0 F0 F1 F2| G1 = |F3 F4 F5 F6| G2 = |0 0 0 0 |
9
% |0 0 F0 F1| |F2 F3 F4 F5| |F6 0 0 0 |
10
% |0 0 0 F0| |F1 F2 F3 F4| |F5 F6 0 0 |
11
%
12
% [G, iniciales] = formaciclos({F_1, F_2, F_3, ...}, [p_1, p_2, p_3, ...])
13
% F_i recetas i
14
% p_i n�mero de instantes en los que se usan las recetas i
15
% G recetas salida
16
% iniciales lista con los primeros procesos en cada instante
17
%
18
% Construye las matrices c�clicas de per�odo p para unas F que cambian en
19
% el tiempo. F debe escribirse entre llaves y p entre corchetes. Si p es
20
% un escalar se aplica a todas las recetas.
21
22
if nargin < 2, p = []; end
23
24
if ~iscell(recetas), recetas = {recetas}; end %redefine recetas como cell si no lo est� ya
25
numrec = length(recetas); %establece el n�mero de recetas
26
if isempty(p), p = 1; end %si p es [] resulta 1 para todos os casos
27
if size(p,2)==1, p=p.*ones(1,numrec); end %si p es un escalar se aplica a todas las recetas
28
29
for c1 = 1:numrec %para cada receta
30
filas(c1) = size(recetas{c1},1); %establece el n�mero de filas
31
columnas(c1) = size(recetas{c1},2); %establece el n�mero de columnas
32
ancho(c1) = size(recetas{c1},3); %establece el n�mero de pasos temporales
33
end %
34
ver = filas * p'; %establece el n�mero de filas totales
35
hor = columnas * p'; %establece el n�mero de columnas totales
36
G = zeros(ver, hor, 2); %define la variable para almacenar la salida
37
38
iniciales = []; %define la variable para almacenar la salida
39
procesos = 0; %define el n�mero de procesos inicial
40
htotal = 1; %la posici�n horizontal total es 1
41
vtotal = 1; %la posici�n vertical total es 1
42
for c0 = 1:numrec %para cada receta
43
for c1 = 1:p(c0) %para cada paso con la receta c0
44
h1 = htotal; %establece la posici�n horizontal inicial como la total
45
v1 = vtotal; %establece la posici�n vertical inicial como la total
46
c3 = 1; %define el ancho de la salida como 1
47
F = recetas{c0}; %almacena en F las recetas c0
48
iniciales = [iniciales, procesos+1:procesos+columnas(c0)]; %a�ade a iniciales los primeros procesos
49
procesos = procesos + filas(c0); %cuenta el n�mero de procesos
50
for c2 = 1:ancho(c0) %para cada ancho de las recetas
51
if h1 + columnas(c0) - 1 > hor %si la posici�n horizontal final superase al n�mero de columnas totales
52
h1 = 1; %la posici�n horizontal inicial es 1
53
c3 = c3 + 1; %aumenta el ancho de la salida
54
end %
55
h2 = h1 + columnas(c0) - 1; %establece la posici�n horizontal final
56
v2 = v1 + filas(c0) - 1; %establece la posici�n vertical final
57
G(v1:v2, h1:h2, c3) = F(:,:,c2); %pone F en la salida
58
h1 = h1 + columnas(c0); %a�ade el n�mero de columnas a la posici�n horizontal inicial
59
end %
60
htotal = htotal + columnas(c0); %a�ade el n�mero de columnas a la posici�n horizontal total
61
vtotal = vtotal + filas(c0); %a�ade el n�mero de filas a la posici�n vertical total
62
end %
63
end %
64
65