37 if ((n < 1) || (n > 2))
40 double scale, hh, h, g, f;
42 for (i = n - 1; i > 0; i--)
49 for (k = 0; k < l + 1; k++)
50 scale += fabs (a[i][k]);
59 for (k = 0; k < l + 1; k++)
65 h+= a[i][k] * a[i][k];
69 g = (f > 0 ? -sqrt(h) : sqrt(h));
75 for (j = 0; j < l + 1; j++)
77 a[j][i] = a[i][j] / h;
79 for (k = 0; k < j + 1; k++)
80 g += a[j][k] * a[i][k];
82 for (k = j + 1; k < l + 1; k++)
83 g += a[k][j] * a[i][k];
92 for (j = 0; j < l + 1; j++)
95 e[j] = g = e[j] - hh * f;
96 for (k = 0; k < j + 1; k++)
97 a[j][k] -= (f * e[k] + g * a[i][k]);
114 for (i = 0; i < n; i++)
120 for (j = 0; j < l; j++)
123 for (k = 0; k < l; k++)
124 g += a[i][k] * a[k][j];
126 for (k = 0; k < l; k++)
127 a[k][j] -= g * a[k][i];
135 for (j = 0; j < l; j++)
136 a[j][i] = a[i][j] = 0.0;
144 inline const T
SIGN (
const T& a,
166 #define SQR(X) ((X) * (X)) 181 return absa * sqrt (1.0 +
SQR (absb / absa));
188 return absb * sqrt (1.0 +
SQR (absa / absb));
201 if ((n < 1) || (n > 2))
205 double s, r, p,g, f, dd, c, b;
207 for (i = 1; i < n; i++)
212 for (l = 0; l < n; l++)
218 for (m = l; m < n - 1; m++)
222 dd = fabs (d[m]) + fabs (d[m + 1]);
223 if (fabs (e[m]) + dd == dd)
231 cerr << std::endl << std::endl
232 <<
"EigenVector::tqli **** ERROR **** To many iterations in tqli" << std::endl
240 g = (d[l + 1] - d[l]) / (2.0 * e[1]);
242 g = d[m] - d[l] + e[l] / (g + SIGN (r, g));
246 for (i = m - 1; i >= l; i--)
261 r = (d[i] - g) * s + 2.0 * c * b;
262 d[i + 1] = g + (p = s * r);
267 for (k = 0; k < n; k++)
270 z[k][i + 1] = s * z[k][i] + c * f;
271 z[k][i] = c * z[k][i] - s * f;
276 if ((r == 0.0) && (i >= l))
KKStr operator+(const char *right) const
KKStr operator+(const char *left, const KKStr &right)
const T SIGN(const T &a, const T &b)
void tqli(kkint32 n, double *d, double *e, double z[2][2])
void Tred2(kkint32 n, double a[2][2], double *d, double *e)
KKException(const KKStr &_exceptionStr)
double pythag(const double a, const double b)
KKStr StrFromInt32(kkint32 i)