gpt4 book ai didi

c++ - 在 Eigen (C++) 中求解欠定方程组

转载 作者:行者123 更新时间:2023-11-30 04:17:13 31 4
gpt4 key购买 nike

在我的例子中,我想使用 Eigen (3.0.12) 中的 JacobiSVD 求解器求解欠定方程组 A*λ = b。

在我的 C++ 程序中,线性方程组具有以下结构:

系数矩阵(A):

       0.6           5.68434e-20      -0.2
5.68434e-20 7.06819e-39 -4.26326e-20
-0.2 -4.26326e-20 0.4

右手(b):

       -1.962
2.78817e-19
-5.886

lambda :

       -9.81
3.94467e+19 <---------- error (Where does this come from?)
-19.62
  • 矩阵 A 的秩为 - Rank(A) = 2
  • 所以矩阵没有满秩。因此,A 是单数且不可逆的。
  • 条件是 - cond(A) = Inf
  • 为了求解 A*λ = b,我使用了 Eigen (JacobiSVD) 中的SVD分解方法

我还用 MATLAB 验证了这一点: http://www.pictureupload.us/image-172220092351c5ae0c1706e.htm

开始时,第一个模拟步骤近似正确。但是有一个很小的数值误差,在求解A*λ = b的过程中误差越来越大。

然后系统崩溃,我的结果不再正确,结果是 NaN。

这里是代码:

/******** SVD ********/
JacobiSVD<TMatrixX> svd(A, ComputeThinU | ComputeThinV);
lambda = svd.solve(b);

我做错了什么?

最佳答案

JacobiSVD 考虑求解所有非零奇异值。我建议使用 ColPivHouseholderQR。

关于c++ - 在 Eigen (C++) 中求解欠定方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17249687/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com