2014-03-06 90 views
3

我試圖做這個函數來求解線性系統,A * x = b,其中A =下三角矩陣,線性獨立矩陣,只有一個解。 但結果總是顯示0 0 0 0 ... 我已經印刷的總和,S,它總是顯示0,以及...求解Ax = b,A = C++中的下三角矩陣

#include <iostream> 
using namespace std; 

void solve(int n, float a[][MAX], float b[], float x[]){ 
int i,j; 
float s; 

for(i = 0; i < n; i++){ 
     s = 0; 
     for(j = 0; j < n; j++){ 

      s = s + a[i][j]*x[j]; 
      cout<<s<<endl; 
     } 
    x[i] = (b[i] - s)/a[i][i]; 
} 
} 
+0

不能使用LAPACK? –

+0

不,它必須在C++中,用「簡單的庫和包」... – LVL

+0

這是一個着名的算法。它被稱爲回代換。嘗試一下谷歌。我很肯定你會一步步找到它:)如果你仍然堅持尖叫尋求幫助。 –

回答

2
void solve(int n, float a[][MAX], float b[], float x[]){ 
    int i,j; 
    float s; 

    for(i = 0; i < n; i++) { 
     s = 0; 
     for(j = 0; j < i; j++) { 
        ^
      s = s + a[ i][ j] * x[ j]; 
     } 
     x[ i] = (b[ i] - s)/a[ i][ i]; 
    } 
} 

BackSubstitution.pdf

compiled example

1

這條線:

for(j = 0; j < n; j++){ 

應該是:

for(j = 0; j < i; j++){ 

然後它工作正常 - 假設你的樞軸總是非零。

+0

不,仍然存在錯誤 – 4pie0

+0

@lizusek Err ... no?例如,當你的代碼中i = 1 s時應該是A [1] [0] * x [0],而你的代碼只需要求和0.你必須將所有的A [i] [j] * x [j] **在對角線的左邊**,所以基本上是我 sbabbi

+0

是的,這是真的,OK – 4pie0

相關問題