【问题标题】:Matlab, economy QR decomposition, control precision?Matlab,经济QR分解,控制精度?
【发布时间】:2014-12-11 00:31:31
【问题描述】:

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

【问题讨论】:

  • “我假设“经济”代表某种近似值。”无需假设。该文档准确地说明了它的作用。没有相对于“常规”qr 的近似值。它只是意味着只计算Q 的前n 列和R 的n 行。这些值应该相同。
  • @horchler,您的评论应该是(接受的)答案。
  • 非常相关,但实际上并没有回答问题。所以我相信(赞成的)评论是合适的地方。
  • @horcher,感谢您的更正,但(更新的)问题仍然存在 :)
  • @A.Donda,感谢您的指导,亲爱的先生 :)

标签: matlab decomposition orthogonal


【解决方案1】:

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

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

因此,我不认为“经济”是问题正如@horchler 在 cmets 中所证实的那样,但您刚刚遇到了如何准确计算的限制“双”类型的数据。

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

【讨论】:

  • 有趣的是,[Q,R,E] = qr(X) norm(X-Q*R*E') 要小几个数量级。不幸的是,其中一个要求是 X 的第一列必须保持在固定位置,因此我不能直接使用置换向量或矩阵。
  • [Q,R,E] 版本提高了我的数据集的精度,但不适用于 magic 矩阵。
  • + 1 用于提及 horchler ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 1970-01-01
相关资源
最近更新 更多