c++ - 在 C++ 中求解正规方程组

标签 c++ boost linear-regression eigen lapack++

我想求解线性方程组:

 Ax = b

A 是一个n x m 矩阵(不是正方形),b 和x 都是n x 1 vector 。其中A和b已知,n为50-100量级,m约为2(换句话说,A可以最大[100x2])。

我知道x的解:$x =\inv(A^T A) A^T b$

我找到了几种解决方法:uBLAS (Boost)、Lapack、Eigen 等,但我不知道使用这些包的“x”的 CPU 计算时间有多快。我也不知道这在数字上是否是解决“x”的快速原因

对我来说重要的是 CPU 计算时间尽可能短,并且因为我是新手所以文档很好。

在求解正规方程 Ax = b 后,我想使用回归改进我的近似值,也许稍后应用卡尔曼滤波器。

我的问题是哪个 C++ 库更强大、更快速地满足我上面描述的需求?

最佳答案

这是一个最小二乘解,因为你有比方程更多的未知数。如果 m 确实等于 2,这告诉我一个简单的线性最小二乘法就足够了。公式可以写成封闭形式。你不需要图书馆。

如果 m 是个位数,我仍然会说您可以使用 A(transpose)*A*X = A(transpose)*b 轻松解决此问题。求解系数的简单 LU 分解就足够了。这应该是一个比您想象的要简单得多的问题。

关于c++ - 在 C++ 中求解正规方程组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4584898/

相关文章:

c++ - 合并共享一个共同元素的对

c++ - 针对特定后端的 Boost.Locale 测试

R:理解 MCMCglmm 的输出

python线性回归实现

r - 在函数调用中用变量替换字符串参数

c# - 如何在 C# 中使用 Private Inheritance aka C++ 以及为什么它不存在于 C# 中

从派生类到基类的C++成员初始化

c++ - 无法禁用由 Boost 库引起的警告

c++ - 我可以从同一个文件夹为 mingw 和 windows 构建 boost 吗?

java - 以指针为参数的 C++ 函数并使用 swig 接口(interface)处理它