c++ - 高斯消去法不消去正确项

标签 c++ matrix gaussian

 for(count = 0; count < max; count ++)
 {
    for (row=(count+1); row < max; row++)
    {
        for(column = 0; column < max; column ++)
        {
            double t = matrix[row][count]/matrix[count][count];
            matrix[row][column] = (matrix[row][column] - (t*matrix[count][column]));
        }
    }
  }

这是我的高斯消去过程的代码,所有变量都是之前声明的。原始矩阵为:

1.4 2.1 2.1 7.4 9.6

1.6 1.5 1.1 0.7 5.0

3.8 8.0 9.6 5.4 8.8

4.6 8.2 8.4 0.4 8.0

2.6 2.9 0.1 9.6 7.7

我得到的输出是:

我执行行交换,所以矩阵现在看起来像:

4.6 8.2 8.4 0.4 8

3.8 8 9.6 5.4 8.8

1.4 2.1 2.1 7.4 9.6

2.6 2.9 0.1 9.6 7.7

1.6 1.5 1.1 0.7 5

我得到的输出是:

4.6 8.2 8.4 0.4 8

0 8 9.6 5.4 8.8

0 0 2.1 7.4 9.6

0 0 0 9.6 7.7

0 0 0 0 5

可以看出,该过程部分起作用,消除了每一行中的前导词。但是,它并没有减去剩余的项。例如原矩阵中的matrix[1][1],行swap = 8后matrix[1][1]高斯消元后仍为8。

我想知道是否有人知道我的问题是什么,因为我找不到它。

最佳答案

这一行:

double t = matrix[row][count]/matrix[count][count];

应该在行之前:

for(column = 0; column < max; column ++)

问题在于,在 column 循环的第一次迭代之后,您设置了 matrix[1][0] = 0;。但是对于列循环的第二次迭代,您使用 matrix[1][0]/matrix[0][0] 计算 t,但现在是 0 因为您刚刚将 matrix[1][0] 设置为 0

注意。为了帮助调试我 added a printf output看看到底发生了什么计算。与使用调试器相比,这是原始的,但它是一个有用的工具。

关于c++ - 高斯消去法不消去正确项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34301996/

相关文章:

c++ - 从 clang-format 样式中提取 emacs c 样式选项

c++ - 为什么 -1 >> 1 的计算结果为 -1?

c++ - 矩阵中的实心圆(二维数组)

c++ - 使用 XMMatrixLookAtLH - 试图面对一个点,但不起作用/崩溃?

r - 从二元高斯分布生成均值

c++ - 用指针向后重新排序数组

c++ - 如何有效地组装 FEM 稀疏矩阵

image - Matlab 中观察值和变量之间的差异

php - PHP 在 24 小时内的高斯分布

python - python中的代码 "df.dropna"删除了我的整个数据框,我的代码有什么问题?