我的程序试图求解一个线性方程组。为了做到这一点,它组装了 matrixcoeff_matrix
和 vector value_vector
,并使用 Eigen 来解决它们,如下所示:
Eigen::VectorXd sol_vector = coeff_matrix
.colPivHouseholderQr().solve(value_vector);
问题是该系统既可能被过度确定,也可能被低估。在前一种情况下,Eigen 要么给出正确的解,要么给出不正确的解,我使用coeff_matrix * sol_vector - value_vector
.
但是,请考虑以下方程组:
a + b - c = 0
c - d = 0
c = 11
- c + d = 0
在这种特殊情况下,Eigen 正确地求解了后面的三个方程,但也给出了a
和的解b
。
我想要实现的是,只有只有一个解的方程才能被求解,其余的方程(这里的第一个方程)将保留在系统中。
换句话说,我正在寻找一种方法来找出当时可以在给定的方程组中求解哪些方程,哪些不能,因为会有多个解。
你能提出任何实现这一目标的好方法吗?
编辑:请注意,在大多数情况下,矩阵不会是正方形的。我在这里又添加了一行,只是为了注意也可能发生过度决定。