犰狳函数的不同最小二乘误差
Different least square errors with armadillo functions
Hello stackoverflow community,
我在理解 c++ 犰狳包中的最小二乘错误问题时遇到了麻烦。
我有一个矩阵 A,其行数比列多得多(例如 5000 到 100 行(,因此它被过度确定。 我想找到 x,以便 A*x=b 给我最小二乘误差。
如果我在我的数据上使用犰狳的求解函数,例如"x = Solve(A,b(","(A*x-b(^2"的误差有时会很高。 另一方面,如果我用"x = (A^T * A(^-1 *A^T * b"的解析形式求解x,则结果总是正确的。 在这两种情况下,x 的结果可能相差 10 个数量级。 我原以为如果系统过度确定,犰狳会在后台使用这种分析形式。 现在我想了解为什么这两种方法会产生如此不同的结果。
我想给出一个简短的示例程序,但我无法用简短的程序重现这种行为。 我想在这里给出矩阵,但 5000 乘以 100 它也非常大。如果需要,我可以提供发生这种情况的值。
所以作为一个简短的背景。 我从程序中得到的矩阵是非线性振荡器的数值求解反应,我通过摆动该系统的参数将信息放入其中。 因为这个参数对系统的影响很小,所以我不同行的值非常相似,但永远不会相同,否则犰狳应该会抛出错误。 我仍然认为这就是问题所在,但求解函数从未抛出任何错误。
另一件让我感到困惑的事情是,在一个带有随机矩阵的简短示例程序中,解析形式比求解函数慢。 但在我的程序中,两者都几乎相同。 我想这与伪逆的数值收敛性和我的矩阵的特殊情况有关,但为此我对犰狳的工作原理还不够了解。
我希望有人可以帮助我解决这个问题,并提前非常感谢。
感谢您的回复。我想我想出了问题,并希望为每个遇到同样问题的人提供一些反馈。
犰狳求解函数给了我最小化 (A*x-b(^2 的 x。 我查看了 x 的值,它们有时在 10^13 的幅度。 这是因为我的矩阵的行只是略有变化。(所以几乎线性依赖但不完全(。 正因为如此,我的双打数值精度很高,因此我的错误有时会跳来跳去。
如果我使用重新排列的分析公式 (A^T * A(*x = *A^T * b 和求解函数,这个问题不再发生,因为 x 的拟合值在 10^4 的幅度。最小二乘误差略高,但这没关系,因为我想避免过度拟合。
我现在通过求解 (A^T * A + lambda*Identity_Matrix(*x = *A^T * b 与犰狳的求解函数额外添加了 Tikhonov 正则化。 现在,权重向量约为 1,与没有正则化的公式相比,误差几乎没有变化。
- 为什么在浮点中从大到小会引入更多的误差
- 在二维数组中查找最小值和最大值?
- 运行无限循环的最小二叉树问题
- 将误差线添加到 VTK 二维散点图
- 最小二乘多项式拟合仅适用于偶数个坐标
- 犰狳函数的不同最小二乘误差
- 谷神星求解器:对非线性最小二乘法使用平滑近似
- 在泰勒展开中获取 inf 对于 e^x,但仅适用于小误差边界
- C 最小功能误差(C2665)
- 无法使用 glm::vec2 作为矩阵的标量类型并使用线性最小二乘法求解
- 线性代数方程 Ax 的最小二乘解 = 由 在本征C++中
- 以线性最小二乘方式求解系统 Ax=b,具有复元素和下三角形平方 A 矩阵
- 线性方程组,带约束的最小二乘法
- 用最小二乘法拟合圆
- 图像曲线拟合的多项式最小二乘法
- 偏最小二乘库
- GSL 非线性最小二乘拟合不会收敛
- 卡尔曼,最小二乘法,或
- 迭代非线性最小二乘优化3d到2d投影
- 用c++特征库求解线性最小二乘方程(动态分配)