Я использую jama libarary для матрицы. Я использовал следующую матрицу, но когда я попытался получить S, это дало мне ошибку.Как исправить ошибку ArrayIndexOutOfBounds в Jama?
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
Когда я попытался получить S, он произвел следующую ошибку.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Jama.SingularValueDecomposition.getS(SingularValueDecomposition.java:507)
at SVD2.main(SVD2.java:19)
Вот код
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();
}
}
Я не думаю, что это проблема. Потому что, если я использую 3 столбца и 2 ряда строк, он работает нормально. Вы даже можете использовать следующий массив с моим кодом будет работать нормально двойной [] [] = {Vals \t \t \t \t {1,1,0}, \t \t \t \t {1,0,1} \t \t \t \t \t \t \t}; – user238384
Есть ли способ, я могу заставить его работать для m
user238384
Транспонирование матрицы означает переключение строк и столбцов, что создало бы матрицу 11x3 в вашем случае.Я думаю, что изменить свою четвертую-последнюю строку на 'SingularValueDecomposition svd = A.transpose(). Svd();' будет работать. Это дефект в Jama, что операция SVD уже не делает что-то подобное для обработки широких (в отличие от высоких) матриц. – mob