在C++中乘以3x3矩阵
问题描述:
我正在编写一个程序,将两个3X3矩阵相乘。我遇到了一些问题,我无法弄清楚问题所在。任何帮助,将不胜感激:d在C++中乘以3x3矩阵
#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
答
所以开始时你并不需要在开头的int i, j;
行。如果你没有它们,编译器会正确地告诉你results[i][j] = product;
位于错误的地方。数组的第一个值不是在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;
}
+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;
}
}
答
矩阵乘法实现下列方式(2点N×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++)
for a loop。您必须以0开头并以N-1结尾(这就是为什么您使用<
而不是<=
)。在你的例子中设置int N = 3
。
您只有对于每new
使用delete
。因此,如果不动态分配矩阵,则不需要删除数组。
为什么你使用'删除[]矩阵1;'ASO,如果你从来没有创建这些使用'new'? –
'results [i] [j] = product;'应该在内部循环体内。 –
首先,你似乎忘记了数组索引从零到大小减1。 –