2014-03-06 2 views
3

선형 시스템을 해결하는이 함수를 수행하려고하면 A = x 삼각형 행렬, 선형 독립 행렬 및 단 하나의 해가됩니다. 그러나 결과는 항상 0 0 0 0 ... ... 나는 합계의 인쇄했고, 항상뿐만 아니라 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

이것은 유명한 알고리즘입니다. 그것은 역 대체라고합니다. 조금만 Google을 사용해보십시오. 나는 당신이 단계별로 그것을 찾을 것이라는 것을 확신한다 :) 만일 당신이 여전히 도움을 청하는 끈적 거림이라면. –

답변

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++){ 

이해야 be :

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

그러면 피벗이 항상 0이 아닌 것으로 가정하면 잘 작동합니다.

+0

아니요, 합계에 여전히 오류가 있습니다 – 4pie0

+0

@lizusek Err ... no? 예를 들어, i = 1 일 때는 A [1] [0] * x [0]이어야하며 코드는 0 일뿐입니다. 모든 A [i] [j] * x [j] ** 대각선의 왼쪽 **에 기본적으로 i sbabbi

+0

네, 맞습니다. – 4pie0

관련 문제