1

Matlab 中有一个[Q,R] = qr(A,0)函数,根据文档,它返回 A 的 qr 分解的“经济”版本。norm(A-Q*R)为我的数据集返回 ~1e-12。理论上也Q'*Q应该返回 I。在实践中,对角线上方和下方有小的非零元素(大约 1e-6 左右),以及略大于 1 的对角线元素(再次,大约 1e-6 )。是否有人知道qr(.,0)通过指定 epsilon 或通过迭代次数来控制结果 Q 的精度或质量(正交性)的方法?数据集的大小使 qr(A) 内存不足,所以我必须使用 qr(A,0)。

4

1 回答 1

2

当我尝试非经济设置时,我实际上得到了 AQ*R 的可比较结果。即使对于包含少量数字的微小矩阵,如下所示:

A = magic(20);
[Q, R] = qr(A); %Result does not change when using qr(A,0)
norm(A-Q*R)

因此,我不相信“经济”是@horchler 在评论中确认的问题,但您刚刚遇到了使用“双”类型数据进行精确计算的限制。

即使您以某种方式更改精度,您也将始终处理一个近似值,因此这里首先要考虑的是您是否真的需要比您已经拥有的更高的精度。如果您需要更高的准确性,可能总会有一种方法,但我怀疑它是否会是一个简单的方法。

于 2014-12-10T16:07:06.567 回答