用无限解解线性方程组的最佳方法是什么?

时间:2019-01-28 12:37:09

标签: c++ equation-solving

我想求解一个线性方程组(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。我可以重复行以摆脱系数为空的行。

1 个答案:

答案 0 :(得分:3)

如果x1x2是两个解,则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