2013-11-25 222 views
0

我想要這樣的: 乘以3x3矩陣與3x1矩陣。我嘗試將我的1維數組轉換爲2維。我認爲這很好,但後來在乘法中我得到錯誤。但我不知道爲什麼。這是我的代碼。不同尺寸的C++矩陣乘法

// 20 -20 0   150 
    //-20 40 -20 x  0 
    // 0 -20 30   400 
    int n = 3; 
double *tab_P = new double [n]; 

tab_P[0] = 150; 
tab_P[1] = 0; 
tab_P[2] = 400; 


double **tab_H; 
tab_H = new double* [n]; 
for(int i=0; i<n; i++) 
    tab_H[i] = new double[n]; 

tab_H[0][0] = 0.2; 
tab_H[0][1] = 0.15; 
tab_H[0][2] = 0.1; 


tab_H[1][0] = 0.15; 
tab_H[1][1] = 0.15; 
tab_H[1][2] = 0.1; 

tab_H[2][0] = 0.1; 
tab_H[2][1] = 0.1; 
tab_H[2][2] = 0.1; 

double **tmp_P; 
tmp_P = new double *[n]; 
for(int i=0; i<n; i++) 
    tmp_P[i] = new double [1]; 

for(int i=0; i<n; i++){ 
    for(int j=0; j<1; j++) { 
     tmp_P[i][j] = tab_P[i]; 
    } 
} 

double **result = new double * [n]; 
for(int i=0; i<n; i++) 
    result[i] = new double [1]; 


int i,j,k; 
int s = 0; 
for(i=0; i<n; i++) { 
    for(j=0; j<1; j++) { 
     s = 0; 
     for(k =0; k<n; k++) 
      s += tab_H[i][k] * tmp_P[k][j]; 
     result[i][j]; 
    } 
} 
+0

你在哪裏爲* tab_P分配內存?再次,你看到的錯誤是什麼,乘法結果?還是一維數組? – theAlias

+0

@theAlias他在頂部做了這個,它只是一個一維數組。 – cmaster

+0

最後在循環的某處出現錯誤。訪問衝突讀取位置....我認爲循環中的索引有問題,但我看不到在哪裏。 – Madbrush

回答

0

你發佈的代碼不包含任何內存錯誤(我用valgrind檢查過,這是一個非常有價值的工具,檢查出來)。所以,不知何故,你沒有將錯誤複製到你發佈的代碼中。當你在發佈的內容和原始代碼之間進行字符比較時,你應該發現你的錯誤。

你的代碼中有一個邏輯錯誤,但是:您使用int爲變量s,您可以使用它總結的中間產品。只要您爲s賦值,浮點乘積就會舍入爲一個整數。這將導致錯誤的結果。變量s使用double