gpt4 book ai didi

C++:使用 lapack 求解欠定线性系统

转载 作者:行者123 更新时间:2023-11-28 01:41:33 27 4
gpt4 key购买 nike

简单来说:我有一个欠定的线性方程组

Ax = b

我想得到一个有效的解决方案,无论系统的无限解决方案中的哪一个。我想尽可能高效地获得它。

我已经检查了一般的 LAPACK 例程,它们似乎无法处理未确定的情况。例如,dgesv(),其文档可在here中找到如果来自 PLU 分解的因子 U 是奇异的,将在 INFO 中返回大于 1 的整数,如果是这种情况,它将求解系统。

我还检查了线性最小二乘问题 (LLS) (documentation here) 的一些例程,它们确实解决了我的问题,只是效率不如我希望的那样。如果我提供的 LLS 问题是欠定的,LLS 例程将返回最小化的 vector

||Ax-b||

这是一个有效的解决方案。但是,它被计算为优化问题的解决方案,我想知道是否有更有效的方法来为我的欠定问题获得有效解决方案。

有人提出了类似的问题here ,但我相信我的问题比这更具体:我正在使用 LAPACK,我想尽可能高效地求解欠定的线性方程组。

最佳答案

对于欠定方程组:

正确的做法是使用奇异值分解(SVD)。 Lapackdgesvd 的形式提供奇异值分解。

要执行 SVD,您必须将您的问题均质化以将其转化为以下形式的矩阵问题:My = 0。这很容易通过引入另一个自由度(另一个变量)来实现。这将转换 vector x -> y 和矩阵 A -> M。在矩阵 M 上执行 SVD 时,最小奇异 vector 将是欠定最小二乘问题的解。

我建议在浪费时间编写任何代码之前使用 ma​​tlaboctave 进行实验。

关于C++:使用 lapack 求解欠定线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46931851/

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