// QRDecomposition.java // A = Q * R R is upper triangular and Q^T * Q = 1 // to solve A * X = Y R * X = Q * Y solve for X by back substitution // not very efficient for solving linear equations import java.io.*; import java.text.*; public strictfp class QRDecomposition { public QRDecomposition() // constructor runs test on class { System.out.println("testing QRDecomposition.java"); DecimalFormat f4 = new DecimalFormat("0.000"); DecimalFormat f8 = new DecimalFormat(" ,##0.0000000;-,##0.0000000"); int n = 4; double A[][] = new double[n][n]; double At[][] = new double[n][n]; // saved version of A double Ac[][] = new double[n][n]; // for checking Q * R = At double Q[][] = new double[n][n]; // not needed for solve double R[][] = new double[n][n]; // not needed for solve double C[] = new double[n]; double D[] = new double[n]; // diagonal of R double Y[] = new double[n]; // RHS double X[] = new double[n]; // unknown solution double Xt[] = new double[n]; // saved solution double sumerr, err; boolean sing = true; // build A, Hilbert matrix, and X, and Y A * Xt = Y System.out.println("A matrix of A * X = Y"); for(int i=0; ii) Q[i][j] = 0.0; if(j==i) Q[i][j] = A[i][j]; if(j=0; i--) // 12 { sum = 0.0; for(int j=i+1; j