1
<programlisting linenumbering="numbered"><emphasis>/* -*- mode: C -*- */</emphasis>
2
<emphasis>/* </emphasis>
3
<emphasis> IGraph library.</emphasis>
4
<emphasis> Copyright (C) 2011-2012 Gabor Csardi </emphasis><csardi.gabor@gmail.com>
5
<emphasis> 334 Harvard st, Cambridge MA, 02139 USA</emphasis>
7
<emphasis> This program is free software; you can redistribute it and/or modify</emphasis>
8
<emphasis> it under the terms of the GNU General Public License as published by</emphasis>
9
<emphasis> the Free Software Foundation; either version 2 of the License, or</emphasis>
10
<emphasis> (at your option) any later version.</emphasis>
11
<emphasis> </emphasis>
12
<emphasis> This program is distributed in the hope that it will be useful,</emphasis>
13
<emphasis> but WITHOUT ANY WARRANTY; without even the implied warranty of</emphasis>
14
<emphasis> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</emphasis>
15
<emphasis> GNU General Public License for more details.</emphasis>
16
<emphasis> </emphasis>
17
<emphasis> You should have received a copy of the GNU General Public License</emphasis>
18
<emphasis> along with this program; if not, write to the Free Software</emphasis>
19
<emphasis> Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA </emphasis>
20
<emphasis> 02110-1301 USA</emphasis>
22
<emphasis>*/</emphasis>
24
<emphasis role="strong">#include</emphasis> <igraph.h>
26
int <emphasis role="strong">main</emphasis>() {
30
igraph_sparsemat_t Lsparse, Rsparse;
31
igraph_matrix_t adj, V;
32
<link linkend='igraph_vector_t'>igraph_vector_t</link> groups;
33
igraph_eigen_which_t which;
35
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&L, 0, 0);
36
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&R, 0, 0);
37
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&adj, 0, 0);
38
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&V, 0, 0);
39
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&groups, 0);
41
<emphasis role="strong"><link linkend='igraph_rng_seed'>igraph_rng_seed</link></emphasis>(<emphasis role="strong"><link linkend='igraph_rng_default'>igraph_rng_default</link></emphasis>(), 42);
43
<emphasis role="strong"><link linkend='igraph_tree'>igraph_tree</link></emphasis>(&g, 10, <emphasis>/* children= */</emphasis> 3, IGRAPH_TREE_UNDIRECTED);
45
<emphasis role="strong"><link linkend='igraph_get_adjacency'>igraph_get_adjacency</link></emphasis>(&g, &adj, IGRAPH_GET_ADJACENCY_BOTH, <emphasis>/*eids=*/</emphasis> 0);
47
which.pos=IGRAPH_EIGEN_LM;
49
<emphasis role="strong">igraph_eigen_matrix_symmetric</emphasis>(&adj, <emphasis>/*sparsemat=*/</emphasis> 0, <emphasis>/*fun=*/</emphasis> 0,
50
<emphasis role="strong"><link linkend='igraph_vcount'>igraph_vcount</link></emphasis>(&g), <emphasis>/*extra=*/</emphasis> 0,
51
<emphasis>/*algorithm=*/</emphasis> IGRAPH_EIGEN_LAPACK,
52
&which, <emphasis>/*options=*/</emphasis> 0, <emphasis>/*storage=*/</emphasis> 0,
53
<emphasis>/*values=*/</emphasis> 0, &V);
55
<emphasis role="strong">#define</emphasis> <emphasis role="strong">SEMI</emphasis>() \
56
<emphasis role="strong">do</emphasis> { \
57
<emphasis role="strong"><link linkend='igraph_scg_semiprojectors'>igraph_scg_semiprojectors</link></emphasis>(&groups, IGRAPH_SCG_SYMMETRIC, &L, &R, \
58
&Lsparse, &Rsparse, <emphasis>/*p=*/</emphasis> 0, \
59
IGRAPH_SCG_NORM_ROW); \
60
} <emphasis role="strong">while</emphasis>(0)
62
<emphasis role="strong">#define</emphasis> <emphasis role="strong">PRINTRES</emphasis>() \
63
<emphasis role="strong">do</emphasis> { \
64
<emphasis role="strong">printf</emphasis>("----------------------\n"); \
65
<emphasis role="strong">igraph_matrix_print</emphasis>(&L); \
66
<emphasis role="strong">printf</emphasis>("---\n"); \
67
<emphasis role="strong">igraph_matrix_print</emphasis>(&R); \
68
<emphasis role="strong">printf</emphasis>("---\n"); \
69
} <emphasis role="strong">while</emphasis> (0)
71
<emphasis>/* -------------- */</emphasis>
73
<emphasis role="strong"><link linkend='igraph_scg_grouping'>igraph_scg_grouping</link></emphasis>(&V, &groups, <emphasis>/*intervals=*/</emphasis> 3,
74
<emphasis>/*intervals_vector=*/</emphasis> 0, IGRAPH_SCG_SYMMETRIC,
75
IGRAPH_SCG_OPTIMUM, <emphasis>/*p=*/</emphasis> 0, <emphasis>/*maxiter=*/</emphasis> 10000);
76
<emphasis role="strong">SEMI</emphasis>();
77
<emphasis role="strong">PRINTRES</emphasis>();
79
<emphasis>/* -------------- */</emphasis>
81
<emphasis role="strong"><link linkend='igraph_scg_grouping'>igraph_scg_grouping</link></emphasis>(&V, &groups, <emphasis>/*intervals=*/</emphasis> 2,
82
<emphasis>/*intervals_vector=*/</emphasis> 0, IGRAPH_SCG_SYMMETRIC,
83
IGRAPH_SCG_INTERV_KM, <emphasis>/*p=*/</emphasis> 0, <emphasis>/*maxiter=*/</emphasis> 10000);
84
<emphasis role="strong">SEMI</emphasis>();
85
<emphasis role="strong">PRINTRES</emphasis>();
87
<emphasis>/* -------------- */</emphasis>
89
<emphasis role="strong"><link linkend='igraph_scg_grouping'>igraph_scg_grouping</link></emphasis>(&V, &groups, <emphasis>/*intervals=*/</emphasis> 2,
90
<emphasis>/*intervals_vector=*/</emphasis> 0, IGRAPH_SCG_SYMMETRIC,
91
IGRAPH_SCG_INTERV, <emphasis>/*p=*/</emphasis> 0, <emphasis>/*maxiter=*/</emphasis> 10000);
92
<emphasis role="strong">SEMI</emphasis>();
93
<emphasis role="strong">PRINTRES</emphasis>();
95
<emphasis>/* -------------- */</emphasis>
97
<emphasis role="strong"><link linkend='igraph_scg_grouping'>igraph_scg_grouping</link></emphasis>(&V, &groups, <emphasis>/*(ignored) intervals=*/</emphasis> 0,
98
<emphasis>/*intervals_vector=*/</emphasis> 0, IGRAPH_SCG_SYMMETRIC,
99
IGRAPH_SCG_EXACT, <emphasis>/*p=*/</emphasis> 0, <emphasis>/*maxiter=*/</emphasis> 10000);
100
<emphasis role="strong">SEMI</emphasis>();
101
<emphasis role="strong">PRINTRES</emphasis>();
103
<emphasis>/* -------------- */</emphasis>
105
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&groups);
106
<emphasis role="strong"><link linkend='igraph_matrix_destroy'>igraph_matrix_destroy</link></emphasis>(&V);
107
<emphasis role="strong"><link linkend='igraph_matrix_destroy'>igraph_matrix_destroy</link></emphasis>(&adj);
108
<emphasis role="strong"><link linkend='igraph_destroy'>igraph_destroy</link></emphasis>(&g);
110
<emphasis role="strong">return</emphasis> 0;