У меня есть следующая матрица:
0.003,0.013,0.022,0.013,0.003
0.013,0.060,0.098,0.060,0.013
0.022,0.098,0.162,0.098,0.022
0.013,0.060,0.098,0.060,0.013
0.003,0.013,0.022,0.013,0.003
Я пытаюсь использовать la4j для вычисления его разложения по сингулярным значениям, используя этот код:
SingularValueDecompositor SVD = new SingularValueDecompositor(A);
Matrix[] factorization = SVD.decompose();
Matrix U = factorization[0];
Matrix D = factorization[1];
Matrix V = factorization[2];
Тем не мение, результат для U, D, V по порядку:
0.102,-0.826, 0.307,-0.456,-0.071
0.456,-0.175,-0.859,-0.155,-0.017
0.751, 0.423, 0.374,-0.337,-0.059
0.456,-0.320, 0.166, 0.740, 0.339
0.102,-0.076, 0.029, 0.327,-0.936
-----------
.2873094460,.0000000000,.0000000000,.0000000000,.0000000000
.0000000000,.0000000000,.0000000000,.0000000000,.0000000000
.0000000000,.0000000000,.0000000000,.0000000000,.0000000000
.0000000000,.0000000000,.0000000000,.0000000000,.0000000000
.0000000000,.0000000000,.0000000000,.0000000000,.0000000000
-----------
0.102,-0.051, 0.975,-0.148,-0.122
0.456, 0.870, 0.030, 0.186, 0.027
0.751,-0.481,-0.015, 0.374, 0.253
0.456,-0.079,-0.221,-0.627,-0.586
0.102, 0.061,-0.009,-0.640, 0.759
и эти три матрицы умножаются на
0.003,-0.001,0.028,-0.004,-0.004
0.013,-0.007,0.128,-0.019,-0.016
0.022,-0.011,0.210,-0.032,-0.026
0.013,-0.007,0.128,-0.019,-0.016
0.003,-0.001,0.028,-0.004,-0.004
который не является A. Я думаю, что часть проблемы может заключаться в том, что фактические диагональные сингулярные значения меньше 0,001 (кроме первого), поэтому они не появляются. (Причина, по которой десятичные числа составляют 10 цифр, заключается в том, что я установил десятичный формат таким образом). У меня вопрос: как мне обойти эту проблему и отобразить все единичные значения?




Разложение по сингулярным числам пытается разложить матрицу A на A = U * D * V', где V' - это транспонирование V.
// Instead of
A = U.multiply(D.multiply(V));
// Try
A = U.multiply(D.multiply(V.transpose()));
// You should get back:
0.0030 0.0134 0.0220 0.0134 0.0030
0.0134 0.0597 0.0984 0.0597 0.0134
0.0220 0.0984 0.1620 0.0984 0.0220
0.0134 0.0597 0.0984 0.0597 0.0134
0.0030 0.0134 0.0220 0.0134 0.0030