1 package org.lcsim.spacegeom;
2
3 import java.io.PrintStream;
4
5
6
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 }