如何通过将两个矩阵相乘来解决这个问题?

How do I fix this problem with multiplying two matrices?

我正在尝试将两个矩阵相乘,这两个矩阵是从一个文本文件中读取的,这就是为什么矩阵的值没有被初始化的原因。这是代码:

int main() {
    ...
    else if (multiplication == true){
        if (columnsA == rowsB && rowsA == columnsB){
            for(int i = 0; i < rowsA; i++){
                for(int j = 0; j < columnsB + 1; j++){
                    for(int k = 0; k < columnsA; k++){
                        C[i][j] = C[i][j] + A[i][k] * B[k][j];
                    }
                } 
            }
        }
        else{
            printf("\nError: The number of columns in Matrix A must be equal to the number of rows in Matrix B for multiplication");
            return 1;
        }
    }
    ...

return 0;
}

A 是第一个矩阵,B 是第二个矩阵,C 是输出。 rowsA 是矩阵 A 中的行数, B 是矩阵 matrixB 中的列数。

代码适用于输出矩阵中的第一个数字,但最后一个数字总是很长的随机数。

例如,输入将是具有以下值的 2x2 矩阵: 第 1 行:3 1 第 2 行:5 2

和另一个 2x2 具有以下值的矩阵

row 1: 4 1
row 2: 2 6

输出结果为

row 1: 14 9
row 2: 24 -374793898(or some other long, random number)

前三个数字是正确的(我检查过)但最后一个永远不对。

我认为你应该这样做,

用0初始化c[5][5]。

   else if (multiplication == true){
        if (columnsA == rowsB && rowsA == columnsB){
            for(int i = 0; i < rowsA; i++){
                for(int j = 0; j < columnsB + 1; j++){
                    for(int k = 0; k < columnsA; k++){
                        C[i][j] = C[i][j] + A[i][k] * B[k][j];
                    }
                } 
            }
        }

您的乘法代码从矩阵 CAB 中读取值。从文件中读取矩阵 A 和 B,但是您忘记用零初始化矩阵 C,即 int C[5][5] = {0};)。否则,矩阵 C 将包含 random 值。这些随机值将在 C[i][j] = C[i][j] + A[i][k] * B[k][j];.

操作期间添加到矩阵 AB

此外,在for(int j = 0; j < columnsB + 1; j++)中将columnsB + 1更改为columnsB。否则,您将超出矩阵 CB 的边界,在以下代码中用“^”标记:

 for(int j = 0; j < columnsB + 1; j++)
    for(int k = 0; k < columnsA; k++)
        C[i][j] = C[i][j] + A[i][k] * B[k][j];
                      ^^^                 ^^^

我认为根本原因是这条线

for(int j = 0; j < columnsB + 1; j++){

+1 让你走出 5x5 矩阵

此外,您确实需要将 C 矩阵初始化为 0。