解决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。他们中的许多人都接近这个值,而有些人则离它很远。
问题不是解决方案x
,而是从DGELS
返回的残差。该例程的输出在输入数组指针上就地修改。 MKL doc表示输入数组b
被前x
行的输出矢量N
覆盖,然后是N+1
至M
中的残差。我用我的代码确认了。
错误是将b[N+1]
残差与原始输入b[1]
对齐,并对此做出进一步的算法决策。残差与原始输入的正确对齐方式是b[1]
至b[1]
。前N
个残差不可用;您必须随后进行计算。
文档并没有说它们本身就是残差,>
[每一列中解决方案的剩余平方和由该列中元素
n+1
至m
的模量的平方和给出。