以下是计算两个矩阵A和B之间的矩阵乘法的函数,该值将存储在矩阵C中。矩阵B中的行数与A中的列数相同。假设此函数中存在错误,因为在使用该函数时似乎没有产生正确的输出,但错误可能出现在我的程序的其他部分。
void matMul(Matrix A, Matrix B, int ARows, int ACols, int BCols, Matrix C){
int i,j,k;
for(i=0;i<ARows;i++){
for(j=0;j<ACols;j++){
int sum = 0;
for(k=0;k<BCols;k++){
sum += A[i][k]*B[k][j];
}
C[i][j] = sum;
}
}
}
答案 0 :(得分:0)
我看到的是:
int sum = 0;
应至少在第一个for
循环中完成,因为它在外循环中使用。您的代码会在内循环的每次迭代中将其重置为0.
或者更好的是,
void matMul(Matrix A, Matrix B, int ARows, int ACols, int BCols, Matrix C){
int i,j,k, sum;
for(i=0;i<ARows;i++){
sum = 0;
for(j=0;j<ACols;j++){
for(k=0;k<BCols;k++){
sum += A[i][k]*B[k][j];
}
C[i][j] = sum;
}
}
}
答案 1 :(得分:0)
该功能应该是:
void matMul(Matrix A, Matrix B, int ARows, int ACols, int BCols, Matrix C){
int i,j,k;
for(i=0;i<ARows;i++){
int sum = 0;
for(j=0;j<ACols;j++){
for(k=0;k<BCols;k++){
sum += A[i][k]*B[k][j];
}
C[i][j] = sum;
}
}
}
在每次评估两个矩阵的行和列元素的乘积之前,必须将总和重置为零。
答案 2 :(得分:0)
当评估乘法时,sum=0
正在将sum等于零,并且sum将仅包含矩阵的第一行(例如M1)的最后一个值与第二个矩阵的列的最后一个值(比如M2)的乘法。
因此,每次正确时,sum将是不正确的值:
void matMul(Matrix A, Matrix B, int ARows, int ACols, int BCols, Matrix C){
int i,j,k, sum;
for(i=0;i<ARows;i++){
for(j=0;j<ACols;j++){
for(k=0;k<BCols;k++){
sum += A[i][k]*B[k][j];
}
C[i][j] = sum;
sum = 0;
}
}
}