1

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

#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 的值,但我不知道为什么,所以任何帮助都会不胜感激。

4

2 回答 2

4

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

于 2013-04-08T20:40:48.637 回答
1

数组在 C++ 中从零开始:

double determinant(double parameterMatrix[2][2])
{
    return parameterMatrix[0][0] * parameterMatrix[1][1] - parameterMatrix[0][1] * parameterMatrix[1][0];
}
etc...
于 2013-04-08T20:40:25.577 回答