001    package numal.lowprecision.test;
002    
003    import junit.framework.TestCase;
004    import java.text.DecimalFormat;
005    import numal.lowprecision.LinearAlgebra;
006    
007    public class TestQrisngvaldec extends Object {
008    
009    /** Test the method {@link LinearAlgebra#qrisngvaldec}.
010     * The output of this method should be :
011    {@code 
012        Number of singular values not found :  0
013        
014        Infinity norm :  2.28333E0
015        Max neglected subdiagonal element :  2.11719E-5
016        Number of iterations :  3
017        Numerical rank : 5
018         
019        Singular values :
020           1.59212E0
021           2.24496E-1
022           1.36102E-2
023           1.25733E-4
024           1.41703e-5
025           
026        Matrix U, first 3 columns :
027          -7.54979E-1  6.10111E-1     -2.33268E-1
028          -4.39093E-1  -2.26021E-1    7.05899E-1
029          -3.17031E-1  -3.73070E-1    2.11269E-1
030          -2.49995E-1  -3.95578E-1    -1.47776E-1
031          -2.07050E-1  -3.84833E-1    -3.68054E-1
032          -1.76997E-1  -3.64582E-1    -4.95335E-1
033          
034        Last 2 columns :
035          9.87458E-1   -2.57541E-1
036          -6.88740E-1  2.67620E-1
037          -3.89435E-1  -5.02005E-1
038          8.52031E-1   -1.34877E-1
039          -2.25331E-1  7.40444E-1
040          -2.67328E-1  -3.30543E-1
041    } 
042     */
043    public static void main(String args[]) {
044        float a[][] = new float[7][6];
045        for (int i = 1; i <= 6; i++)
046            for (int j = 1; j <= 5; j++) a[i][j] = 1f / (i + j - 1);
047      
048        float val[] = new float[6];
049        float v[][] = new float[6][6];
050      
051        // 4 input parameters in even index entries, 4 output values are returned in odd
052        float em[]  = {1e-6f, 0f, 1e-5f, 0f, 25f, 0f, 1e-5f, 0f}; 
053    
054        int notFound = LinearAlgebra.qrisngvaldec(a, 6, 5, val, v, em);
055        DecimalFormat fiveDigit = new DecimalFormat("0.00000E0");
056        System.out.println("===============Test LinearAlgebra.qrisngvaldec==============");
057        System.out.println("Number of singular values not found :  " + notFound +
058                "\n\nInfinity norm :  " + fiveDigit.format(em[1]) +
059                "\nMax neglected subdiagonal element :  " + fiveDigit.format(em[3]) +
060                "\nNumber of iterations :  " + (int)em[5] +
061                "\nNumerical rank :  " + (int)em[7] +
062                "\n\nSingular values :");
063    
064        for (int i = 1; i <= 5; i++)
065            System.out.println("  " + fiveDigit.format(val[i]));
066    
067        System.out.println("\nMatrix U, first 3 columns :");
068        for (int i = 1; i <= 6; i++)
069            System.out.println("  " + fiveDigit.format(a[i][1]) + "\t" +
070                                      fiveDigit.format(a[i][2]) + "\t" +
071                                      fiveDigit.format(a[i][3]));
072    
073        System.out.println("Last 2 columns :");
074        for (int i = 1; i <= 6; i++)
075            System.out.println("  " + fiveDigit.format(a[i][4]) + "\t" + fiveDigit.format(a[i][5]));
076    }
077    }