8 #define MAX(a, b) ((a)>(b)?(a):(b)) 13 static double hypot2(
double x,
double y) {
19 static void tred2(
double V[
n][
n],
double d[n],
double e[n]) {
28 for (j = 0; j <
n; j++) {
34 for (i = n-1; i > 0; i--) {
40 for (k = 0; k < i; k++) {
41 scale = scale + fabs(d[k]);
45 for (j = 0; j < i; j++) {
54 for (k = 0; k < i; k++) {
66 for (j = 0; j < i; j++) {
72 for (j = 0; j < i; j++) {
75 g = e[j] + V[j][j] * f;
76 for (k = j+1; k <= i-1; k++) {
83 for (j = 0; j < i; j++) {
88 for (j = 0; j < i; j++) {
91 for (j = 0; j < i; j++) {
94 for (k = j; k <= i-1; k++) {
95 V[k][j] -= (f * e[k] + g * d[k]);
106 for (i = 0; i < n-1; i++) {
111 for (k = 0; k <= i; k++) {
112 d[k] = V[k][i+1] / h;
114 for (j = 0; j <= i; j++) {
116 for (k = 0; k <= i; k++) {
117 g += V[k][i+1] * V[k][j];
119 for (k = 0; k <= i; k++) {
124 for (k = 0; k <= i; k++) {
128 for (j = 0; j <
n; j++) {
138 static void tql2(
double V[
n][
n],
double d[n],
double e[n]) {
146 double g,p,r,dl1,h,f,tst1,eps;
147 double c,c2,c3,el1,s,s2;
149 for (i = 1; i <
n; i++) {
156 eps = pow(2.0,-52.0);
157 for (l = 0; l <
n; l++) {
161 tst1 =
MAX(tst1,fabs(d[l]) + fabs(e[l]));
164 if (fabs(e[m]) <= eps*tst1) {
181 p = (d[l+1] - g) / (2.0 * e[l]);
186 d[l] = e[l] / (p + r);
187 d[l+1] = e[l] * (p + r);
190 for (i = l+2; i <
n; i++) {
204 for (i = m-1; i >= l; i--) {
214 p = c * d[i] - s * g;
215 d[i+1] = h + s * (c * g + s * d[i]);
219 for (k = 0; k <
n; k++) {
221 V[k][i+1] = s * V[k][i] + c * h;
222 V[k][i] = c * V[k][i] - s * h;
225 p = -s * s2 * c3 * el1 * e[l] / dl1;
231 }
while (fabs(e[l]) > eps*tst1);
239 for (i = 0; i < n-1; i++) {
242 for (j = i+1; j <
n; j++) {
251 for (j = 0; j <
n; j++) {
263 for (i = 0; i <
n; i++) {
264 for (j = 0; j <
n; j++) {
static void tql2(double V[n][n], double d[n], double e[n])
static double hypot2(double x, double y)
void eigen_decomposition(double A[n][n], double V[n][n], double d[n])
static void tred2(double V[n][n], double d[n], double e[n])