La multiplication de matrice à l'aide de tableaux
Je suis en train de faire une simple multiplication de matrice de la méthode à l'aide de tableaux multidimensionnels ([2][2]
). Je suis un peu nouveau à cela, et je ne peux pas trouver ce que je fais mal. Je serais vraiment reconnaissant de toute aide en me racontant ce qu'il est. Je préfère ne pas utiliser des bibliothèques ou quelque chose comme ça, je suis la plupart du temps de faire ceci pour savoir comment elle fonctionne. Je vous remercie beaucoup à l'avance.
Je suis en déclarant mon arays dans la méthode main, comme suit:
Double[][] A={{4.00,3.00},{2.00,1.00}};
Double[][] B={{ -0.500,1.500},{1.000,-2.0000}};
A*B doit retourner la matrice identité. Il n'a pas.
public static Double[][] multiplicar(Double[][] A, Double[][] B){
//the method runs and returns a matrix of the correct dimensions
//(I actually changed the .length function to a specific value to eliminate
//it as a possible issue), but not the correct values
Double[][] C= new Double[2][2];
int i,j;
////I fill the matrix with zeroes, if I don't do this it gives me an error
for(i=0;i<2;i++) {
for(j=0;j<2;j++){
C[i][j]=0.00000;
}
}
///this is where I'm supposed to perform the adding of every element in
//a row of A multiplied by the corresponding element in the
//corresponding column of B, for all columns in B and all rows in A
for(i=0;i<2;i++){
for(j=0;j<2;j++)
C[i][j]+=(A[i][j]*B[j][i]);
}
return C;
}
- Vous avez besoin de trois boucles: il doit être
C[i][j] += A[i][k] * B[k][j]
. - Si vous utilisez une double remarquer les minuscules D! vous n'avez pas à initialiser le tableau de la première
- Pour répondre à votre question, je vous suggère d'utiliser un débogueur à l'étape par le biais de votre code pour savoir ce qu'il fait. Aussi je vous suggère d'utiliser
double
plutôt queDouble
. - Je vous remercie beaucoup. En rétrospective, c'était tellement évident. Je suis bête. Je vous remercie.
- Merci beaucoup, je vais garder cela à l'esprit.
- Il me faisait une erreur pour une raison quelconque, mais il semble étrange que je dois l'initialiser, car il est à ma connaissance le tableau est automatiquement rempli avec des 0, correct? J'étais probablement gâcher quelque part d'autre. Merci beaucoup pour la réponse.
- Si vous avez besoin d'aide pour déterminer la cause de l'erreur, vous devez copier et coller le message d'erreur exact ici.
- C'est l'erreur que j'obtiens. Gardez à l'esprit tout ce que je fait pour obtenir ce était de retirer la partie où je remplir le C tableau avec des 0, tout le reste est le même et la méthode fonctionne correctement si je n'ai pas l'enlever (même si elle ne fournit pas les valeurs correctes): Exception in thread "main" java.lang.NullPointerException lors de la clase.Ejecutable.multiplicar(Ejecutable.java:29) à la clase.Ejecutable.principale(Ejecutable.java:11) Java Résultat: 1
- Le Dobules avec un grand D sont des objets, de sorte que vous êtes la création d'un tableau d'objets qui initialise à null. Une rangée de petites doubles est une primtive et l'initialise à 0.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez essayer ce code:
Double
. Dans cette ligne: C[i][j] += A[i][k] * B[k][j]; vous devez ajouter la valeur de la multiplication d'unnull
de référence et vous obtenez unNullPointerException
. Au lieu d'utiliserDouble
vous utilisez la primitivedouble
cette partie ne serait pas nécessaire.if (aColumns != bRows)
àif (aColumns != bRows || aRows != bColumns)
. Il ne s'agit pas, comme actuellement indiqué, mais l'évolution qu'il va aider à ramasser tout les bugs lors de la matrice de mathématiques.3X3 matrix with 3X3 matrix
Java. La multiplication de matrice.
Testé avec des matrices de taille différente.
De sortie:
Essayer cela,
essayer cela,il peut vous aider à
La méthode
mults
est une procédure(Pascal) ou une sous-routine(Fortran)La méthode
multMatrix
est une fonction(Pascal,Fortran)où, comme la matrice d'entrée, vous pouvez entrer
inE.txt
dans unix comme dgmm ligne exécuter la commande:
$ java MatmultE < inE.txt > outE.txt
et vous obtenez la sortie
outC.txt
importer java.util.*;
public class Mult {
}