View Javadoc

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