2013-04-08 5 views
1

2 차원 배열로 재생할 간단한 코드를 작성했습니다. 코드의 목적은 행렬 방법을 사용하여 두 선형 연립 방정식을 푸는 것입니다 (정사각형 행렬의 계수 표현, 각각의 방정식의 출력을 역수로 곱하여 두 변수의 결과를 찾음). 코드가 컴파일 될 때 아무런 경고도 없으므로 문제가 무엇인지 모릅니다.프로그램에서 잘못된 값을 반환합니다. (C++)

#include <iostream> 
using namespace std; 

double determinant(double parameterMatrix[2][2]) 
{ 
    return parameterMatrix[1][1] * parameterMatrix[2][2] - parameterMatrix[1][2] *  parameterMatrix[2][1]; 
} 

void invertMatrix (double parameterMatrix[2][2], double inverseMatrix[2][2]) 
{ 
    double parameterDeterminant = determinant(parameterMatrix); 

    inverseMatrix[1][1] = parameterMatrix[2][2]/parameterDeterminant; 
    inverseMatrix[1][2] = - parameterMatrix[1][2]/parameterDeterminant; 
    inverseMatrix[2][1] = - parameterMatrix[2][1]/parameterDeterminant; 
    inverseMatrix[2][2] = parameterMatrix[1][1]/parameterDeterminant; 
} 

int main() 
{ 
    double resultVector[2]; 
    double coefficientMatrix[2][2]; 

    cout << "Enter equations of lines, which are of the form ax+by=c" << endl; 

    cout << "a = "; cin >> coefficientMatrix[1][1]; 
    cout << "b = "; cin >> coefficientMatrix[1][2]; 
    cout << "c = "; cin >> resultVector[1]; 

    cout << "a = "; cin >> coefficientMatrix[2][1]; 
    cout << "b = "; cin >> coefficientMatrix[2][2]; 
    cout << "c = "; cin >> resultVector[2]; cout << endl << endl; 

    double inverseCoefficientMatrix[2][2]; 
    invertMatrix(coefficientMatrix, inverseCoefficientMatrix); 

    double x = inverseCoefficientMatrix[1][1] * resultVector[1] + inverseCoefficientMatrix[1][2] * resultVector[2]; 
    double y = inverseCoefficientMatrix[2][1] * resultVector[1] + inverseCoefficientMatrix[2][1] * resultVector[2]; 

    cout << "The lines intersect at the point (" << x << ", " << y << ")" << endl; 
    return 0; 
} 

간단한 예제를 시도 할 경우, 예를 들어, X + 2Y = 3 배 + 2Y, X = -1와 y = 2 그것을 반환 -0.5있는 값을 반환해야 = 1, 및 0.1875. 각 단계에서 모든 값을 출력하기 위해 코드에 행을 삽입했습니다. 그리고 determinant 함수가 resultVector의 값을 변경한다는 결론에 도달했습니다. 그러나 왜 어떤 도움이 될지 모르겠습니다. 대단히 감사하겠습니다.

+7

(C/C++ 배열 색인은 0이 아닌 1부터 시작한다.) 그래서'double [2]'는'a [0]'이고'a [1] '___ **에는 [2] **가 없습니다. –

+3

"* 각 단계의 모든 값을 출력하기 위해 코드에 행을 삽입했습니다 *"- 디버거를 사용하는 방법을 배우는 것이 좋습니다. 그러면 많은 노력을 줄일 수 있습니다. – JBentley

답변

1

배열은 C++로 0부터 : C에서

double determinant(double parameterMatrix[2][2]) 
{ 
    return parameterMatrix[0][0] * parameterMatrix[1][1] - parameterMatrix[0][1] * parameterMatrix[1][0]; 
} 
etc... 
4

은/C++ 배열 인덱스 그래서 double a[2]a[0]a[1]하지 1에서 0부터 시작한다. a[2]은 없습니다. (잘있다.하지만 너의 것이 아니다.)

관련 문제