Прочитайте статью вики о SVD .Следующий код является примером примера в Разделе 2.
import Jama.Matrix;
import Jama.SingularValueDecomposition;
public class JAMATest {
static public void printMatrix(Matrix m){
double[][] d = m.getArray();
for(int row = 0; row < d.length; row++){
for(int col = 0; col < d[row].length; col++){
System.out.printf("%6.4f\t", m.get(row, col));
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
double[][] vals = { {1., 0., 0., 0., 2.},
{0., 0., 3., 0., 0.},
{0., 0., 0., 0., 0.},
{0., 4., 0., 0., 0.}
};
Matrix A = new Matrix(vals);
SingularValueDecomposition svd = new SingularValueDecomposition(A);
System.out.println("A = ");
printMatrix(A);
System.out.println("U = ");
printMatrix(svd.getU());
System.out.println("Sigma = ");
printMatrix(svd.getS());
System.out.println("V = ");
printMatrix(svd.getV());
}
}
и выдает outputL:
A =
1.0000 0.0000 0.0000 0.0000 2.0000
0.0000 0.0000 3.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 4.0000 0.0000 0.0000 0.0000
U =
0.0000 0.0000 -1.0000 0.0000
0.0000 1.0000 -0.0000 0.0000
0.0000 0.0000 -0.0000 1.0000
1.0000 0.0000 -0.0000 0.0000
Sigma =
4.0000 0.0000 0.0000 0.0000 0.0000
0.0000 3.0000 0.0000 0.0000 0.0000
0.0000 0.0000 2.2361 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
0.0000 0.0000 0.0000 0.0000 0.0000
V =
0.0000 -0.0000 -0.4472 -0.8944 -0.0000
0.0000 -0.0000 -0.0000 -0.0000 -0.0000
0.0000 1.0000 -0.0000 -0.0000 -0.0000
0.0000 -0.0000 -0.0000 -0.0000 1.0000
1.0000 -0.0000 -0.8944 0.4472 -0.0000
Надеюсь, это поможет.Кроме того, FWIW - это вывод Matlab по той же проблеме:
>> A = [1.0000, 0.0000, 0.0000, 0.0000, 2.0000; 0, 0, 3, 0, 0; 0, 0, 0, 0, 0; 0, 4, 0, 0, 0];
>> A
A =
1 0 0 0 2
0 0 3 0 0
0 0 0 0 0
0 4 0 0 0
>> [U, S, V] = svd(A);
>> U
U =
0 0 1 0
0 1 0 0
0 0 0 -1
1 0 0 0
>> S
S =
4.0000 0 0 0 0
0 3.0000 0 0 0
0 0 2.2361 0 0
0 0 0 0 0
>> V
V =
0 0 0.4472 0 -0.8944
1.0000 0 0 0 0
0 1.0000 0 0 0
0 0 0 1.0000 0
0 0 0.8944 0 0.4472
Что касается вашего первого вопроса, следующий код не выдаст ошибки:
import Jama.Matrix;
public class JAMATest {
/**
* @param args
*/
public static void main(String[] args) {
double[][] vals = {{1.,1.,0},{1.,0.,1.},{1.,3.,4.},{6.,4.,8.}};
Matrix A = new Matrix(vals);
}
}
Так что еще вывыполнение должно быть причиной того, что у него есть исключение.Попробуйте использовать мой метод printMatrix вместо всего, что вы используете, и посмотрите, поможет ли это.