高斯消除不会消除正确的项
Gaussian elimination does not eliminate correct terms
本文关键字:高斯消 更新时间:2023-10-16
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.12.1 7.4 9.6
1.6 1.51.1 0.7 5.0
3.8 8.0 9.6 5.4 8.8
4.6 8.2 8.40.4 8.0
2.62.9 0.1 9.6 7.7
我得到的输出是:
我执行行交换,因此矩阵现在如下所示:
4.6 8.2 8.40.4 8
3.8 8 9.6 5.4 8.8
1.4 2.12.1 7.4 9.6
2.62.9 0.1 9.6 7.7
1.6 1.51.1 0.7 5
我得到的输出是:
4.6 8.2 8.40.4 8
0 8 9.6 5.4 8.8
00 2.1 7.4 9.6
0 00 9.6 7.7
0 00 0 5
可以看出,该过程部分工作,消除了每行中的前导词。但是,它不会减去其余项。例如,原始矩阵中的矩阵[1][1],行交换= 8之后,高斯消除后的矩阵[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
。
铌。为了帮助调试,我添加了一个 printf 输出来准确查看正在发生的计算。与使用调试器相比,这是原始的,但它是腰带中的有用工具。
相关文章:
- 在C++上实现高斯赛德尔迭代方法
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 用于创建高斯随机数的 c++ 函数
- 将高斯模糊应用于灰度图像
- 高斯雅各比法
- 用高斯Seidel红色黑色求解1D泊松方程
- 如何改变高斯分布(提升)中的种子
- 并行化高斯模糊链
- 为什么在 C++ 中实现高斯勒让德算法没有产生结果
- 生成高斯噪声
- 部分透视/高斯消除 - 交换列而不是产生错误输出的行
- 高斯消去码
- 使用高斯消去法从文本文件中求逆矩阵.C++
- 矩阵的行列式通过高斯消去C++
- 一次执行后,嵌套for循环出现意外/未见的中断:高斯消去
- 执行高斯消去程序时结果错误
- 高斯消去线性方程
- 高斯消去法
- 奇异矩阵的高斯消去法