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