J'utilise jama libarary pour la matrice. J'ai utilisé la matrice suivante mais quand j'ai essayé d'obtenir S, cela m'a donné une erreur.Comment réparer cette erreur ArrayIndexOutOfBounds dans 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
Lorsque j'ai essayé d'obtenir S, cela produit une erreur de suivi.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Jama.SingularValueDecomposition.getS(SingularValueDecomposition.java:507)
at SVD2.main(SVD2.java:19)
Voici le 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();
}
}
Je ne pense pas que ce soit le problème. Parce que si j'utilise 3 colonnes et 2 rangées de tableaux cela fonctionne bien. Vous pouvez même utiliser le tableau suivant avec mon code, il fonctionnera très bien doubles [] [] = {vals \t \t \t \t {1,1,0}, \t \t \t \t {1,0,1} \t \t \t \t \t \t \t}; – user238384
Y at-il un moyen, je peux le faire fonctionner pour m
user238384
Transposer une matrice signifie changer de ligne et de colonne, ce qui créerait une matrice 11x3 dans votre cas.Je pense que le changement de votre avant-dernière ligne à 'SingularValueDecomposition svd = A.transpose(). Svd();' fonctionnerait. C'est un défaut de Jama que l'opération SVD ne fait pas déjà quelque chose comme ça pour gérer les matrices larges (par opposition aux grandes). – mob