View Javadoc

1   package org.lcsim.recon.tracking.spacegeom;
2   
3   import java.io.PrintStream;
4   
5   class Eigensystem
6   {
7       
8       protected Matrix _eigenvalue;
9       protected Matrix _eigenvector;
10      protected int _index[];
11      
12      public Eigensystem()
13      {
14      }
15      
16      public void eigensort()
17      {
18          if(_eigenvalue == null)
19          {
20              System.err.println("Eigensystem::eigensort - No eigenvalues to sort.");
21              System.exit(0);
22          }
23          if(_eigenvector == null)
24          {
25              System.err.println("Eigensystem::eigensort - No eigenvectors to sort.");
26              System.exit(0);
27          }
28          int j1 = _eigenvalue.rows();
29          _index = new int[j1];
30          for(int i = 0; i < j1; i++)
31              _index[i] = i;
32          
33          for(int j = 0; j < j1 - 1; j++)
34          {
35              int i1 = j;
36              double d = _eigenvalue.at(i1, 0);
37              for(int k = j + 1; k < j1; k++)
38                  if(_eigenvalue.at(k, 0) >= d)
39                  {
40                  i1 = k;
41                  d = _eigenvalue.at(i1, 0);
42                  }
43              
44              if(i1 != j)
45              {
46                  int k1 = _index[i1];
47                  _index[i1] = _index[j];
48                  _index[j] = k1;
49                  _eigenvalue.set(i1, 0, _eigenvalue.at(j, 0));
50                  _eigenvalue.set(j, 0, d);
51                  for(int l = 0; l < j1; l++)
52                  {
53                      double d1 = _eigenvector.at(l, j);
54                      _eigenvector.set(l, j, _eigenvector.at(l, i1));
55                      _eigenvector.set(l, i1, d1);
56                  }
57                  
58              }
59          }
60          
61      }
62      
63      public double eigenvalue(int i)
64      {
65          if(_eigenvalue == null)
66          {
67              System.err.println("Eigensystem::getEigenvalue - No vector of eigenvalues availible.");
68              System.exit(0);
69          }
70          int j = _eigenvalue.rows();
71          if(i > j - 1 || i < 0)
72          {
73              System.err.println("Eigensystem::getEigenvalue - Invalid index specified.");
74              System.exit(0);
75          }
76          return _eigenvalue.at(i, 0);
77      }
78      
79      public Matrix eigenvalues()
80      {
81          return _eigenvalue;
82      }
83      
84      public Matrix eigenvector(int i)
85      {
86          if(_eigenvector == null)
87          {
88              System.err.println("Eigensystem::getEigenvector - No matrix of eigenvectors availible.");
89              System.exit(0);
90          }
91          int j = _eigenvalue.rows();
92          if(i > j - 1 || i < 0)
93          {
94              System.err.println("Eigensystem::getEigenvector - Invalid index specified.");
95              System.exit(0);
96          }
97          Matrix matrix = _eigenvector.submatrix(j, 1, 0, i);
98          return matrix;
99      }
100     
101     public Matrix eigenvectors()
102     {
103         return _eigenvector;
104     }
105     
106     public int[] index()
107     {
108         return _index;
109     }
110     
111     public void setEigenvalues(Matrix matrix)
112     {
113         if(matrix.cols() != 1)
114         {
115             System.err.println("Eigensystem::setEigenvalues -> Invalid dimension.");
116             System.exit(0);
117         }
118         _eigenvalue = matrix;
119     }
120     
121     public void setEigenvectors(Matrix matrix)
122     {
123         _eigenvector = matrix;
124     }
125     
126     public void setIndex(int ai[])
127     {
128         _index = ai;
129     }
130 }