40{
43 double anorm = 0.0,
g = 0.0,
scale = 0.0;
44
45 if (m < n)
46 {
47 fprintf(stderr, "#rows must be > #cols \n");
48 return(0);
49 }
50
51 std::vector<double> rv1 (n);
52
53
54 for (i = 0;
i <
n;
i++)
55 {
56
60 if (i < m)
61 {
62 for (k = i;
k <
m;
k++)
63 scale += fabs((
double)
a[k][i]);
64 if (scale)
65 {
66 for (k = i;
k <
m;
k++)
67 {
70 }
72 g = -
SIGN(sqrt(s), f);
75 if (i != n - 1)
76 {
77 for (j = l; j <
n; j++)
78 {
79 for (s = 0.0, k = i;
k <
m;
k++)
80 s += ((
double)
a[k][i] * (
double)
a[k][j]);
82 for (k = i;
k <
m;
k++)
84 }
85 }
86 for (k = i;
k <
m;
k++)
88 }
89 }
91
92
94 if (i < m && i != n - 1)
95 {
96 for (k = l;
k <
n;
k++)
97 scale += fabs((
double)
a[i][k]);
98 if (scale)
99 {
100 for (k = l;
k <
n;
k++)
101 {
104 }
106 g = -
SIGN(sqrt(s), f);
109 for (k = l;
k <
n;
k++)
110 rv1[k] = (
double)
a[
i][
k] /
h;
111 if (i != m - 1)
112 {
113 for (j = l; j <
m; j++)
114 {
115 for (s = 0.0, k = l;
k <
n;
k++)
116 s += ((
double)
a[j][k] * (
double)
a[i][k]);
117 for (k = l;
k <
n;
k++)
118 a[j][k] += (
double)(
s * rv1[
k]);
119 }
120 }
121 for (k = l;
k <
n;
k++)
123 }
124 }
125 anorm =
MAX(anorm, (fabs((
double)w[i]) + fabs(rv1[i])));
126 }
127
128
129 for (i = n - 1;
i >= 0;
i--)
130 {
131 if (i < n - 1)
132 {
133 if (g)
134 {
135 for (j = l; j <
n; j++)
137
138 for (j = l; j <
n; j++)
139 {
140 for (s = 0.0, k = l;
k <
n;
k++)
141 s += ((
double)
a[i][k] * (
double)v[k][j]);
142 for (k = l;
k <
n;
k++)
144 }
145 }
146 for (j = l; j <
n; j++)
147 v[i][j] = v[j][i] = 0.0;
148 }
152 }
153
154
155 for (i = n - 1;
i >= 0;
i--)
156 {
159 if (i < n - 1)
160 for (j = l; j <
n; j++)
162 if (g)
163 {
165 if (i != n - 1)
166 {
167 for (j = l; j <
n; j++)
168 {
169 for (s = 0.0, k = l;
k <
m;
k++)
170 s += ((
double)
a[k][i] * (
double)
a[k][j]);
172 for (k = i;
k <
m;
k++)
174 }
175 }
176 for (j = i; j <
m; j++)
178 }
179 else
180 {
181 for (j = i; j <
m; j++)
183 }
185 }
186
187
188 for (k = n - 1;
k >= 0;
k--)
189 {
190 for (its = 0; its < 30; its++)
191 {
193 for (l = k;
l >= 0;
l--)
194 {
196 if (fabs(rv1[l]) + anorm == anorm)
197 {
199 break;
200 }
201 if (fabs((double)w[nm]) + anorm == anorm)
202 break;
203 }
204 if (flag)
205 {
208 for (i = l;
i <=
k;
i++)
209 {
211 if (fabs(f) + anorm != anorm)
212 {
219 for (j = 0; j <
m; j++)
220 {
225 }
226 }
227 }
228 }
230 if (l == k)
231 {
233 {
235 for (j = 0; j <
n; j++)
236 v[j][k] = (-v[j][k]);
237 }
238 break;
239 }
240 if (its >= 30) {
241 fprintf(stderr, "No convergence after 30,000! iterations \n");
242 return(0);
243 }
244
245
251 f = ((
y -
z) * (
y +
z) + (
g -
h) * (
g +
h)) / (2.0 *
h *
y);
254
255
257 for (j = l; j <=
nm; j++)
258 {
272 for (jj = 0; jj <
n; jj++)
273 {
278 }
282 {
286 }
287 f = (
c *
g) + (s *
y);
288 x = (
c *
y) - (s * g);
289 for (jj = 0; jj <
m; jj++)
290 {
295 }
296 }
300 }
301 }
302 return(1);
303}
static double PYTHAG(double a, double b)
Header file for AthHistogramAlgorithm.
l
Printing final latex table to .tex output file.