我写了一个简单的代码来解决二维数组,代码的目的是使用矩阵方法求解两个线性联立方程(在方阵中表示系数,计算逆,乘以逆通过每个方程的输出来找到两个变量的结果)。代码编译时没有警告,因此,我不知道问题可能是什么。
#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的值,但我不明白为什么,所以任何帮助都会非常感谢。
答案 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...