// TestEigen2 just developmental test class TestEigen2 { static boolean debug = false; public static void main(String args[]) { boolean fail[] = new boolean[1]; Complex A1[][] = new Complex[1][1]; Complex VEC1[][] = new Complex[1][1]; Complex VAL1[] = new Complex[1]; Complex A2[][] = new Complex[2][2]; Complex B2[][] = new Complex[2][2]; Complex X2[] = new Complex[2]; Complex Y2[] = new Complex[2]; Complex VEC2[][] = new Complex[2][2]; Complex VAL2[] = new Complex[2]; Complex A3[][] = new Complex[3][3]; Complex VEC3[][] = new Complex[3][3]; Complex VAL3[] = new Complex[3]; Complex A4[][] = new Complex[4][4]; Complex VEC4[][] = new Complex[4][4]; Complex VAL4[] = new Complex[4]; Complex A5[][] = new Complex[4][4]; Complex VEC5[][] = new Complex[4][4]; Complex VAL5[] = new Complex[4]; Complex A6[][] = new Complex[4][4]; Complex VEC6[][] = new Complex[4][4]; Complex VAL6[] = new Complex[4]; Complex BH1[][] = new Complex[4][4]; Complex VECBH1[][] = new Complex[4][4]; Complex VALBH1[] = new Complex[4]; Complex BH2[][] = new Complex[4][4]; Complex VECBH2[][] = new Complex[4][4]; Complex VALBH2[] = new Complex[4]; System.out.println("TestEigen2.java many test cases "); A1[0][0] = new Complex(2.0,3.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A1"); ComplexMatrix.print(A1); System.out.println("eigen2(A1, VAL1, VEC1, fail"); Eigen2.eigen(A1, VAL1, VEC1, fail); System.out.println("fail="+fail[0]+", VEC1="); ComplexMatrix.print(VEC1); System.out.println("VAL1="); ComplexMatrix.print(VAL1); System.out.println("eigenCheck(A1, VEC1, VAL1)"); ComplexMatrix.eigenCheck(A1, VEC1, VAL1); System.out.println(); System.out.println(); A2[0][0] = new Complex(1.0,1.0); A2[0][1] = new Complex(2.0,-3.0); A2[1][0] = new Complex(5.0,-1.0); A2[1][1] = new Complex(2.0,2.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A2"); ComplexMatrix.print(A2); System.out.println("eigen2(A2, VAL2, VEC2, fail"); Eigen2.eigen(A2, VAL2, VEC2, fail); System.out.println("fail="+fail[0]+", VEC2="); ComplexMatrix.print(VEC2); System.out.println("VAL2="); ComplexMatrix.print(VAL2); System.out.println(); System.out.println(); B2[0][0] = A2[0][0].subtract(VAL2[0]); B2[1][0] = A2[1][0]; B2[0][1] = A2[0][1]; B2[1][1] = A2[1][1].subtract(VAL2[0]); System.out.println("solve det|A-lambda I||v|=|0|"); ComplexMatrix.print(B2); System.out.println("det |A-lambda I|="+ ComplexMatrix.determinant(B2)); Y2[0] = new Complex(0.0, 0.0); Y2[1] = new Complex(0.0, 0.0); ComplexMatrix.solve(B2, Y2, X2); System.out.println("first eigenvector="); ComplexMatrix.print(X2); B2[0][0] = A2[0][0].subtract(VAL2[1]); B2[1][0] = A2[1][0]; B2[0][1] = A2[0][1]; B2[1][1] = A2[1][1].subtract(VAL2[1]); ComplexMatrix.print(B2); System.out.println("det |A-lambda I|="+ ComplexMatrix.determinant(B2)); Y2[0] = new Complex(0.0, 0.0); Y2[1] = new Complex(0.0, 0.0); ComplexMatrix.solve(B2, Y2, X2); System.out.println("second eigenvector="); ComplexMatrix.print(X2); System.out.println("eigenCheck(A2, VEC2, VAL2)"); ComplexMatrix.eigenCheck(A2, VEC2, VAL2); System.out.println(); System.out.println(); A3[0][0] = new Complex(1.0,1.0); A3[0][1] = new Complex(2.0,-3.0); A3[0][2] = new Complex(5.0,-1.0); A3[1][0] = new Complex(2.0,-3.0); A3[1][1] = new Complex(1.0,1.0); A3[1][2] = new Complex(2.0,-5.0); A3[2][0] = new Complex(5.0,-1.0); A3[2][1] = new Complex(2.0,-5.0); A3[2][2] = new Complex(4.0,-4.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A3"); ComplexMatrix.print(A3); System.out.println("eigen2(A3, VAL3, VEC3, fail"); Eigen2.eigen(A3, VAL3, VEC3, fail); System.out.println("fail="+fail[0]+", VEC3="); ComplexMatrix.print(VEC3); System.out.println("VAL3="); ComplexMatrix.print(VAL3); System.out.println("eigenCheck(A3, VEC3, VAL3)"); ComplexMatrix.eigenCheck(A3, VEC3, VAL3); System.out.println("trying eigvec"); eigvec(A3, VAL3, VEC3); System.out.println("VEC3="); ComplexMatrix.print(VEC3); System.out.println("eigenCheck(A3, VEC3, VAL3)"); ComplexMatrix.eigenCheck(A3, VEC3, VAL3); System.out.println(); System.out.println(); A4[0][0] = new Complex(1.0,0.0); A4[1][0] = new Complex(0.0,0.0); A4[2][0] = new Complex(0.0,0.0); A4[3][0] = new Complex(0.0,0.0); A4[0][1] = new Complex(0.0,0.0); A4[1][1] = new Complex(1.0,0.0); A4[2][1] = new Complex(0.0,0.0); A4[3][1] = new Complex(0.0,0.0); A4[0][2] = new Complex(0.0,0.0); A4[1][2] = new Complex(0.0,0.0); A4[2][2] = new Complex(1.0,0.0); A4[3][2] = new Complex(0.0,0.0); A4[0][3] = new Complex(0.0,0.0); A4[1][3] = new Complex(0.0,0.0); A4[2][3] = new Complex(0.0,0.0); A4[3][3] = new Complex(1.0,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A4 cnot"); ComplexMatrix.print(A4); System.out.println("eigen2(A4, VAL4, VEC4, fail"); Eigen2.eigen(A4, VAL4, VEC4, fail); System.out.println("fail="+fail[0]+", VEC4="); ComplexMatrix.print(VEC4); System.out.println("VAL4="); ComplexMatrix.print(VAL4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); System.out.println("trying eigvec"); eigvec(A4, VAL4, VEC4); System.out.println("VEC4="); ComplexMatrix.print(VEC4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); System.out.println(); A4[0][0] = new Complex(1.0,4.0); A4[1][0] = new Complex(2.0,4.0); A4[2][0] = new Complex(3.0,4.0); A4[3][0] = new Complex(4.0,4.0); A4[0][1] = new Complex(2.0,4.0); A4[1][1] = new Complex(2.0,3.0); A4[2][1] = new Complex(3.0,3.0); A4[3][1] = new Complex(4.0,3.0); A4[0][2] = new Complex(3.0,4.0); A4[1][2] = new Complex(3.0,3.0); A4[2][2] = new Complex(3.0,2.0); A4[3][2] = new Complex(4.0,2.0); A4[0][3] = new Complex(4.0,4.0); A4[1][3] = new Complex(4.0,3.0); A4[2][3] = new Complex(4.0,2.0); A4[3][3] = new Complex(4.0,1.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A4"); ComplexMatrix.print(A4); System.out.println("eigen2(A4, VAL4, VEC4, fail"); Eigen2.eigen(A4, VAL4, VEC4, fail); System.out.println("fail="+fail[0]+", VEC4="); ComplexMatrix.print(VEC4); System.out.println("VAL4="); ComplexMatrix.print(VAL4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); System.out.println("trying eigvec"); eigvec(A4, VAL4, VEC4); System.out.println("VEC4="); ComplexMatrix.print(VEC4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); System.out.println(); A4[0][0] = new Complex(2.0,0.0); A4[1][0] = new Complex(2.0,0.0); A4[2][0] = new Complex(2.0,0.0); A4[3][0] = new Complex(2.0,0.0); A4[0][1] = new Complex(2.0,0.0); A4[1][1] = new Complex(2.0,0.0); A4[2][1] = new Complex(2.0,0.0); A4[3][1] = new Complex(2.0,0.0); A4[0][2] = new Complex(2.0,0.0); A4[1][2] = new Complex(2.0,0.0); A4[2][2] = new Complex(2.0,0.0); A4[3][2] = new Complex(2.0,0.0); A4[0][3] = new Complex(2.0,0.0); A4[1][3] = new Complex(2.0,0.0); A4[2][3] = new Complex(2.0,0.0); A4[3][3] = new Complex(2.0,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A4"); ComplexMatrix.print(A4); System.out.println("eigen2(A4, VAL4, VEC4, fail"); Eigen2.eigen(A4, VAL4, VEC4, fail); System.out.println("fail="+fail[0]+", VEC4="); ComplexMatrix.print(VEC4); System.out.println("VAL4="); ComplexMatrix.print(VAL4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); System.out.println("trying eigvec"); eigvec(A4, VAL4, VEC4); System.out.println("VEC4="); ComplexMatrix.print(VEC4); System.out.println("eigenCheck(A4, VEC4, VAL4)"); ComplexMatrix.eigenCheck(A4, VEC4, VAL4); System.out.println(); // by rows A5[0][0] = new Complex(10.0,14.0); A5[0][1] = new Complex(36.0,-100.0); A5[0][2] = new Complex(-270.0,66.0); A5[0][3] = new Complex(185.0,180.0); A5[1][0] = new Complex(1.0,0.0); A5[1][1] = new Complex(0.0,0.0); A5[1][2] = new Complex(0.0,0.0); A5[1][3] = new Complex(0.0,0.0); A5[2][0] = new Complex(0.0,0.0); A5[2][1] = new Complex(1.0,0.0); A5[2][2] = new Complex(0.0,0.0); A5[2][3] = new Complex(0.0,0.0); A5[3][0] = new Complex(0.0,0.0); A5[3][1] = new Complex(0.0,0.0); A5[3][2] = new Complex(1.0,0.0); A5[3][3] = new Complex(0.0,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A5 poly"); ComplexMatrix.print(A5); System.out.println("eigen2(A5, VAL5, VEC5, fail"); Eigen2.eigen(A5, VAL5, VEC5, fail); System.out.println("fail="+fail[0]+", VEC5="); ComplexMatrix.print(VEC5); System.out.println("VAL5="); ComplexMatrix.print(VAL5); System.out.println("eigenCheck(A5, VEC5, VAL5)"); ComplexMatrix.eigenCheck(A5, VEC5, VAL5); System.out.println(); System.out.println("trying eigvec"); eigvec(A5, VAL5, VEC5); System.out.println("VEC5="); ComplexMatrix.print(VEC5); System.out.println("eigenCheck(A5, VEC5, VAL5)"); ComplexMatrix.eigenCheck(A5, VEC5, VAL5); System.out.println(); System.out.println(); A6[0][0] = new Complex(0.5,0.0); A6[1][0] = new Complex(0.333333333,0.0); A6[2][0] = new Complex(0.25,0.0); A6[3][0] = new Complex(0.2,0.0); A6[0][1] = new Complex(0.33333333,0.0); A6[1][1] = new Complex(0.25,0.0); A6[2][1] = new Complex(0.2,0.0); A6[3][1] = new Complex(0.166666666,0.0); A6[0][2] = new Complex(0.25,0.0); A6[1][2] = new Complex(0.2,0.0); A6[2][2] = new Complex(0.166666666,0.0); A6[3][2] = new Complex(0.14285714,0.0); A6[0][3] = new Complex(0.2,0.0); A6[1][3] = new Complex(0.166666666,0.0); A6[2][3] = new Complex(0.14285714,0.0); A6[3][3] = new Complex(0.125,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial A6 hilbert"); ComplexMatrix.print(A6); System.out.println("eigen2(A6, VAL6, VEC6, fail"); Eigen2.eigen(A6, VAL6, VEC6, fail); System.out.println("fail="+fail[0]+", VEC6="); ComplexMatrix.print(VEC6); System.out.println("VAL6="); ComplexMatrix.print(VAL6); System.out.println("eigenCheck(A6, VEC6, VAL6)"); ComplexMatrix.eigenCheck(A6, VEC6, VAL6); System.out.println(); System.out.println("trying eigvec"); eigvec(A6, VAL6, VEC6); System.out.println("VEC6="); ComplexMatrix.print(VEC6); System.out.println("eigenCheck(A6, VEC6, VAL6)"); ComplexMatrix.eigenCheck(A6, VEC6, VAL6); System.out.println(); BH1[0][0] = new Complex(5.0,0.0); BH1[1][0] = new Complex(7.0,0.0); BH1[2][0] = new Complex(6.0,0.0); BH1[3][0] = new Complex(5.0,0.0); BH1[0][1] = new Complex(7.0,0.0); BH1[1][1] = new Complex(10.0,0.0); BH1[2][1] = new Complex(8.0,0.0); BH1[3][1] = new Complex(7.0,0.0); BH1[0][2] = new Complex(6.0,0.0); BH1[1][2] = new Complex(8.0,0.0); BH1[2][2] = new Complex(10.0,0.0); BH1[3][2] = new Complex(9.0,0.0); BH1[0][3] = new Complex(5.0,0.0); BH1[1][3] = new Complex(7.0,0.0); BH1[2][3] = new Complex(9.0,0.0); BH1[3][3] = new Complex(10.0,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial BH1"); ComplexMatrix.print(BH1); System.out.println("eigen2(BH1, VALBH1, VECBH1, fail"); Eigen2.eigen(BH1, VALBH1, VECBH1, fail); System.out.println("fail="+fail[0]+", VECBH1="); ComplexMatrix.print(VECBH1); System.out.println("VALBH1="); ComplexMatrix.print(VALBH1); System.out.println("eigenCheck(BH1, VECBH1, VALBH1)"); ComplexMatrix.eigenCheck(BH1, VECBH1, VALBH1); System.out.println(); System.out.println("trying eigvec"); eigvec(BH1, VALBH1, VECBH1); System.out.println("VECBH1="); ComplexMatrix.print(VECBH1); System.out.println("eigenCheck(BH1, VECBH1, VALBH1)"); ComplexMatrix.eigenCheck(BH1, VECBH1, VALBH1); System.out.println(); BH2[0][0] = new Complex(-1.0,0.0); BH2[1][0] = new Complex(-1.0,0.0); BH2[2][0] = new Complex(-1.0,0.0); BH2[3][0] = new Complex(-1.0,0.0); BH2[0][1] = new Complex(3.0,0.0); BH2[1][1] = new Complex(2.0,0.0); BH2[2][1] = new Complex(1.0,0.0); BH2[3][1] = new Complex(0.0,0.0); BH2[0][2] = new Complex(-3.0,0.0); BH2[1][2] = new Complex(-1.0,0.0); BH2[2][2] = new Complex(0.0,0.0); BH2[3][2] = new Complex(0.0,0.0); BH2[0][3] = new Complex(1.0,0.0); BH2[1][3] = new Complex(0.0,0.0); BH2[2][3] = new Complex(0.0,0.0); BH2[3][3] = new Complex(0.0,0.0); System.out.println(" "); System.out.println(" "); System.out.println("initial BH2"); ComplexMatrix.print(BH2); System.out.println("eigen2(BH2, VALBH2, VECBH2, fail"); Eigen2.eigen(BH2, VALBH2, VECBH2, fail); System.out.println("fail="+fail[0]+", VECBH2="); ComplexMatrix.print(VECBH2); System.out.println("VALBH2="); ComplexMatrix.print(VALBH2); System.out.println("eigenCheck(BH2, VECBH2, VALBH2)"); ComplexMatrix.eigenCheck(BH2, VECBH2, VALBH2); System.out.println(); System.out.println("trying eigvec"); eigvec(BH2, VALBH2, VECBH2); System.out.println("VECBH2="); ComplexMatrix.print(VECBH2); System.out.println("eigenCheck(BH2, VECBH2, VALBH2)"); ComplexMatrix.eigenCheck(BH2, VECBH2, VALBH2); System.out.println(); } public static void eigvec(final Complex A[][], final Complex Y[], Complex X[][]) { // Y[i] are eigenvalues of A, X[i][] is eigenvector int n=A.length; int m=n+1; Complex B[][]=new Complex[n][m]; // working matrix int row[]=new int[n]; // row interchange indicies int hold , I_pivot; // pivot indicies Complex pivot; // pivot element value double abs_pivot; Complex T[] = new Complex[n]; double r; Complex z; if(A[0].length!=n || Y.length!=n || X.length!=n) { System.out.println("Error in simeq,"+ " inconsistent array sizes."); } // build working data structure for(int v=0; v