Matlab中有一个[Q,R] = qr(A,0)
函数,根据文档记载,该函数返回一个"经济" A. norm(A-Q*R)
的qr分解版本为我的数据集返回~1e-12。同样Q'*Q
理论上应该返回I.实际上,在对角线上方和下方(大约1e-6左右)有小的非零元素,以及略大于1的对角线元素(同样, 1e-6左右)。是否有人知道通过指定epsilon或通过迭代次数来控制结果Q的qr(.,0)
或质量(正交性)精度的方法?数据集的大小使得qr(A)内存不足,所以我必须使用qr(A,0)。
答案 0 :(得分:2)
当我尝试非经济环境时,我实际上获得了A-Q * R的可比结果。即使对于包含小数字的微小矩阵,如下所示:
A = magic(20);
[Q, R] = qr(A); %Result does not change when using qr(A,0)
norm(A-Q*R)
因此我不相信'经济'是@ strongchler在评论中确认的问题,但是您刚刚遇到了如何使用'double'类型的数据。
即使你以某种方式改变了准确性,你也总会处理一个近似值,所以这里首先要考虑的是你是否真的需要比现有的更高的准确度。如果你需要更多的准确性,可能总会有办法,但我怀疑它是否会是一个简单的方法。