LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
mmap_max.m
1function MMAP = mmap_max(MMAPa, MMAPb, k)
2% k is the length of the synchronisation queue
3
4D0a = MMAPa{1}; D0b = MMAPb{1};
5D1a = MMAPa{2}; D1b = MMAPb{2};
6
7na = length(D0a); nb = length(D0b);
8
9Ia = eye(na); Ib = eye(nb);
10
11Za = zeros(na); Zb = zeros(nb); Z = kron(Za,Zb);
12
13A0B0 = krons(D0a,D0b); %
14A1IB = kron(D1a,Ib); %
15IAB1 = kron(Ia,D1b); %
16IAB0 = kron(Ia,D0b); %
17A0IB = kron(D0a,Ib); %
18
19IAB1 = kron(Ia,D1b);
20A1IB = kron(D1a,Ib);
21
22M0 = zeros(size(A0B0)*(1+k*2));
23M1 = zeros(size(M0));
24
25[iRows,iCols] = size(A0B0);
26
27M0(1:iRows, 1:iCols*3) = [A0B0 A1IB IAB1];
28
29for i=2:1+(k-1)*2
30 r = iRows*(i-1);
31 c = iCols*(i-1);
32 M0(r+1:r+iRows, c+1:c+iCols) = A0B0;
33end
34
35r = iRows*(2*k-1);
36c = iCols*(2*k-1);
37M0(r+1:r+iRows, c+1:c+iCols) = IAB0;
38r = r+iRows;
39c = c+iCols;
40M0(r+1:r+iRows, c+1:c+iCols) = A0IB;
41
42
43for i=2:k
44 r = iRows*(1+2*(i-2));
45 c = iCols*(3+2*(i-2));
46 M0(r+1:r+iRows, c+1:c+iCols) = A1IB;
47 M0(r+1+iRows:r+iRows*2, c+1+iCols:c+iCols*2) = IAB1;
48end
49
50M1(iRows+1:iRows*3, 1:iCols) = [IAB1; A1IB];
51
52for i=2:k
53 r = iRows*(1+2*(i-1));
54 c = iCols*(1+2*(i-2));
55 M1(r+1:r+iRows, c+1:c+iCols) = IAB1;
56 M1(r+1+iRows:r+iRows*2, c+1+iCols:c+iCols*2) = A1IB;
57end
58
59MMAP=cell(1,size(MMAPa,2));
60
61MMAP{1} = M0;
62MMAP{2} = M1;
63
64for cls = 3:size(MMAPa,2)
65
66 Mc = zeros(size(M0));
67
68 D1cb = MMAPb{cls};
69 D1ca = MMAPa{cls};
70
71 IAB1 = kron(Ia,D1cb);
72 A1IB = kron(D1ca,Ib);
73
74 Mc(iRows+1:iRows*3, 1:iCols) = [IAB1; A1IB];
75
76 for i=2:k
77 r = iRows*(1+2*(i-1));
78 c = iCols*(1+2*(i-2));
79 Mc(r+1:r+iRows, c+1:c+iCols) = IAB1;
80 Mc(r+1+iRows:r+iRows*2, c+1+iCols:c+iCols*2) = A1IB;
81 end
82 MMAP{cls} = Mc;
83end
84
85end