矩阵乘法的以下函数中是否存在错误?
问题描述:
以下是计算两个矩阵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;
}
}
}
答
一个我看到的是:
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;
}
}
}
答
的功能应该是:
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;
}
}
}
总和必须复位两个矩阵的行和列的元素的产品的每一个评价之前为零。
答
sum=0
当求和乘法和求和只包含矩阵的第一行(例如M1)的最后一个值与第二个矩阵(例如M2)的最后一个值的乘积时,求和等于零。 因此总和将不正确的值,每次正确将是:
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;
}
}
}
输入矩阵(其必须通过引用以某种方式被传递,由于大小不固定)应'const'。 – unwind