44 lines
1.3 KiB
Java
44 lines
1.3 KiB
Java
package math;
|
|
|
|
import math.matrix.Matrix;
|
|
import math.matrix.SingularValueDecomposition;
|
|
import exception.IllegalDimensionException;
|
|
|
|
/**
|
|
* Test client for computing singular values of a matrix.
|
|
*/
|
|
public class SVD {
|
|
public static void main(String[] args) throws IllegalDimensionException {
|
|
|
|
// create M-by-N matrix that doesn't have full rank
|
|
int M = 8, N = 5;
|
|
Matrix B = Matrix.random(5, 3);
|
|
Matrix A = Matrix.random(M, N).times(B).times(B.transpose());
|
|
System.out.print("A = ");
|
|
A.print(9, 6);
|
|
|
|
// compute the singular vallue decomposition
|
|
System.out.println("A = U S V^T");
|
|
System.out.println();
|
|
SingularValueDecomposition s = A.svd();
|
|
System.out.print("U = ");
|
|
Matrix U = s.getU();
|
|
U.print(9, 6);
|
|
System.out.print("Sigma = ");
|
|
Matrix S = s.getS();
|
|
S.print(9, 6);
|
|
System.out.print("V = ");
|
|
Matrix V = s.getV();
|
|
V.print(9, 6);
|
|
System.out.println("rank = " + s.rank());
|
|
System.out.println("condition number = " + s.cond());
|
|
System.out.println("2-norm = " + s.norm2());
|
|
|
|
// print out singular values
|
|
System.out.print("singular values = ");
|
|
Matrix svalues = new Matrix(s.getSingularValues(), 1);
|
|
svalues.print(9, 6);
|
|
}
|
|
|
|
}
|