+ double init = 1.0 / size;
+ double dev;
+ int i, iter = 0;
+
+ /* better convergence. */
+ for (i = 0; i < size; ++i)
+ x[i] = init;
+
+ stat_ev_dbl("execfreq_matrix_size", size);
+ stat_ev_tim_push();
+ do {
+ ++iter;
+ dev = gs_matrix_gauss_seidel(mat, x, size);
+ } while(fabs(dev) > SEIDEL_TOLERANCE);
+ stat_ev_tim_pop("execfreq_seidel_time");
+ stat_ev_dbl("execfreq_seidel_iter", iter);
+
+#ifdef COMPARE_AGAINST_GAUSSJORDAN
+ {
+ double *nw = xmalloc(size * size * sizeof(*nw));
+ double *nx = xmalloc(size * sizeof(*nx));
+
+ memset(nx, 0, size * sizeof(*nx));
+ gs_matrix_export(mat, nw, size);
+
+ stat_ev_tim_push();
+ firm_gaussjordansolve(nw, nx, size);
+ stat_ev_tim_pop("execfreq_jordan_time");
+
+ xfree(nw);
+ xfree(nx);
+ }
+#endif
+
+ return x;