如何通过将两个矩阵相乘来解决这个问题?
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];
}
}
}
}
您的乘法代码从矩阵 C
、A
和 B
中读取值。从文件中读取矩阵 A 和 B,但是您忘记用零初始化矩阵 C
(,即 int C[5][5] = {0};
)。否则,矩阵 C 将包含 random 值。这些随机值将在 C[i][j] = C[i][j] + A[i][k] * B[k][j];
.
操作期间添加到矩阵 A
和 B
此外,在for(int j = 0; j < columnsB + 1; j++)
中将columnsB + 1
更改为columnsB
。否则,您将超出矩阵 C
和 B
的边界,在以下代码中用“^”标记:
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。
我正在尝试将两个矩阵相乘,这两个矩阵是从一个文本文件中读取的,这就是为什么矩阵的值没有被初始化的原因。这是代码:
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];
}
}
}
}
您的乘法代码从矩阵 C
、A
和 B
中读取值。从文件中读取矩阵 A 和 B,但是您忘记用零初始化矩阵 C
(,即 int C[5][5] = {0};
)。否则,矩阵 C 将包含 random 值。这些随机值将在 C[i][j] = C[i][j] + A[i][k] * B[k][j];
.
A
和 B
此外,在for(int j = 0; j < columnsB + 1; j++)
中将columnsB + 1
更改为columnsB
。否则,您将超出矩阵 C
和 B
的边界,在以下代码中用“^”标记:
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。