在尝试实现其他矩阵运算之前,我试图实现高斯消除,并且我想到了一个非常简单的想法(基本上将我在纸上使用矩阵进行的处理转换为代码),就是这样:
Matrix resultVector(this->mRow, 1), matA(this->mRow, this->mColumn);
matA = *this;
for(int i=0; i < this->mRow; i++)
}
double pivotElement = matA.mMatrix[i][i];
for(int j=i+1; j < this->mRow; j++)
{
double coeff = pivotElement/(double)matA.mMatrix[j][i];
for(int k=i; k < this->mRow; k++)
{
matA.mMatrix[j][k] *= coeff;
matA.mMatrix[j][k] -= matA.mMatrix[i][k];
}
}
}
Matrix是具有三个私有变量的类。 mRow , mColumn 和 mMatrix 。
默认情况下,mMatrix初始化为参数化构造函数,并将其初始化为动态分配的2D数组。
所有这些都是为了解决 square 矩阵,这就是为什么我选择将mRow与mColumn不断地互换使用。
想法是:
1)选择枢轴元素。
2)从 i + 1 垂直移动到 mRow-1 (从枢轴行下面的第一行到最后一行)
3)评估 mMatrix [j] [i] 元素等于* mMatrix [i] [i]
所需的系数4)开始从 i 水平移动到 mRow
5)从第[j] [k]个元素开始,将其乘以系数,然后减去。
注意:此程序尚未考虑b向量,因此不会打印出resultVector。我的问题特别是该程序无法正确生成上三角矩阵。
样本输入/输出:
1 2 3 == 1 2 3
2 -3 2 == 0 -3.5 -2
3 1 -1 == 2.98023e-008 -2.17557e-007 -5
正确的输入/输出:
1 2 3 == 1 2 3
2 -3 2 == 0 1 2
3 1 -1 == 0 0 10