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 }