29 T tresh, theta, tau, t, sm, s, h, g,
c;
30 T volatile temp1, temp2;
32 for (ip = 0; ip < N; ip++)
34 for (iq = 0; iq < N; iq++)
40 for (ip = 0; ip < N; ip++)
42 b[ip] = (*d)[ip] = a[ip][ip];
49 for (i = 1; i <= 200; i++)
52 for (ip = 0; ip < N - 1; ip++)
54 for (iq = ip + 1; iq < N; iq++)
65 tresh =
T(0.2) * sm / (N * N);
71 for (ip = 0; ip < N - 1; ip++)
73 for (iq = ip + 1; iq < N; iq++)
75 g =
T(100) * abs(a[iq][ip]);
76 temp1 = abs((*d)[ip]) + g;
77 temp2 = abs((*d)[iq]) + g;
78 if (i > 4 && temp1 == abs((*d)[ip]) && temp2 == abs((*d)[iq]))
82 else if (abs(a[iq][ip]) > tresh)
84 h = (*d)[iq] - (*d)[ip];
92 theta =
T(0.5) * h / a[iq][ip];
93 t =
T(1) / (abs(theta) +
sqrt(
T(1) + theta * theta));
101 tau = s / (
T(1) +
c);
108 for (j = 0; j <= ip - 1; j++)
112 for (j = ip + 1; j <= iq - 1; j++)
116 for (j = iq + 1; j < N; j++)
120 for (j = 0; j < N; j++)
131 for (ip = 0; ip < N; ip++)
179 intptr_t N = (*a).Extent(0);
180 intptr_t j, iq, ip, i;
181 T tresh, theta, tau, t, sm, s, h, g,
c;
182 T volatile temp1, temp2;
183 auto_ptr<T> ab(
new T[N]), az(
new T[N]);
184 T *b = ab.get(), *z = az.get();
185 for (ip = 0; ip < N; ip++)
187 for (iq = 0; iq < N; iq++)
193 for (ip = 0; ip < N; ip++)
195 b[ip] = (*d)[ip] = (*a)[ip][ip];
202 for (i = 1; i <= 200; i++)
205 for (ip = 0; ip < N - 1; ip++)
207 for (iq = ip + 1; iq < N; iq++)
209 sm += abs((*a)[iq][ip]);
218 tresh =
T(0.2) * sm / (N * N);
224 for (ip = 0; ip < N - 1; ip++)
226 for (iq = ip + 1; iq < N; iq++)
228 g =
T(100) * abs((*a)[iq][ip]);
229 temp1 = abs((*d)[ip]) + g;
230 temp2 = abs((*d)[iq]) + g;
231 if (i > 4 && temp1 == abs((*d)[ip]) && temp2 == abs((*d)[iq]))
235 else if (abs((*a)[iq][ip]) > tresh)
237 h = (*d)[iq] - (*d)[ip];
238 temp1 = (abs(h) + g);
241 t = (*a)[iq][ip] / h;
245 theta =
T(0.5) * h / (*a)[iq][ip];
246 t =
T(1) / (abs(theta) +
sqrt(
T(1) + theta * theta));
254 tau = s / (
T(1) +
c);
255 h = t * (*a)[iq][ip];
261 for (j = 0; j <= ip - 1; j++)
265 for (j = ip + 1; j <= iq - 1; j++)
269 for (j = iq + 1; j < N; j++)
273 for (j = 0; j < N; j++)
284 for (ip = 0; ip < N; ip++)
bool Jacobi(const MatrixXX< N, N, T > &m, VectorXD< N, T > *d, MatrixXX< N, N, T > *v, int *nrot=NULL)