为什么matlab的mldivide比dgels好这么多?
Why is matlab's mldivide so much better than dgels?
解决Ax = b
。真正的双重。 A
是超定 Mx2,M >> 2。b
是 Mx1。我有 运行 大量针对 mldivide
的数据,结果非常好。我用 MKL LAPACKE_dgels
写了一个 mex 例程,它远没有那么好。结果有大量噪音,基本信号几乎不存在。我首先根据 MKL 示例结果检查了例程。我搜索了 mldivide
文档(流程图)和 SO 问题。我发现的只是 Matlab 对超定矩形使用 QR 因式分解。
接下来我应该尝试什么?我使用了错误的 LAPACK 例程吗?请帮助指导我正确的方向。
更新:
对于解向量上的 E-15 浮点差,Intel MKL LAPACKE_dgels 与 Matlab mldivide 对于真正的双重超定(矩形)问题具有相同的结果。据我所知,这是使用的QR方法。
注意从这个 dgels 返回的残差。它们不等于 b - Ax。他们中的许多人接近这个值,而有些则远离它。
问题不是解决方案 x
,而是 DGELS
返回的残差。此例程的输出是在输入数组指针上就地修改的。 MKL doc 表示输入数组 b
被前 N
行的输出向量 x
覆盖,然后是 N+1
到 [=16= 中的残差].我用我的代码确认了这一点。
错误在于将 b[N+1]
残差与原始输入 b[1]
对齐,并据此做出进一步的算法决策。残差与原始输入的正确对齐方式是 b[1]
到 b[1]
。前 N
个残差不可用;你必须在之后计算这些。
文档并没有说它们本身就是残差,而是具体地说
the residual sum of squares for the solution in each column is given by the sum of squares of modulus of elements n+1
to m
in that column.
解决Ax = b
。真正的双重。 A
是超定 Mx2,M >> 2。b
是 Mx1。我有 运行 大量针对 mldivide
的数据,结果非常好。我用 MKL LAPACKE_dgels
写了一个 mex 例程,它远没有那么好。结果有大量噪音,基本信号几乎不存在。我首先根据 MKL 示例结果检查了例程。我搜索了 mldivide
文档(流程图)和 SO 问题。我发现的只是 Matlab 对超定矩形使用 QR 因式分解。
接下来我应该尝试什么?我使用了错误的 LAPACK 例程吗?请帮助指导我正确的方向。
更新: 对于解向量上的 E-15 浮点差,Intel MKL LAPACKE_dgels 与 Matlab mldivide 对于真正的双重超定(矩形)问题具有相同的结果。据我所知,这是使用的QR方法。
注意从这个 dgels 返回的残差。它们不等于 b - Ax。他们中的许多人接近这个值,而有些则远离它。
问题不是解决方案 x
,而是 DGELS
返回的残差。此例程的输出是在输入数组指针上就地修改的。 MKL doc 表示输入数组 b
被前 N
行的输出向量 x
覆盖,然后是 N+1
到 [=16= 中的残差].我用我的代码确认了这一点。
错误在于将 b[N+1]
残差与原始输入 b[1]
对齐,并据此做出进一步的算法决策。残差与原始输入的正确对齐方式是 b[1]
到 b[1]
。前 N
个残差不可用;你必须在之后计算这些。
文档并没有说它们本身就是残差,而是具体地说
the residual sum of squares for the solution in each column is given by the sum of squares of modulus of elements
n+1
tom
in that column.