我的高斯消除功能正在产生垃圾值

时间:2018-10-31 19:58:48

标签: c++11

在尝试实现其他矩阵运算之前,我试图实现高斯消除,并且我想到了一个非常简单的想法(基本上将我在纸上使用矩阵进行的处理转换为代码),就是这样:

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

0 个答案:

没有答案