Logo ROOT   6.16/01
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
34class TArrayD;
35
36class TCL {
37public:
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//___________________________________________________________________________
180inline 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//___________________________________________________________________________
185inline 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//___________________________________________________________________________
190inline 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//___________________________________________________________________________
195inline 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//___________________________________________________________________________
200inline 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//___________________________________________________________________________
205inline 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//___________________________________________________________________________
210inline 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//___________________________________________________________________________
215inline 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//___________________________________________________________________________
220inline 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//___________________________________________________________________________
225inline 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//___________________________________________________________________________
230inline 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//___________________________________________________________________________
235inline 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//___________________________________________________________________________
240inline 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//___________________________________________________________________________
245inline 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//___________________________________________________________________________
253inline 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//___________________________________________________________________________
258inline 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//___________________________________________________________________________
263inline 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//___________________________________________________________________________
268inline 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//___________________________________________________________________________
273inline 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//___________________________________________________________________________
278inline 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//___________________________________________________________________________
283inline 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//___________________________________________________________________________
288inline 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//___________________________________________________________________________
293inline 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//___________________________________________________________________________
298inline 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//___________________________________________________________________________
303inline 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//___________________________________________________________________________
308inline 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//___________________________________________________________________________
313inline 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//___________________________________________________________________________
318inline 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//________________________________________________________
325inline 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//________________________________________________________
334inline 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//________________________________________________________
343inline 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//________________________________________________________
352inline 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//________________________________________________________
361inline 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//________________________________________________________
370inline 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//________________________________________________________
380inline 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//________________________________________________________
389inline 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//________________________________________________________
398inline 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//________________________________________________________
407inline 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//________________________________________________________
416inline 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//________________________________________________________
425inline 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//________________________________________________________
434inline 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//________________________________________________________
443inline 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//________________________________________________________
451inline 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//________________________________________________________
460inline 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//________________________________________________________
468inline 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//________________________________________________________
476inline 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//________________________________________________________
485inline 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//________________________________________________________
493inline 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//________________________________________________________
501inline 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//________________________________________________________
509inline 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//________________________________________________________
517inline 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//________________________________________________________
525inline 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//________________________________________________________
533inline 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//_____________________________________________________________________________
541inline 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//_____________________________________________________________________________
553inline 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//_____________________________________________________________________________
565inline 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//_____________________________________________________________________________
577inline 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
ROOT::R::TRInterface & r
Definition: Object.C:4
#define b(i)
Definition: RSha256.hxx:100
#define c(i)
Definition: RSha256.hxx:101
#define g(i)
Definition: RSha256.hxx:105
#define ClassDef(name, id)
Definition: Rtypes.h:324
float * q
Definition: THbookFile.cxx:87
Array of doubles (64 bits per element).
Definition: TArrayD.h:27
Definition: TCernLib.h:36
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 * mxmad2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:190
static float * trpck(const float *s, float *u, int n)
trpck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1010
static float vdot(const float *b, const float *a, int n)
Definition: TCernLib.h:416
static float * vmatl(const float *g, const float *c, float *x, int n=3, int m=3)
Definition: TCernLib.h:541
static float * trqsq(const float *q, const float *s, float *r, int m)
trqsq.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1045
static float * mxmub(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:220
static float * vlinco(const float *a, float fa, const float *b, float fb, float *x, int n)
Definition: TCernLib.h:525
static float * mxmpy(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:200
static float * tralt(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:407
static float * mxtrp(const float *a, float *b, int i, int j)
Matrix Transposition.
Definition: TCernLib.cxx:230
static float * vmatr(const float *c, const float *g, float *x, int n=3, int m=3)
Definition: TCernLib.h:565
static float * trata(const float *a, float *r, int m, int n)
trata.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:589
static float * trsmul(const float *g, float *gi, int n)
trsmul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1212
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
virtual ~TCL()
Definition: TCernLib.h:38
static int * ucopy(const int *a, int *b, int n)
Definition: TCernLib.h:325
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 * mxmub2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:230
static float * vzero(float *a, int n2)
Definition: TCernLib.h:485
static float * vsub(const float *a, const float *b, float *x, int n)
Definition: TCernLib.h:434
static float * trchlu(const float *a, float *b, int n)
trchlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:733
static float * trsinv(const float *g, float *gi, int n)
trsinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1160
static float * mxmad3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:195
static float * trsmlu(const float *u, float *s, int n)
trsmlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1177
static float * mxmltr(const float *a, const float *b, float *c, int ni, int nj)
Definition: TCernLib.h:245
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 float * trupck(const float *u, float *s, int m)
trupck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1248
static float * mxmub1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:225
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 * 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 * mxmpy3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:215
static float * vcopyn(const float *a, float *x, int n)
Definition: TCernLib.h:468
static float * vadd(const float *b, const float *c, float *a, int n)
Definition: TCernLib.h:380
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
static float * trinv(const float *t, float *s, int n)
trinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:857
static float * vscale(const float *a, float scale, float *b, int n)
Definition: TCernLib.h:509
static float * mxmlrt(const float *a, const float *b, float *c, int ni, int nj)
Definition: TCernLib.h:240
static float * mxmub3(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:235
static float * tras(const float *a, const float *s, float *b, int m, int n)
Symmetric - Rectangular Multiplication.
Definition: TCernLib.cxx:470
static float * tral(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:350
static float * mxmpy2(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:210
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 * mxmpy1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:205
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 * traat(const float *a, float *s, int m, int n)
Symmetric Multiplication of Rectangular Matrices.
Definition: TCernLib.cxx:293
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(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:180
static float * trchul(const float *a, float *b, int n)
trchul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:793
static float * mxmad1(const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.h:185
Double_t x[n]
Definition: legend1.C:17
const Int_t n
Definition: legend1.C:16
#define G(x, y, z)
static constexpr double s
auto * m
Definition: textangle.C:8
auto * a
Definition: textangle.C:12
static long int sum(long int i)
Definition: Factory.cxx:2258