I am using jama libarary for matrix. I used following matrix but when i tried to get S, it gave me error.
1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0 11.0 1.0
1.0 0.0 0.0 0.0 0.0 0.0 1.0 0.0 0.0 12.0 2.0
1.0 1.0 0.0 0.0 0.0 0.0 0.0 0.0 1.0 13.0 3.0
When I tried to get S it produce following error.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Jama.SingularValueDecomposition.getS(SingularValueDecomposition.java:507)
at SVD2.main(SVD2.java:19)
Here is the code
public class SVD2 {
public static void main(String[] args) {
double[][] vals = {
{1,1,0,1,0,0,0,0,0,11,1},
{1,0,0,0,0,0,1,0,0,12,2},
{1,1,0,0,0,0,0,0,1,13,3}
};
Matrix A = new Matrix(vals,3,11);
System.out.println("The Matrix A is ");
A.print(11, 2);
System.out.println();
System.out.println("The SVD of A is ");
SingularValueDecomposition svd = A.svd();
Matrix S = svd.getS();
}
}
For Jama’s singular value decomposition, the number of rows must not be less than the number of columns. Maybe you should try SVD on the transpose of the matrix you provided.
EDIT: Here’s the relevant code from
SingularValueDecomposition.java:Sis constructed to be ann x narray, so the only possible source of anArrayIndexOutOfBoundsExceptionis from the reference tothis.s[i].Space for
sis initialized in theSingularValueDecompositionconstructor (amd no where else) like this:So the Jama implementation will work for a 2×3 input (contradicting what they say in the class javadoc). But I bet it won’t work for a 2×4 input.