为什么MatLab&的mlDivide比dgels好得多? [英] Why is matlab's mldivide so much better than dgels?

查看:0
本文介绍了为什么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+1M中的残差。我用我的代码确认了这一点。

错误在于将b[N+1]残差与原始输入b[1]对齐,并在此基础上做出进一步的算法决定。残差与原始输入的正确对齐是b[1]b[1]。第一个N残差不可用;您必须在以后计算这些残差。

医生并没有说它们本身就是残留物,而是明确地说

每列中解的剩余平方和由该列中n+1m元素的模数平方和得出。

这篇关于为什么MatLab&的mlDivide比dgels好得多?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆