2013-09-24 89 views
0
#include<iostream.h> 
#include<conio.h> 
#include<math.h> 

double Det (double a[2][2], int size); 
void form(double a[2][2], int c, int size); 

double b[2][2]; 

double Det(double a[2][2], int size) { 
    if (size==1) { 
    return a[0][0]; 
    } 
    else { 
    double ans = 0.0; 
    int c; 
    for (c=0;c<size;c++) { 
     form(a,c,size); 
     ans += pow(-1.0,(double)c)*Det(b,size-1); 
    } 
    return ans; 
    } 
} 

void form(double a[2][2], int c, int size) { 
    int i,j=0,k,l=0; 
    for (i=0;i<size;i++) { 
    for (j=0;j<size;j++) { 
     if ((i!=0)&&(j!=c)) { 
     if (l==size-1) { 
      k++; 
      l=0; 
     } 
     b[k][l]=a[i][j]; 
     l++; 
     } 
    } 
    } 
} 

int main() { 
    double mat[2][2] = {{1.0,2.0},{3.0,7.0}}; 
    cout << Det(mat,2); 
    getch(); 
    return 0 ; 
} 

我正在用C++編寫程序來計算使用遞歸的矩陣的行列式。我知道有很多更好的算法來做同樣的事情。但是,我被要求實施這一項。作爲一個測試用例,我使用了代碼中指定的矩陣。當我運行這段代碼時,我得到了-4而不是1的答案。我不明白這段代碼有什麼問題。有人可以幫忙嗎?提前致謝。行列式計算錯誤

+0

這是一些瘋狂的縮進。 – chris

+0

'iostream.h'? *你的工具鏈多少歲?* – WhozCraig

回答

0

你在你的代碼了幾個錯誤,請使用以下

#include<iostream> 
#include<math.h> 
using namespace std; 
double Det (double a[2][2], int size); 
void form(double a[2][2], int c, int size); 
double b[2][2]; 
double Det(double a[2][2], int size) 
{ 
    if(size==1) 
    return a[0][0]; 
    else 
    { 
    double ans=0.0; 
    int c; 
    for(c=0;c<size;c++) 
    { 
     form(a,c,size); 
     ans+=pow(-1.0,(double)c) * a[0][c] * Det(b,size-1); 
    } 
    return ans; 
    } 
} 
void form(double a[2][2], int c, int size) 
{ 
    int i,j=0,k = 0,l=0; 
    for(i=0;i<size;i++) 
    { 
    for(j=0;j<size;j++) 
    { 
     if((i!=0)&&(j!=c)) 
     { 
     if(l==size-1) 
     { 
      k++; 
      l=0; 
     } 
     b[k][l]=a[i][j]; 
     l++; 
     } 
    } 
    } 
} 
int main() 
{ 
    double mat[2][2]={{1.0,2.0},{3.0,7.0}}; 
    cout<<Det(mat,2); 
    return 0 ; 
} 

一本給你1。錯誤,你忘了初始化k爲0,你忘了乘以a[0][c]

+0

哦該死的。感謝您指出! – DVB

+0

如果這是答案,請標記它。 –

+0

相同的代碼是否適用於nxn矩陣? – DVB