4 #include "rheolef/tensor.h"
10 T
hypot2(
const T& x,
const T& y) {
return sqrt(x*x+y*y); }
20 for (
int j = 0; j < n; j++) {
25 for (
int i = n-1; i > 0; i--) {
31 for (
int k = 0; k < i; k++) {
32 scale = scale +
fabs(d[k]);
36 for (
int j = 0; j < i; j++) {
44 for (
int k = 0; k < i; k++) {
56 for (
int j = 0; j < i; j++) {
61 for (
int j = 0; j < i; j++) {
64 g = e[j] + V(j,j) *
f;
65 for (
int k = j+1; k <= i-1; k++) {
72 for (
int j = 0; j < i; j++) {
77 for (
int j = 0; j < i; j++) {
80 for (
int j = 0; j < i; j++) {
83 for (
int k = j; k <= i-1; k++) {
84 V(k,j) -= (f * e[k] + g * d[k]);
94 for (
int i = 0; i < n-1; i++) {
99 for (
int k = 0; k <= i; k++) {
102 for (
int j = 0; j <= i; j++) {
104 for (
int k = 0; k <= i; k++) {
105 g += V(k,i+1) * V(k,j);
107 for (
int k = 0; k <= i; k++) {
112 for (
int k = 0; k <= i; k++) {
116 for (
int j = 0; j < n; j++) {
131 for (
int i = 1; i < n; i++) {
138 T eps =
pow(2.0,-52.0);
139 for (
int l = 0; l < n; l++) {
145 if (
fabs(e[m]) <= eps*tst1) {
159 T p = (d[l+1] -
g) / (2.0 * e[l]);
164 d[l] = e[l] / (p + r);
165 d[l+1] = e[l] * (p + r);
168 for (
int i = l+2; i < n; i++) {
181 for (
int i = m-1; i >= l; i--) {
191 p = c * d[i] - s *
g;
192 d[i+1] = h + s * (c * g + s * d[i]);
195 for (
int k = 0; k < n; k++) {
197 V(k,i+1) = s * V(k,i) + c * h;
198 V(k,i) = c * V(k,i) - s * h;
201 p = -s * s2 * c3 * el1 * e[l] / dl1;
206 }
while (
fabs(e[l]) > eps*tst1);
213 for (
int i = 0; i < n-1; i++) {
216 for (
int j = i+1; j < n; j++) {
225 for (
int j = 0; j < n; j++) {
242 #define _RHEOLEF_instanciation(T) \
243 template void eigen_decomposition (const tensor_basic<T>& A, tensor_basic<T>& V, point_basic<T>& d);