我的程序试图解决一个线性方程组。为了做到这一点,它组装矩阵coeff_matrix
和矢量value_vector
,并采用本征来解决这些问题,如:从一个欠定系统中删除无法解方程
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
在这种特殊情况下,本征正确地解决了三个后一个方程组,但也给出了a
和b
解决方案。
我想什么来实现的是,仅只有一个解决办法方程将得到解决,其余的人(这里的第一个公式)将在系统中保留。
换句话说,我在寻找,找出一个方法,公式可以在公式中给定系统的及时解决,而不能因为会有不止一个解决方案。
你可以建议实现这一什么好办法?
编辑:请注意,在大多数情况下,矩阵将不是正方形。我在这里增加了一行,只是为了说明过度测定也可能发生。
你能指点我一些页面或文件,这将帮助我了解如何使用它?维基百科讲了很多数学... – 2012-07-10 15:51:05
实际上,它需要一个相当的数学来学习SVD,这是线性代数的高潮。我只是搜索了一些介绍,看[这里](http://stat.asu.edu/~eric/msri/matlab2.pdf)和[here](http://www.math.pitt.edu/~sussmanm /2071Spring08/lab09/index.html)。 HTH。 – chaohuang 2012-07-10 16:01:25
谢谢。我稍微移动了一些空格并组装了一些我作为解决方案粘贴的东西(因为注释对于实际代码来说并不好)。不知道我是否发明了真正的东西,或者只是一个随机模式。 – 2012-07-10 17:50:38