为什么matlab的mldivide比dgels好得多?

问题描述 投票:1回答:1

解决Ax = b。真正的双重。 A是M >> 2的Mx2。b是Mx1。我已经针对mldivide运行了大量数据,结果非常好。我用MKL LAPACKE_dgels编写了一个mex例程,但效果还差得远。结果会产生大量噪声,而基本信号几乎不存在。我首先对照MKL示例结果检查了例程。我搜索了mldivide文档(流程图)和SO问题。我所发现的是Matlab对超定矩形使用QR分解。

接下来我应该尝试什么?我使用了错误的LAPACK例程吗?请帮助指引我正确的方向。

更新:对于解向量上E-15浮点数之差,英特尔MKL LAPACKE_dgels对于真正的双重超定(矩形)问题具有与Matlab mldivide相同的结果。据我所知,这是使用的QR方法。

当心从这些凝胶返回的残留物。它们不等于b-Ax。他们中的许多人都接近这个值,而有些人则离它很远。

matlab linear-algebra lapack intel-mkl
1个回答
1
投票

问题不是解决方案x,而是从DGELS返回的残差。该例程的输出在输入数组指针上就地修改。 MKL doc表示输入数组b被前x行的输出矢量N覆盖,然后是N+1M中的残差。我用我的代码确认了。

错误是将b[N+1]残差与原始输入b[1]对齐,并对此做出进一步的算法决策。残差与原始输入的正确对齐方式是b[1]b[1]。前N个残差不可用;您必须随后进行计算。

文档并没有说它们本身就是残差,>

[每一列中解决方案的剩余平方和由该列中元素n+1m的模量的平方和给出。

© www.soinside.com 2019 - 2024. All rights reserved.