我想求解一个线性方程组(SLE,Ax = b,其中A由8行和8列组成),但是该系统将始终具有无限解。当涉及到线性方程组的求解时,许多人会提到Eigen。 但是,结果是,如果变量之间存在某种“依赖关系”,那就太好了,因此我只需要设置自由变量的值并获得结果即可。例如:
x1 = 5.234*x2 + 2.3232x3
x2 = 3.234 + 1.3*x3
x3 = free.
我查看了Eigen文档,但他们没有提到具有众多解决方案的SLE。 Eigen能够进行这种计算还是有更好的方法 库?
致谢
编辑:
系统看起来像
0.4*f1+0.0*f2+0.6*f3+0.0*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
0.0*f1+0.4*f2+0.0*f3+0.6*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.3*f5+0.0*f6+0.7*f7+0.0*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.0*f5+0.0*f6+0.5*f7+0.5*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
0.0*f1+0.0*f2+0.0*f3+0.0*f4+0.0*f5+0.0*f6+0.0*f7+0.0*f8= fx
系数只有零的行数可能会发生变化,并且fx是任意值。不能使用平凡的解f1 = f2 = f3 = f4 = f5 = f6 = F7 = f8 = fx = 0。我可以重复行以摆脱系数为空的行。
答案 0 :(得分:3)
如果x1
和x2
是两个解,则A(x1 - x2) = 0
,即向量x1 -x2
拥有A
的空空间(内核{ {1}})。
因此,如果Ker A
是一个特定的解决方案,并且如果x0
构成v[i]
的基础,则所有解决方案的集合由以下方式提供:
Ker A
在Eigen中,某些分解是等级揭示的,例如x = x0 + sum_i a[i] v[i], where a[i] are any real numbers
。
根据Eigen网站,您可以使用以下内容获取内核基础:
FullPivLU
Matrix3f A;
.......
FullPivL<Matrix3f> lu_decomp(A);
auto K = lu_decomp.kernel();
有一个求解器,您应该使用以下一种特殊解决方案:
FullPivLU