繁体   English   中英

使用 C++ 的矩阵乘法

[英]Matrix Multiplication using C++

(r1,c1) 和 (r2,c2) 是矩阵 a[][] 和矩阵 b[][] 的行数和列数 矩阵 c[][] 是 a[][] 和 b[ 的矩阵乘法][] 用户输入a[][] 和b[][] 的行数和列数,并输入两者的元素。

这是特定 a[][], b[][] 的完整程序给出的输出

对于相同的 a[][] 和 b[][],程序的预期输出是:c[2][2]={{7,14},{17,34}}

但是,我似乎无法在逻辑中找到错误。

以下部分代码是进行矩阵乘法的逻辑

for (i = 0; i < r1; i++) {
  for (j = 0; j < c2; j++) {
    c[i][j] = 0;
    for (k = 0; k < c1; k++) {
      c[i][j] += a[i][j] * b[k][j];
    }
  }
}
for (i = 0; i < r1; i++) {
  for (j = 0; j < c2; j++) {
    printf("%d ", c[i][j]);
  }
  printf("\n");
}     

你做的数学不正确。

根据垫乘法,

在此处输入图片说明

for(i=0 ; i<r1 ; i++)
{
    for(j=0 ; j<c2 ; j++) 
    {

        c[i][j]=0; 
        for(k=0 ; k<c1 ; k++)  
        {
            c[i][j]+=a[i][j]*b[k][j];
                      //--^-- should be k 
        }
    }
}

一些战略重命名给出

for(int row = 0; row < r1; row++)
{
    for(int column = 0; column < c2; column++) 
    {       
        c[row][column] = 0; 
        for(int element = 0; element < c1 ; element++)  
        {
            c[row][column] += a[row][column] * b[element][column]; 
        }
    }
}

在那里您可以更清楚地看到乘法是错误的 - 您在每一步都乘以a中的相同元素。

它应该是

c[row][column] += a[row][element] * b[element][column]; 

我想这可以帮助您解决问题:

c[i][j]+=a[i][k]*b[k][j]; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM