gpt4 book ai didi

matlab - 为什么matlab的mldivide比dgels好这么多?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:05 24 4
gpt4 key购买 nike

求解 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< 中的残差M。我用我的代码确认了这一点。

错误在于将 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.

关于matlab - 为什么matlab的mldivide比dgels好这么多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171528/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com