-
Notifications
You must be signed in to change notification settings - Fork 2
/
ERGraph_Occ.m
80 lines (80 loc) · 1.97 KB
/
ERGraph_Occ.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
function [Graph1,Graph2] = ERGraph_Occ(data1,data2,nv1,nv2,p,k)
nonZero1 = find(sum(data1,2));
nonZero2 = find(sum(data2,2));
newdata1=data1(nonZero1,:);
newdata2=data2(nonZero2,:);
nnv1=length(nonZero1);
nnv2=length(nonZero2);
dis11 = pdist2(newdata1,newdata1);
dis22 = pdist2(newdata2,newdata2);
[~,id1] = sort(dis11,2);
[~,id2] = sort(dis22,2);
maxR=-1;
for r = 1:100
G1=zeros(nnv1,nnv1);
G2=zeros(nnv2,nnv2);
for i=1:nnv1
for j=2:k
x1=rand;
if x1<p
G1(i,id1(i,j))=1;
G1(id1(i,j),i)=1;
end
end
end
for i=1:nnv2
for j=2:k
x2=rand;
if x2<p
G2(i,id2(i,j))=1;
G2(id2(i,j),i)=1;
end
end
end
if nnv1~=nv1
newG1 = zeros(nv1,nnv1);
k2=1;
for k1=1:nv1
if ~ismember(k1,nonZero1)
newG1(k1,:)=0;
else
newG1(k1,:)=G1(k2,:);
k2=k2+1;
end
end
newG1 = [newG1 zeros(nv1, nv1-nnv1)];
for k1=1:nv1
if ~ismember(k1,nonZero1)
newG1=[newG1(:,1:k1-1) circshift(newG1(:,k1:nv1),[0,1])];
end
end
G1=newG1;
end
if nnv2~=nv2
newG2 = zeros(nv2,nnv2);
k2=1;
for k1=1:nv2
if ~ismember(k1,nonZero2)
newG2(k1,:)=0;
else
newG2(k1,:)=G2(k2,:);
k2=k2+1;
end
end
newG2 = [newG2 zeros(nv2, nv2-nnv2)];
for k1=1:nv2
if ~ismember(k1,nonZero2)
newG2=[newG2(:,1:k1-1) circshift(newG2(:,k1:nv2),[0,1])];
end
end
G2=newG2;
end
R = corrcoef(G1,G2);
nz1 = find(sum(G1,2));
nz2 = find(sum(G2,2));
if R(1,2)>maxR && length(nz1)==length(nonZero1) && length(nz2)==length(nonZero2)
maxR=R(1,2);
Graph1=G1;
Graph2=G2;
end
end