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 }