2016-12-07 164 views
-2

我正在編寫一個程序,將兩個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

+0

爲什麼你使用'刪除[]矩陣1;'ASO,如果你從來沒有創建這些使用'new'? –

+0

'results [i] [j] = product;'應該在內部循環體內。 –

+3

首先,你似乎忘記了數組索引從零到大小減1。 –

回答

0

所以開始時你並不需要在開頭的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開始。非常感謝 –

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; 

    } 
} 
0

矩陣乘法實現下列方式(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。因此,如果不動態分配矩陣,則不需要刪除數組。