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 {
216 fprintf(stderr, "Numerator h is zero! \n");
217 }
222 for (j = 0; j <
m; j++)
223 {
228 }
229 }
230 }
231 }
233 if (l == k)
234 {
236 {
238 for (j = 0; j <
n; j++)
239 v[j][k] = (-v[j][k]);
240 }
241 break;
242 }
243 if (its >= 30) {
244 fprintf(stderr, "No convergence after 30,000! iterations \n");
245 return(0);
246 }
247
248
254 f = ((
y -
z) * (
y +
z) + (
g -
h) * (
g +
h)) / (2.0 *
h *
y);
257
258
260 for (j = l; j <=
nm; j++)
261 {
269 fprintf(stderr, "Numerator z is zero! \n");
270 return(0);
271 }
279 for (jj = 0; jj <
n; jj++)
280 {
285 }
289 {
293 }
294 f = (
c *
g) + (s *
y);
295 x = (
c *
y) - (s * g);
296 for (jj = 0; jj <
m; jj++)
297 {
302 }
303 }
307 }
308 }
309 return(1);
310}
static double PYTHAG(double a, double b)
Header file for AthHistogramAlgorithm.
l
Printing final latex table to .tex output file.