-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathsemiKron.m
113 lines (90 loc) · 3.79 KB
/
semiKron.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
function [C] = semiKron(A,ZB)
%SEMIKRON Summary of this function goes here
% Detailed explanation goes here
if isa(A,'logicalZonotope') && isa(ZB,'logicalZonotope')
% res{1} =semiKron(A.c,ZB);
% index=2;
% for i =1:length(A.G)
% res{index} =semiKron(A.G{i},ZB);
% index=index+1;
% end
% C= logicalZonotope.encloseMany(res);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m ,n]=size(A.c);
[p ,q]=size(ZB.c);
alpha = lcm(n,p);
newCen = (kron(A.c,eye(alpha/n)) * kron(ZB.c,eye(alpha/p)) );%>1;
%newCen = mtimesAndOr(kron(A.c,eye(alpha/n)) , kron(ZB.c,eye(alpha/p)));
%newCen = mod(kron(A.c,eye(alpha/n)) * kron(ZB.c,eye(alpha/p)),2);
index =1;
newGen ={};
for i =1:length(ZB.G)
newGen{index} = (kron(A.c,eye(alpha/n)) * kron(ZB.G{i},eye(alpha/p)) );%>1;
%newGen{index} = mtimesAndOr(kron(A.c,eye(alpha/n)) , kron(ZB.G{i},eye(alpha/p)));
%newGen{index} = mod(kron(A.c,eye(alpha/n)) * kron(ZB.G{i},eye(alpha/p)),2);
index=index+1;
end
for i =1:length(A.G)
newGen{index} = (kron(A.G{i},eye(alpha/n)) * kron(ZB.c,eye(alpha/p)) );%>1;
%newGen{index} = mtimesAndOr(kron(A.G{i},eye(alpha/n)) , kron(ZB.c,eye(alpha/p)));
%newGen{index} = mod(kron(A.G{i},eye(alpha/n)) * kron(ZB.c,eye(alpha/p)),2);
index=index+1;
end
for i =1:length(A.G)
for j=1:length(ZB.G)
newGen{index} = (kron(A.G{i},eye(alpha/n)) * kron(ZB.G{j},eye(alpha/p)));%>1;
%newGen{index} = mtimesAndOr(kron(A.G{i},eye(alpha/n)) , kron(ZB.G{j},eye(alpha/p)));
%newGen{index} = mod(kron(A.G{i},eye(alpha/n)) * kron(ZB.G{j},eye(alpha/p)),2);
index=index+1;
end
end
C = logicalZonotope(newCen,newGen);
%C = unique(C);
elseif ~isa(A,'logicalZonotope')
% [m ,n]=size(A);
%
% [p ,q]=size(ZB.c);
%
% alpha = lcm(n,p);
% %C = kron(eye(alpha/n),A) * tensorMultiplication(eye(alpha/p),ZB);
% C = kron(A,eye(alpha/n)) * tensorMultiplication(ZB,eye(alpha/p));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m ,n]=size(A);
[p ,q]=size(ZB.c);
alpha = lcm(n,p);
%C = kron(eye(alpha/n),A) * tensorMultiplication(eye(alpha/p),ZB);
Ccen = (kron(A,eye(alpha/n)) * kron(ZB.c,eye(alpha/p)) );%>1;
%Ccen = mtimesAndOr(kron(A,eye(alpha/n)) , kron(ZB.c,eye(alpha/p)));
%Ccen = mod(kron(A,eye(alpha/n)) * kron(ZB.c,eye(alpha/p)),2);
for i =1:length(ZB.G)
Cgen{i} = (kron(A,eye(alpha/n)) * kron(ZB.G{i},eye(alpha/p)) );%>1;
%Cgen{i} = mtimesAndOr(kron(A,eye(alpha/n)) , kron(ZB.G{i},eye(alpha/p)));
%Cgen{i} = mod(kron(A,eye(alpha/n)) * kron(ZB.G{i},eye(alpha/p)),2);
end
C = logicalZonotope(Ccen,Cgen);
%C = unique(C);
elseif ~isa(ZB,'logicalZonotope')
% [m ,n]=size(A);
%
% [p ,q]=size(ZB.c);
%
% alpha = lcm(n,p);
% %C = kron(eye(alpha/n),A) * tensorMultiplication(eye(alpha/p),ZB);
% C = kron(A,eye(alpha/n)) * tensorMultiplication(ZB,eye(alpha/p));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[m ,n]=size(A.c);
[p ,q]=size(ZB);
alpha = lcm(n,p);
%C = kron(eye(alpha/n),A) * tensorMultiplication(eye(alpha/p),ZB);
Ccen = (kron(A.c,eye(alpha/n)) * kron(ZB,eye(alpha/p)) );%>1;
%Ccen = mtimesAndOr(kron(A,eye(alpha/n)) , kron(ZB.c,eye(alpha/p)));
%Ccen = mod(kron(A,eye(alpha/n)) * kron(ZB.c,eye(alpha/p)),2);
for i =1:length(A.G)
Cgen{i} = (kron(A.G{i},eye(alpha/n)) * kron(ZB,eye(alpha/p)) );%>1;
%Cgen{i} = mtimesAndOr(kron(A,eye(alpha/n)) , kron(ZB.G{i},eye(alpha/p)));
%Cgen{i} = mod(kron(A,eye(alpha/n)) * kron(ZB.G{i},eye(alpha/p)),2);
end
C = logicalZonotope(Ccen,Cgen);
%C = unique(C);
end
end