在C ++中乘以3x3矩阵

时间:2016-12-07 12:55:38

标签: c++ visual-studio math matrix

我正在制作一个将两个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

3 个答案:

答案 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;
}