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, 02138 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
<emphasis role="strong">#define</emphasis> <emphasis role="strong">SIZE</emphasis> (1000)
28
int <emphasis role="strong">main</emphasis>() {
30
igraph_matrix_t M, M2;
31
<link linkend='igraph_vector_t'>igraph_vector_t</link> lambda;
33
<link linkend='igraph_vector_t'>igraph_vector_t</link> groups;
34
<link linkend='igraph_vector_t'>igraph_vector_t</link> ivec;
38
<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);
40
<emphasis>/* Symmetric matrix, exponentially distributed elements */</emphasis>
42
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&M, SIZE, SIZE);
43
n=<emphasis role="strong"><link linkend='igraph_matrix_nrow'>igraph_matrix_nrow</link></emphasis>(&M);
44
<emphasis role="strong">for</emphasis> (i=0; i<n; i++) {
45
<emphasis role="strong">for</emphasis> (j=0; j<n; j++) {
46
<emphasis role="strong"><link linkend='MATRIX'>MATRIX</link></emphasis>(M, i, j) = <emphasis role="strong">igraph_rng_get_exp</emphasis>(<emphasis role="strong"><link linkend='igraph_rng_default'>igraph_rng_default</link></emphasis>(), 1);
49
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&M2, n, n);
50
<emphasis role="strong"><link linkend='igraph_matrix_update'>igraph_matrix_update</link></emphasis>(&M2, &M);
51
<emphasis role="strong"><link linkend='igraph_matrix_transpose'>igraph_matrix_transpose</link></emphasis>(&M2);
52
<emphasis role="strong"><link linkend='igraph_matrix_add'>igraph_matrix_add</link></emphasis>(&M, &M2);
53
<emphasis role="strong"><link linkend='igraph_matrix_scale'>igraph_matrix_scale</link></emphasis>(&M, 0.5);
54
<emphasis role="strong"><link linkend='igraph_matrix_destroy'>igraph_matrix_destroy</link></emphasis>(&M2);
56
<emphasis>/* Get first (most positive) two eigenvectors */</emphasis>
58
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&lambda, 0);
59
<emphasis role="strong"><link linkend='igraph_matrix_init'>igraph_matrix_init</link></emphasis>(&V, 0, 0);
60
<emphasis role="strong"><link linkend='igraph_lapack_dsyevr'>igraph_lapack_dsyevr</link></emphasis>(&M, IGRAPH_LAPACK_DSYEV_SELECT, <emphasis>/*vl=*/</emphasis> 0, <emphasis>/*vu=*/</emphasis> 0,
61
<emphasis>/*vestimate=*/</emphasis> 0, <emphasis>/*il=*/</emphasis> n-1, <emphasis>/*iu=*/</emphasis> n,
62
<emphasis>/*abstol=*/</emphasis> 0.0, <emphasis>/*values=*/</emphasis> &lambda, <emphasis>/*vectors=*/</emphasis> &V,
63
<emphasis>/*support=*/</emphasis> 0);
65
<emphasis>/* Grouping */</emphasis>
67
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&groups, 0);
68
<emphasis role="strong"><link linkend='igraph_vector_init'>igraph_vector_init</link></emphasis>(&ivec, 2);
69
<emphasis role="strong"><link linkend='VECTOR'>VECTOR</link></emphasis>(ivec)[0] = 2; <emphasis role="strong"><link linkend='VECTOR'>VECTOR</link></emphasis>(ivec)[1] = 3;
70
<emphasis role="strong"><link linkend='igraph_scg_grouping'>igraph_scg_grouping</link></emphasis>(&V, &groups, <emphasis>/*invervals=*/</emphasis> 0,
71
<emphasis>/*intervals_vector=*/</emphasis> &ivec, IGRAPH_SCG_SYMMETRIC,
72
IGRAPH_SCG_OPTIMUM, <emphasis>/*p=*/</emphasis> 0, <emphasis>/*maxiter=*/</emphasis> 100);
74
<emphasis role="strong">igraph_vector_print</emphasis>(&groups);
76
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&ivec);
77
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&groups);
78
<emphasis role="strong"><link linkend='igraph_vector_destroy'>igraph_vector_destroy</link></emphasis>(&lambda);
79
<emphasis role="strong"><link linkend='igraph_matrix_destroy'>igraph_matrix_destroy</link></emphasis>(&V);
80
<emphasis role="strong"><link linkend='igraph_matrix_destroy'>igraph_matrix_destroy</link></emphasis>(&M);
82
<emphasis role="strong">return</emphasis> 0;