37 const Int_t nRows =
a.GetNrows();
38 const Int_t rowLwb =
a.GetRowLwb();
48 else offDiag.
Use(nRows,work);
80 for (j = 0; j <
n; j++)
85 for (i =
n-1; i > 0; i--) {
86 const Int_t off_i1 = (i-1)*
n;
93 for (k = 0; k < i; k++)
97 for (j = 0; j < i; j++) {
107 for (k = 0; k < i; k++) {
118 for (j = 0; j < i; j++)
123 for (j = 0; j < i; j++) {
127 g = pE[j]+pV[off_j+j]*
f;
128 for (k = j+1; k <= i-1; k++) {
130 g += pV[off_k+j]*pD[k];
131 pE[k] += pV[off_k+j]*
f;
136 for (j = 0; j < i; j++) {
141 for (j = 0; j < i; j++)
143 for (j = 0; j < i; j++) {
146 for (k = j; k <= i-1; k++) {
148 pV[off_k+j] -= (
f*pE[k]+
g*pD[k]);
150 pD[j] = pV[off_i1+j];
159 for (i = 0; i <
n-1; i++) {
161 pV[off_n1+i] = pV[off_i+i];
165 for (k = 0; k <= i; k++) {
167 pD[k] = pV[off_k+i+1]/
h;
169 for (j = 0; j <= i; j++) {
171 for (k = 0; k <= i; k++) {
173 g += pV[off_k+i+1]*pV[off_k+j];
175 for (k = 0; k <= i; k++) {
177 pV[off_k+j] -=
g*pD[k];
181 for (k = 0; k <= i; k++) {
186 for (j = 0; j <
n; j++) {
187 pD[j] = pV[off_n1+j];
190 pV[off_n1+
n-1] = 1.0;
209 for (i = 1; i <
n; i++)
216 for (
l = 0;
l <
n;
l++) {
238 Error(
"MakeEigenVectors",
"too many iterations");
250 pD[
l+1] = pE[
l]*(p+
r);
253 for (i =
l+2; i <
n; i++)
266 for (i =
m-1; i >=
l; i--) {
277 pD[i+1] =
h+s*(
c*
g+s*pD[i]);
281 for (k = 0; k <
n; k++) {
284 pV[off_k+i+1] = s*pV[off_k+i]+
c*
h;
285 pV[off_k+i] =
c*pV[off_k+i]-s*
h;
288 p = -s*s2*
c3*el1*pE[
l]/dl1;
302 for (i = 0; i <
n-1; i++) {
305 for (j = i+1; j <
n; j++) {
314 for (j = 0; j <
n; j++) {
317 pV[off_j+i] = pV[off_j+k];
329 if (
this != &source) {
int Int_t
Signed integer 4 bytes (int).
double Double_t
Double 8 bytes.
Error("WriteTObject","The current directory (%s) is not associated with a file. The object (%s) has not been written.", GetName(), objname)
#define R__ASSERT(e)
Checks condition e and reports a fatal error if it's false.
TMatrixTSym< Double_t > TMatrixDSym
TMatrixT< Double_t > TMatrixD
TVectorT< Double_t > TVectorD
static void MakeEigenVectors(TMatrixD &v, TVectorD &d, TVectorD &e)
Symmetric tridiagonal QL algorithm.
static void MakeTridiagonal(TMatrixD &v, TVectorD &d, TVectorD &e)
This is derived from the Algol procedures tred2 by Bowdler, Martin, Reinsch, and Wilkinson,...
TMatrixDSymEigen & operator=(const TMatrixDSymEigen &source)
Assignment operator.
TVectorT< Element > & ResizeTo(Int_t lwb, Int_t upb)
Resize the vector to [lwb:upb] .
TVectorT< Element > & Use(Int_t lwb, Int_t upb, Element *data)
Use the array data to fill the vector lwb..upb].
Short_t Max(Short_t a, Short_t b)
Returns the largest of a and b.
Double_t Sqrt(Double_t x)
Returns the square root of x.
LongDouble_t Power(LongDouble_t x, LongDouble_t y)
Returns x raised to the power y.
Double_t Hypot(Double_t x, Double_t y)
Returns sqrt(x*x + y*y).
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.