程序返回错误的值(C ++)

时间:2013-04-08 20:34:59

标签: c++ arrays

我写了一个简单的代码来解决二维数组,代码的目的是使用矩阵方法求解两个线性联立方程(在方阵中表示系数,计算逆,乘以逆通过每个方程的输出来找到两个变量的结果)。代码编译时没有警告,因此,我不知道问题可能是什么。

#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和3x + 2y = 1,它应该返回x = -1和y = 2,它返回的值是-0.5和0.1875。我一直在代码中插入行来打印每个阶段的所有值的值,我得出结论,行列式函数正在改变resultVector的值,但我不明白为什么,所以任何帮助都会非常感谢。

2 个答案:

答案 0 :(得分:4)

在C / C ++中,数组索引从0开始,而不是从1开始。因此double a[2]a[0]a[1]没有a[2]有,但不是你的

答案 1 :(得分:1)

在C ++中,数组是从零开始的:

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