Pregunta

Estoy utilizando libarary JAMA para la matriz. Me utilizan luego de la matriz, pero cuando he intentado conseguir S, que me dio 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

Cuando traté de S que producen siguiente error.

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at Jama.SingularValueDecomposition.getS(SingularValueDecomposition.java:507)
    at SVD2.main(SVD2.java:19)

Este es el código

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();       
    }

}
¿Fue útil?

Solución

descomposición en valores singulares de Jama, el número de filas no debe ser menor que el número de columnas . Tal vez usted debe tratar de enfermedad vesicular porcina el transpuesta de la matriz que ya ha proporcionado.

EDIT: Este es el código pertinente de SingularValueDecomposition.java:

   public Matrix getS () {
      Matrix X = new Matrix(n,n);
      double[][] S = X.getArray();
      for (int i = 0; i < n; i++) {
         for (int j = 0; j < n; j++) {
            S[i][j] = 0.0;
         }
         S[i][i] = this.s[i];
      }
      return X;
   }

S está construido para ser una matriz n x n, por lo que la única fuente posible de un ArrayIndexOutOfBoundsException es de la referencia a this.s[i].

Espacio para s se inicializa en el constructor SingularValueDecomposition (AMD en ningún otro lugar) como esto:

s = new double [Math.min(m+1,n)];

Así que la aplicación Jama trabajará para una entrada 2x3 (contradiciendo lo que dicen en el javadoc de la clase). Pero apuesto a que no va a funcionar para una entrada de 2x4.

Otros consejos

¿Nos puede mostrar el código que se accede a la matriz? La excepción se obtiene claramente indica que usted está tratando de índice fuera de los límites legales de la matriz subyacente.

Es una matriz 3x11. El hecho de que usted está recibiendo un índice fuera de límites excepción para i = 4 me sugiere que su recuento de filas se especifica de forma incorrecta en alguna parte.

Otra biblioteca como Apache Commons Matemáticas ayuda fuerzas, pero no creo que la biblioteca es la cuestión aquí. Es su falta de comprensión de la enfermedad vesicular porcina que es el verdadero problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top