]> AND Private Git Repository - these_gilles.git/blob - THESE/codes/graphe/Ncut_9/discretisation.m
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
11 oct
[these_gilles.git] / THESE / codes / graphe / Ncut_9 / discretisation.m
1 function [EigenvectorsDiscrete,EigenVectors]=discretisation(EigenVectors)\r
2\r
3 % EigenvectorsDiscrete=discretisation(EigenVectors)\r
4\r
5 % Input: EigenVectors = continuous Ncut vector, size = ndata x nbEigenvectors \r
6 % Output EigenvectorsDiscrete = discrete Ncut vector, size = ndata x nbEigenvectors\r
7 %\r
8 % Timothee Cour, Stella Yu, Jianbo Shi, 2004\r
9 \r
10 [n,k]=size(EigenVectors);\r
11 \r
12 vm = sqrt(sum(EigenVectors.*EigenVectors,2));\r
13 EigenVectors = EigenVectors./repmat(vm,1,k);\r
14 \r
15 R=zeros(k);\r
16 R(:,1)=EigenVectors(1+round(rand(1)*(n-1)),:)';\r
17 c=zeros(n,1);\r
18 for j=2:k\r
19     c=c+abs(EigenVectors*R(:,j-1));\r
20     [minimum,i]=min(c);\r
21     R(:,j)=EigenVectors(i,:)';\r
22 end\r
23 \r
24 lastObjectiveValue=0;\r
25 exitLoop=0;\r
26 nbIterationsDiscretisation = 0;\r
27 nbIterationsDiscretisationMax = 20;%voir\r
28 while exitLoop== 0 \r
29     nbIterationsDiscretisation = nbIterationsDiscretisation + 1 ;   \r
30     EigenvectorsDiscrete = discretisationEigenVectorData(EigenVectors*R);\r
31     [U,S,V] = svd(EigenvectorsDiscrete'*EigenVectors,0);    \r
32     NcutValue=2*(n-trace(S));\r
33     \r
34     if abs(NcutValue-lastObjectiveValue) < eps | nbIterationsDiscretisation > nbIterationsDiscretisationMax\r
35         exitLoop=1;\r
36     else\r
37         lastObjectiveValue = NcutValue;\r
38         R=V*U';\r
39     end\r
40 end