为什么MatLab&;的mlDivide比dgels好得多? [英] Why is matlab's mldivide so much better than dgels?
本文介绍了为什么MatLab&;的mlDivide比dgels好得多?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
求解Ax = b
。真正的双倍。A
是带有M>2的超定Mx2。b
是Mx1。我对mldivide
运行了大量数据,结果非常好。我用MKLLAPACKE_dgels
编写了一个Mex例程,但它远没有那么好。结果有大量的噪音,潜在的信号几乎不在那里。我首先对照MKL示例结果检查了例程。我已经搜索了mldivide
文档(流程图)和SO问题。我所发现的就是MatLab对超定矩形使用QR分解。
接下来我应该尝试什么?我是否使用了错误的LAPACK例程?请帮我指引正确的方向。
更新: 对于实数双重超定(矩形)问题,英特尔MKL LAPACKE_DGELS在解向量上的E-15浮点差范围内,具有与MatLab mlDivide相同的结果。据我所知,这是使用的二维码方法。
当心从这个小工具返回的残差。它们并不等同于b-Ax。其中许多接近该值,但也有一些远离该值。推荐答案
问题不是解决方案x
,而是DGELS
返回的残差。此例程的输出在输入数组指针上进行就地修改。MKL doc表示输入数组b
被前N
行的输出向量x
覆盖,然后是N+1
到M
中的残差。我用我的代码确认了这一点。
b[N+1]
残差与原始输入b[1]
对齐,并在此基础上做出进一步的算法决定。残差与原始输入的正确对齐是b[1]
到b[1]
。第一个N
残差不可用;您必须在以后计算这些残差。
医生并没有说它们本身就是残留物,而是明确地说
每列中解的剩余平方和由该列中
n+1
到m
元素的模数平方和得出。
这篇关于为什么MatLab&;的mlDivide比dgels好得多?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文