public void tqli2() { int n = rows; int m; int l; int iter; int i; int k; double s; double r; double p; ; double g; double f; double dd; double c; double b; for (i = 2; i <= n; i++) { e[i - 2] = e[i - 1]; } e[n - 1] = 0.0; for (l = 1; l <= n; l++) { iter = 0; do { for (m = l; m <= (n - 1); m++) { dd = Math.abs(d[m - 1]) + Math.abs(d[m]); if (Math.abs(e[m - 1]) + dd == dd) break; } if (m != l) { iter++; if (iter == 30) { System.out.print("Too many iterations in tqli"); // Just dont want this to exit apollo if (jalview.gui.AlignFrame.exitOnClose()) System.exit(0); } else { // System.out.println("Iteration " + iter); } g = (d[l] - d[l - 1]) / (2.0 * e[l - 1]); r = Math.sqrt((g * g) + 1.0); g = d[m - 1] - d[l - 1] + e[l - 1] / (g + sign(r, g)); c = 1.0; s = c; p = 0.0; for (i = m - 1; i >= l; i--) { f = s * e[i - 1]; b = c * e[i - 1]; if (Math.abs(f) >= Math.abs(g)) { c = g / f; r = Math.sqrt((c * c) + 1.0); e[i] = f * r; s = 1.0 / r; c *= s; } else { s = f / g; r = Math.sqrt((s * s) + 1.0); e[i] = g * r; c = 1.0 / r; s *= c; } g = d[i] - p; r = (d[i - 1] - g) * s + 2.0 * c * b; p = s * r; d[i] = g + p; g = c * r - b; for (k = 1; k <= n; k++) { f = value[k - 1][i]; value[k - 1][i] = s * value[k - 1][i - 1] + c * f; value[k - 1][i - 1] = c * value[k - 1][i - 1] - s * f; } } d[l - 1] = d[l - 1] - p; e[l - 1] = g; e[m - 1] = 0.0; } } while (m != l); } }