我正在制作一个将两个3X3矩阵相乘的程序。我遇到了一些问题,我无法弄清问题。任何帮助将不胜感激:D
#include <iostream>
using namespace std;
int main(){
int matrix1[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int matrix2[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
int results[3][3];
int product = 0;
int i;
int j;
for (i = 1; i <= 3; i++){
for (j = 1; j <= 3; j++){
product += matrix1[i][j] * matrix2[j][i];
cout << product << endl;
}
results[i][j] = product;
product = 0;
}
cout << endl << "Output Matrix: " << endl;
for (int i = 1; i < 4; i++){
for (int j = 1; j < 4; j++){
cout << results[i][j];
}
cout << endl;
}
system("pause");
return 0;
}
这是我摆脱它的结果:
25
73
-1717986851
48
129
-858993331
-1867771963
1566576709
1595991863
Output Matrix:
-858993460-858993460-858993460
-1717986851-858993460-858993460
-85899333112
Press any key to continue . . .
提前再次感谢! :d
答案 0 :(得分:0)
你的矩阵乘法代码是错误的。看看这个文字实现:
for (i = 0; i < 3; i++){
for (j = 0; j < 3; j++){
product = 0;
for (k = 0; k < 3; k++){
product += matrix1[i][k] * matrix2[k][j];
}
matrix3[i][j] = product;
}
}
答案 1 :(得分:0)
矩阵乘法通过以下方式实现(对于2 N x N矩阵):
for i = 1..N
for j = 1..N
result[i][j] = 0.
for k = 1..N
result[i][j] += matrix1[i][k] * matrix2[j][k] // "row times column"
end for
end for
end for
这将返回产品result = matrix1 * matrix2
。在C ++中,你必须使用例如。
for (int i = 0; i < N; i++)
循环。你必须从0开始并以N-1结束(这就是你使用<
而不是<=
的原因)。在您的示例中设置int N = 3
。
您只每delete
使用new
。因此,如果不动态分配矩阵,则无需删除数组。
答案 2 :(得分:0)
首先,您不需要开头的int i, j;
行。如果你没有它们,编译器会正确地告诉你results[i][j] = product;
在错误的地方。阵列&#39;第一个值不是A[1]
,而是A[0]
。对于矩阵乘法,我建议你阅读this
因此,解决方案应如下所示:
int matrix1[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int matrix2[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int results[3][3] = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}};
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
for (int u = 0; u < 3; u++)
results[i][j] += matrix1[i][u] * matrix2[u][j];
}
cout << endl << "Output Matrix: " << endl;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
cout << results[i][j] << ".";
}
cout << endl;
}