Logo ROOT   6.12/07
Reference Guide
TCernLib.h
Go to the documentation of this file.
1 // @(#)root/table:$Id$
2 // Author: Valery Fine(fine@bnl.gov) 25/09/99
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef ROOT_TCernLib
13 #define ROOT_TCernLib
14 
15 #include "Rtypes.h"
16 #include <string.h>
17 
18 // https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html
19 
20 ///////////////////////////////////////////////////////////////////////////////////////
21 // //
22 // The routines of MXPACK compute the product of two matrices or the product of //
23 // their transposed matrices and may add or subtract to the resultant matrix //
24 // a third one, add or subtract one matrix from another, or transfer a matrix, //
25 // its negative, or a multiple of it, transpose a given matrix, build up a unit //
26 // matrix, multiply a matrix by a diagonal (from left or from right) and may //
27 // add the result to another matrix, add to square matrix the multiple of a diagonal //
28 // matrix, compute the products X=ABA' (A' denotes the transpose of A) and X=A'BA. //
29 // It is assumed that matrices are <B>row-wise without gaps</B>, contrary to the //
30 // Fortran convention. //
31 // //
32 ///////////////////////////////////////////////////////////////////////////////////////
33 
34 class TArrayD;
35 
36 class TCL {
37 public:
38  virtual ~TCL() { }
39 
40  static int *ucopy(const int *a, int *b, int n);
41  static float *ucopy(const float *a, float *b, int n);
42  static double *ucopy(const float *a, double *b, int n);
43  static float *ucopy(const double *a, float *b, int n);
44  static double *ucopy(const double *a, double *b, int n);
45  static void **ucopy(const void **a, void **b, int n);
46 
47  static float *vzero(float *a, int n2);
48  static double *vzero(double *a, int n2);
49  static void **vzero(void **a, int n2);
50 
51  static float *vadd(const float *b, const float *c, float *a, int n);
52  static double *vadd(const double *b, const double *c, double *a, int n);
53 
54  static float *vadd(const float *b, const double *c, float *a, int n);
55  static double *vadd(const double *b, const float *c,double *a, int n);
56 
57  static float vdot(const float *b, const float *a, int n);
58  static double vdot(const double *b, const double *a, int n);
59 
60  static float *vsub(const float *a, const float *b, float *x, int n);
61  static double *vsub(const double *a, const double *b, double *x, int n);
62  static float *vsub(const float *b, const double *c, float *a, int n);
63  static double *vsub(const double *b, const float *c, double *a, int n);
64 
65  static float *vcopyn(const float *a, float *x, int n);
66  static double *vcopyn(const double *a, double *x, int n);
67 
68  static float *vscale(const float *a, float scale, float *b, int n);
69  static double *vscale(const double *a, double scale, double *b, int n);
70 
71  static float *vlinco(const float *a, float fa, const float *b, float fb,float *x, int n);
72  static double *vlinco(const double *a, double fa, const double *b, double fb,double *x, int n);
73 
74  static float *vmatl(const float *g, const float *c, float *x, int n=3,int m=3);
75  static double *vmatl(const double *g, const double *c, double *x, int n=3,int m=3);
76 
77  static float *vmatr(const float *c, const float *g, float *x, int n=3,int m=3);
78  static double *vmatr(const double *c, const double *g, double *x, int n=3,int m=3);
79 
80  static float *mxmad_0_(int n, const float *a, const float *b, float *c, int i, int j, int k);
81 
82  static float *mxmad( const float *a, const float *b, float *c, int i, int j, int k);
83  static float *mxmad1(const float *a, const float *b, float *c, int i, int j, int k);
84  static float *mxmad2(const float *a, const float *b, float *c, int i, int j, int k);
85  static float *mxmad3(const float *a, const float *b, float *c, int i, int j, int k);
86  static float *mxmpy( const float *a, const float *b, float *c, int i, int j, int k);
87  static float *mxmpy1(const float *a, const float *b, float *c, int i, int j, int k);
88  static float *mxmpy2(const float *a, const float *b, float *c, int i, int j, int k);
89  static float *mxmpy3(const float *a, const float *b, float *c, int i, int j, int k);
90  static float *mxmub( const float *a, const float *b, float *c, int i, int j, int k);
91  static float *mxmub1(const float *a, const float *b, float *c, int i, int j, int k);
92  static float *mxmub2(const float *a, const float *b, float *c, int i, int j, int k);
93  static float *mxmub3(const float *a, const float *b, float *c, int i, int j, int k);
94 
95  static float *mxmlrt_0_(int n__, const float *a, const float *b, float *c, int ni,int nj);
96  static float *mxmlrt(const float *a, const float *b, float *c, int ni, int nj);
97  static float *mxmltr(const float *a, const float *b, float *c, int ni, int nj);
98  static float *mxtrp(const float *a, float *b, int i, int j);
99 
100  static double *mxmad_0_(int n, const double *a, const double *b, double *c, int i, int j, int k);
101 
102  static double *mxmad (const double *a, const double *b, double *c, int i, int j, int k);
103  static double *mxmad1(const double *a, const double *b, double *c, int i, int j, int k);
104  static double *mxmad2(const double *a, const double *b, double *c, int i, int j, int k);
105  static double *mxmad3(const double *a, const double *b, double *c, int i, int j, int k);
106  static double *mxmpy (const double *a, const double *b, double *c, int i, int j, int k);
107  static double *mxmpy1(const double *a, const double *b, double *c, int i, int j, int k);
108  static double *mxmpy2(const double *a, const double *b, double *c, int i, int j, int k);
109  static double *mxmpy3(const double *a, const double *b, double *c, int i, int j, int k);
110  static double *mxmub (const double *a, const double *b, double *c, int i, int j, int k);
111  static double *mxmub1(const double *a, const double *b, double *c, int i, int j, int k);
112  static double *mxmub2(const double *a, const double *b, double *c, int i, int j, int k);
113  static double *mxmub3(const double *a, const double *b, double *c, int i, int j, int k);
114 
115  static double *mxmlrt_0_(int n__, const double *a, const double *b, double *c, int ni,int nj);
116  static double *mxmlrt(const double *a, const double *b, double *c, int ni, int nj);
117  static double *mxmltr(const double *a, const double *b, double *c, int ni, int nj);
118  static double *mxtrp(const double *a, double *b, int i, int j);
119 
120 // * TR pack
121 
122  static float *traat(const float *a, float *s, int m, int n);
123  static float *tral(const float *a, const float *u, float *b, int m, int n);
124  static float *tralt(const float *a, const float *u, float *b, int m, int n);
125  static float *tras(const float *a, const float *s, float *b, int m, int n);
126  static float *trasat(const float *a, const float *s, float *r, int m, int n);
127  static float *trasat(const double *a, const float *s, float *r, int m, int n);
128  static float *trata(const float *a, float *r, int m, int n);
129  static float *trats(const float *a, const float *s, float *b, int m, int n);
130  static float *tratsa(const float *a, const float *s, float *r, int m, int n);
131  static float *trchlu(const float *a, float *b, int n);
132  static float *trchul(const float *a, float *b, int n);
133  static float *trinv(const float *t, float *s, int n);
134  static float *trla(const float *u, const float *a, float *b, int m, int n);
135  static float *trlta(const float *u, const float *a, float *b, int m, int n);
136  static float *trpck(const float *s, float *u, int n);
137  static float *trqsq(const float *q, const float *s, float *r, int m);
138  static float *trsa(const float *s, const float *a, float *b, int m, int n);
139  static float *trsinv(const float *g, float *gi, int n);
140  static float *trsmlu(const float *u, float *s, int n);
141  static float *trsmul(const float *g, float *gi, int n);
142  static float *trupck(const float *u, float *s, int m);
143  static float *trsat(const float *s, const float *a, float *b, int m, int n);
144 
145 // Victor Perevoztchikov's addition:
146  static float *trsequ(float *smx, int m=3, float *b=0, int n=1);
147 
148 // --- double version
149 
150  static double *traat (const double *a, double *s, int m, int n);
151  static double *tral (const double *a, const double *u, double *b, int m, int n);
152  static double *tralt (const double *a, const double *u, double *b, int m, int n);
153  static double *tras (const double *a, const double *s, double *b, int m, int n);
154  static double *trasat(const double *a, const double *s, double *r, int m, int n);
155  static double *trata (const double *a, double *r, int m, int n);
156  static double *trats (const double *a, const double *s, double *b, int m, int n);
157  static double *tratsa(const double *a, const double *s, double *r, int m, int n);
158  static double *trchlu(const double *a, double *b, int n);
159  static double *trchul(const double *a, double *b, int n);
160  static double *trinv (const double *t, double *s, int n);
161  static double *trla (const double *u, const double *a, double *b, int m, int n);
162  static double *trlta (const double *u, const double *a, double *b, int m, int n);
163  static double *trpck (const double *s, double *u, int n);
164  static double *trqsq (const double *q, const double *s, double *r, int m);
165  static double *trsa (const double *s, const double *a, double *b, int m, int n);
166  static double *trsinv(const double *g, double *gi, int n);
167  static double *trsmlu(const double *u, double *s, int n);
168  static double *trsmul(const double *g, double *gi, int n);
169  static double *trupck(const double *u, double *s, int m);
170  static double *trsat (const double *s, const double *a, double *b, int m, int n);
171 
172 // Victor Perevoztchikov's addition:
173  static double *trsequ(double *smx, int m=3, double *b=0, int n=1);
174 
175  ClassDef(TCL,0) //C++ replacement for CERNLIB matrix / triangle matrix packages: F110 and F112
176 
177 };
178 
179 //___________________________________________________________________________
180 inline float *TCL::mxmad(const float *a, const float *b, float *c, int i, int j, int k)
181 {
182  return mxmad_0_(0, a, b, c, i, j, k); }
183 
184 //___________________________________________________________________________
185 inline float *TCL::mxmad1(const float *a, const float *q, float *c, int i, int j, int k)
186 {
187  return mxmad_0_(1, a, q, c, i, j, k); }
188 
189 //___________________________________________________________________________
190 inline float *TCL::mxmad2(const float *p, const float *b, float *c, int i, int j, int k)
191 {
192  return mxmad_0_(2, p, b, c, i, j, k); }
193 
194 //___________________________________________________________________________
195 inline float *TCL::mxmad3(const float *p, const float *q, float *c, int i, int j, int k)
196 {
197  return mxmad_0_(3, p, q, c, i, j, k); }
198 
199 //___________________________________________________________________________
200 inline float *TCL::mxmpy(const float *a, const float *b, float *c, int i, int j, int k)
201 {
202  return mxmad_0_(4, a, b, c, i, j, k); }
203 
204 //___________________________________________________________________________
205 inline float *TCL::mxmpy1(const float *a, const float *q, float *c, int i, int j, int k)
206 {
207  return mxmad_0_(5, a, q, c, i, j, k); }
208 
209 //___________________________________________________________________________
210 inline float *TCL::mxmpy2(const float *p, const float *b, float *c, int i, int j, int k)
211 {
212  return mxmad_0_(6, p, b, c, i, j, k); }
213 
214 //___________________________________________________________________________
215 inline float *TCL::mxmpy3(const float *p, const float *q, float *c, int i, int j, int k)
216 {
217  return mxmad_0_(7, p, q, c, i, j, k); }
218 
219 //___________________________________________________________________________
220 inline float *TCL::mxmub(const float *a, const float *b, float *c, int i, int j, int k)
221 {
222  return mxmad_0_(8, a, b, c, i, j, k); }
223 
224 //___________________________________________________________________________
225 inline float *TCL::mxmub1(const float *a, const float *q, float *c, int i, int j, int k)
226 {
227  return mxmad_0_(9, a, q, c, i, j, k); }
228 
229 //___________________________________________________________________________
230 inline float *TCL::mxmub2(const float *p, const float *b, float *c, int i, int j, int k)
231 {
232  return mxmad_0_(10, p, b, c, i, j, k); }
233 
234 //___________________________________________________________________________
235 inline float *TCL::mxmub3(const float *p, const float *q, float *c, int i, int j, int k)
236 {
237  return mxmad_0_(11, p, q, c, i, j, k); }
238 
239 //___________________________________________________________________________
240 inline float *TCL::mxmlrt(const float *a, const float *b, float *x, int ni, int nj)
241 {
242  return mxmlrt_0_(0, a, b, x, ni, nj); }
243 
244 //___________________________________________________________________________
245 inline float *TCL::mxmltr(const float *a, const float *b, float *x, int ni, int nj)
246 {
247  return mxmlrt_0_(1, a, b, x, ni, nj); }
248 
249 
250 //-- double version --
251 
252 //___________________________________________________________________________
253 inline double *TCL::mxmad(const double *a, const double *b, double *c, int i, int j, int k)
254 {
255  return mxmad_0_(0, a, b, c, i, j, k); }
256 
257 //___________________________________________________________________________
258 inline double *TCL:: mxmad1(const double *a, const double *b, double *c, int i, int j, int k)
259 {
260  return mxmad_0_(1, a, b, c, i, j, k); }
261 
262 //___________________________________________________________________________
263 inline double *TCL::mxmad2(const double *a, const double *b, double *c, int i, int j, int k)
264 {
265  return mxmad_0_(2, a, b, c, i, j, k); }
266 
267 //___________________________________________________________________________
268 inline double *TCL::mxmad3(const double *a, const double *b, double *c, int i, int j, int k)
269 {
270  return mxmad_0_(3, a, b, c, i, j, k); }
271 
272 //___________________________________________________________________________
273 inline double *TCL::mxmpy(const double *a, const double *b, double *c, int i, int j, int k)
274 {
275  return mxmad_0_(4, a, b, c, i, j, k); }
276 
277 //___________________________________________________________________________
278 inline double *TCL::mxmpy1(const double *a, const double *b, double *c, int i, int j, int k)
279 {
280  return mxmad_0_(5, a, b, c, i, j, k); }
281 
282 //___________________________________________________________________________
283 inline double *TCL::mxmpy2(const double *a, const double *b, double *c, int i, int j, int k)
284 {
285  return mxmad_0_(6, a, b, c, i, j, k); }
286 
287 //___________________________________________________________________________
288 inline double *TCL::mxmpy3(const double *a, const double *b, double *c, int i, int j, int k)
289 {
290  return mxmad_0_(7, a, b, c, i, j, k); }
291 
292 //___________________________________________________________________________
293 inline double *TCL::mxmub(const double *a, const double *b, double *c, int i, int j, int k)
294 {
295  return mxmad_0_(8, a, b, c, i, j, k); }
296 
297 //___________________________________________________________________________
298 inline double *TCL::mxmub1(const double *a, const double *b, double *c, int i, int j, int k)
299 {
300  return mxmad_0_(9, a, b, c, i, j, k); }
301 
302 //___________________________________________________________________________
303 inline double *TCL::mxmub2(const double *a, const double *b, double *c, int i, int j, int k)
304 {
305  return mxmad_0_(10, a, b, c, i, j, k); }
306 
307 //___________________________________________________________________________
308 inline double *TCL::mxmub3(const double *a, const double *b, double *c, int i, int j, int k)
309 {
310  return mxmad_0_(11, a, b, c, i, j, k); }
311 
312 //___________________________________________________________________________
313 inline double *TCL::mxmlrt(const double *a, const double *b, double *c, int ni, int nj)
314 {
315  return mxmlrt_0_(0, a, b, c, ni, nj); }
316 
317 //___________________________________________________________________________
318 inline double *TCL::mxmltr(const double *a, const double *b, double *c, int ni, int nj)
319 {
320  return mxmlrt_0_(1, a, b, c, ni, nj); }
321 
322 // ----
323 
324 //________________________________________________________
325 inline int *TCL::ucopy(const int *b, int *a, int n)
326 {
327  //to be documented
328  if (n <= 0) return 0;
329  memcpy(a,b,n*sizeof(int));
330  return a;
331 }
332 
333 //________________________________________________________
334 inline float *TCL::ucopy(const float *b, float *a, int n)
335 {
336  //to be documented
337  if (n <= 0) return 0;
338  memcpy(a,b,n*sizeof(float));
339  return a;
340 }
341 
342 //________________________________________________________
343 inline float *TCL::ucopy(const double *b, float *a, int n)
344 {
345  //to be documented
346  if (n <= 0) return 0;
347  for (int i=0;i<n;i++,a++,b++) *a = float(*b);
348  return a;
349 }
350 
351 //________________________________________________________
352 inline double *TCL::ucopy(const float *b, double *a, int n)
353 {
354  //to be documented
355  if (n <= 0) return 0;
356  for (int i=0;i<n;i++,a++,b++) *a = double(*b);
357  return a;
358 }
359 
360 //________________________________________________________
361 inline double *TCL::ucopy(const double *b, double *a, int n)
362 {
363  //to be documented
364  if (n <= 0) return 0;
365  memcpy(a,b,n*sizeof(double));
366  return a;
367 }
368 
369 //________________________________________________________
370 inline void **TCL::ucopy(const void **b, void **a, int n)
371 {
372  //to be documented
373  if (n <= 0) return 0;
374  memcpy(a,b,n*sizeof(void *));
375  return a;
376 }
377 
378 
379 //________________________________________________________
380 inline float *TCL::vadd(const float *b, const float *c, float *a, int n)
381 {
382  //to be documented
383  if (n <= 0) return 0;
384  for (int i=0;i<n;i++) a[i] = b[i] + c[i];
385  return a;
386 }
387 
388 //________________________________________________________
389 inline double *TCL::vadd(const double *b, const double *c, double *a, int n)
390 {
391  //to be documented
392  if (n <= 0) return 0;
393  for (int i=0;i<n;i++) a[i] = b[i] + c[i];
394  return a;
395 }
396 
397 //________________________________________________________
398 inline float *TCL::vadd(const float *b, const double *c, float *a, int n)
399 {
400  //to be documented
401  if (n <= 0) return 0;
402  for (int i=0;i<n;i++) a[i] = b[i] + c[i];
403  return a;
404 }
405 
406 //________________________________________________________
407 inline double *TCL::vadd(const double *b, const float *c, double *a, int n)
408 {
409  //to be documented
410  if (n <= 0) return 0;
411  for (int i=0;i<n;i++) a[i] = b[i] + c[i];
412  return a;
413 }
414 
415 //________________________________________________________
416 inline float TCL::vdot(const float *b, const float *a, int n)
417 {
418  //to be documented
419  float x=0;
420  if (n>0)
421  for (int i=0;i<n;i++,a++,b++) x += (*a) * (*b);
422  return x;
423 }
424 //________________________________________________________
425 inline double TCL::vdot(const double *b, const double *a, int n)
426 {
427  //to be documented
428  double x=0;
429  if (n>0)
430  for (int i=0;i<n;i++,a++,b++) x += (*a) * (*b);
431  return x;
432 }
433 //________________________________________________________
434 inline float *TCL::vsub(const float *a, const float *b, float *x, int n)
435 {
436  //to be documented
437  if (n <= 0) return 0;
438  for (int i=0;i<n;i++) x[i] = a[i]-b[i];
439  return x;
440 }
441 
442 //________________________________________________________
443 inline double *TCL::vsub(const double *a, const double *b, double *x, int n)
444 {
445  //to be documented
446  if (n <= 0) return 0;
447  for (int i=0;i<n;i++) x[i] = a[i]-b[i];
448  return x;
449 }
450 //________________________________________________________
451 inline float *TCL::vsub(const float *b, const double *c, float *a, int n)
452 {
453  //to be documented
454  if (n <= 0) return 0;
455  for (int i=0;i<n;i++) a[i] = b[i] - c[i];
456  return a;
457 }
458 
459 //________________________________________________________
460 inline double *TCL::vsub(const double *b, const float *c, double *a, int n)
461 {
462  //to be documented
463  if (n <= 0) return 0;
464  for (int i=0;i<n;i++) a[i] = b[i] - c[i];
465  return a;
466 }
467 //________________________________________________________
468 inline float *TCL::vcopyn(const float *a, float *x, int n)
469 {
470  //to be documented
471  if (n <= 0) return 0;
472  for (int i=0;i<n;i++) x[i] = -a[i];
473  return x;
474 }
475 //________________________________________________________
476 inline double *TCL::vcopyn(const double *a, double *x, int n)
477 {
478  //to be documented
479  if (n <= 0) return 0;
480  for (int i=0;i<n;i++) x[i] = -a[i];
481  return x;
482 }
483 
484 //________________________________________________________
485 inline float *TCL::vzero(float *a, int n1)
486 {
487  //to be documented
488  if (n1 <= 0) return 0;
489  return (float *)memset(a,0,n1*sizeof(float));
490 }
491 
492 //________________________________________________________
493 inline double *TCL::vzero(double *a, int n1)
494 {
495  //to be documented
496  if (n1 <= 0) return 0;
497  return (double *)memset(a,0,n1*sizeof(double));
498 }
499 
500 //________________________________________________________
501 inline void **TCL::vzero(void **a, int n1)
502 {
503  //to be documented
504  if (n1 <= 0) return 0;
505  return (void **)memset(a,0,n1*sizeof(void *));
506 }
507 
508 //________________________________________________________
509 inline float *TCL::vscale(const float *a, float scale, float *b, int n)
510 {
511  //to be documented
512  for (int i=0;i<n;i++) b[i]=scale*a[i];
513  return b;
514 }
515 
516 //________________________________________________________
517 inline double *TCL::vscale(const double *a, double scale, double *b, int n)
518 {
519  //to be documented
520  for (int i=0;i<n;i++) b[i]=scale*a[i];
521  return b;
522 }
523 
524 //________________________________________________________
525 inline float *TCL::vlinco(const float *a, float fa, const float *b, float fb, float *x, int n)
526 {
527  //to be documented
528  for (int i=0;i<n;i++){x[i]=a[i]*fa+b[i]*fb;};
529  return x;
530 }
531 
532 //________________________________________________________
533 inline double *TCL::vlinco(const double *a, double fa, const double *b, double fb,double *x, int n)
534 {
535  //to be documented
536  for (int i=0;i<n;i++) x[i]=a[i]*fa+b[i]*fb;
537  return x;
538 }
539 
540 //_____________________________________________________________________________
541 inline float *TCL::vmatl(const float *G, const float *c, float *x, int n,int m)
542 {
543  // x = G*c
544  for (int i=0; i<n; i++) {
545  double sum = 0;
546  for (int j=0; j<m; j++) sum += G[j + m*i]*c[j];
547  x[i] = sum;
548  }
549  return x;
550 }
551 
552 //_____________________________________________________________________________
553 inline double *TCL::vmatl(const double *G, const double *c, double *x, int n,int m)
554 {
555  // x = G*c
556  for (int i=0; i<n; i++) {
557  double sum = 0;
558  for (int j=0; j<m; j++) sum += G[j + m*i]*c[j];
559  x[i] = sum;
560  }
561  return x;
562 }
563 
564 //_____________________________________________________________________________
565 inline float *TCL::vmatr(const float *c, const float *G, float *x, int n,int m)
566 {
567  // x = c*G
568  for (int j=0; j<m; j++) {
569  double sum = 0;
570  for (int i=0; i<n; i++) sum += G[j + n*i]*c[i];
571  x[j] = sum;
572  }
573  return x;
574 }
575 
576 //_____________________________________________________________________________
577 inline double *TCL::vmatr(const double *c, const double *G, double *x, int n,int m)
578 {
579  // x = c*G
580  for (int j=0; j<m; j++) {
581  double sum = 0;
582  for (int i=0; i<n; i++) sum += G[j + n*i]*c[i];
583  x[j] = sum;
584  }
585  return x;
586 }
587 
588 #endif
static float * mxmad2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:190
static float * traat(const float *a, float *s, int m, int n)
Symmetric Multiplication of Rectangular Matrices.
Definition: TCernLib.cxx:293
static long int sum(long int i)
Definition: Factory.cxx:2173
static float * mxmlrt(const float *a, const float *b, float *c, int ni, int nj)
Definition: TCernLib.h:240
auto * m
Definition: textangle.C:8
Definition: TCernLib.h:36
static float * trsmul(const float *g, float *gi, int n)
trsmul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1212
static float * mxmpy1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:205
static float * vmatr(const float *c, const float *g, float *x, int n=3, int m=3)
Definition: TCernLib.h:565
static float * mxmpy3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:215
static float * mxmltr(const float *a, const float *b, float *c, int ni, int nj)
Definition: TCernLib.h:245
static float * trata(const float *a, float *r, int m, int n)
trata.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:589
#define G(x, y, z)
static float * mxtrp(const float *a, float *b, int i, int j)
Matrix Transposition.
Definition: TCernLib.cxx:230
static float * vscale(const float *a, float scale, float *b, int n)
Definition: TCernLib.h:509
static float vdot(const float *b, const float *a, int n)
Definition: TCernLib.h:416
Double_t x[n]
Definition: legend1.C:17
static float * trinv(const float *t, float *s, int n)
trinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:857
#define ClassDef(name, id)
Definition: Rtypes.h:320
static float * trsat(const float *s, const float *a, float *b, int m, int n)
trsat.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1298
static float * mxmad_0_(int n, const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.cxx:109
static float * vmatl(const float *g, const float *c, float *x, int n=3, int m=3)
Definition: TCernLib.h:541
static float * mxmub(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:220
static float * trpck(const float *s, float *u, int n)
trpck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1010
static float * trsequ(float *smx, int m=3, float *b=0, int n=1)
Linear Equations, Matrix Inversion trsequ solves the matrix equation.
Definition: TCernLib.cxx:2111
static float * trsa(const float *s, const float *a, float *b, int m, int n)
trsa.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1111
static float * tralt(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:407
static float * trlta(const float *u, const float *a, float *b, int m, int n)
trlta.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:959
static float * trqsq(const float *q, const float *s, float *r, int m)
trqsq.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1045
ROOT::R::TRInterface & r
Definition: Object.C:4
static float * mxmpy(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:200
auto * a
Definition: textangle.C:12
static float * trats(const float *a, const float *s, float *b, int m, int n)
trats.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:629
static int * ucopy(const int *a, int *b, int n)
Definition: TCernLib.h:325
static float * tral(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:350
static float * trchul(const float *a, float *b, int n)
trchul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:793
static float * trsinv(const float *g, float *gi, int n)
trsinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1160
static float * mxmpy2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:210
static float * mxmub3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:235
static float * trasat(const float *a, const float *s, float *r, int m, int n)
Transformation of Symmetric Matrix.
Definition: TCernLib.cxx:540
static float * trsmlu(const float *u, float *s, int n)
trsmlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1177
static float * tras(const float *a, const float *s, float *b, int m, int n)
Symmetric - Rectangular Multiplication.
Definition: TCernLib.cxx:470
static float * mxmlrt_0_(int n__, const float *a, const float *b, float *c, int ni, int nj)
Matrix Multiplication.
Definition: TCernLib.cxx:184
static float * vzero(float *a, int n2)
Definition: TCernLib.h:485
static constexpr double s
static float * vadd(const float *b, const float *c, float *a, int n)
Definition: TCernLib.h:380
static float * mxmad1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:185
virtual ~TCL()
Definition: TCernLib.h:38
Array of doubles (64 bits per element).
Definition: TArrayD.h:27
static float * mxmub1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:225
static float * vcopyn(const float *a, float *x, int n)
Definition: TCernLib.h:468
static float * vlinco(const float *a, float fa, const float *b, float fb, float *x, int n)
Definition: TCernLib.h:525
static float * trupck(const float *u, float *s, int m)
trupck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1248
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
Definition: TRolke.cxx:630
static float * mxmub2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:230
static float * mxmad(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:180
static float * tratsa(const float *a, const float *s, float *r, int m, int n)
tratsa.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:677
static float * vsub(const float *a, const float *b, float *x, int n)
Definition: TCernLib.h:434
float * q
Definition: THbookFile.cxx:87
const Int_t n
Definition: legend1.C:16
static float * mxmad3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:195
static float * trchlu(const float *a, float *b, int n)
trchlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:733
static constexpr double g
static float * trla(const float *u, const float *a, float *b, int m, int n)
trla.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:915