矩阵乘法的以下函数是否有错误?

时间:2013-10-30 08:15:17

标签: c function matrix

以下是计算两个矩阵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;
        }
    }   
} 

3 个答案:

答案 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;
        }
    }   

}