为什么在Matlab中,orth函数比qr函数慢得多?

3

我正在用Matlab对大矩阵进行正交化处理,但我发现函数orth比qr慢得多,例如:

>> a = randn(200000, 80);
tic; orth(a); toc;
Elapsed time is 2.472516 seconds.
>> tic; qr(a); toc;
Elapsed time is 0.610215 seconds. 

什么原因导致了如此大的差异?

2
从文档中了解到,orth 可能使用 SVD,而 qr 则使用 Gram-Schmidt(或其他立方算法),但我不太自信将其发布为答案。 - David Eisenstat
@DavidEisenstat orth 函数确实使用了 SVD,这可以从其代码中看出。qr 是一个内置函数,所以你的猜测还有待确认。 - Luis Mendo
@DavidEisenstat,因为舍入误差,我将失去qr的一些正交性吗? - Moonwalker
我不会期望输出质量有显著的差异,除非一个向量接近于其他向量的张成空间。 - David Eisenstat
1个回答

1

看起来 qr 确实是更快的方法。

从逻辑上讲,这意味着它必须有一个缺点,否则 Matlab 不会继续使用这种较慢的方法。

你主要想注意的两件事:

  • 内存要求
  • 准确性

虽然可能还有其他原因导致现在实现 orth 的方式,但我猜其中之一就是这些。


附言:您可能还想查看这个简单的Gram Schmidt解决方案以供比较。


保持 orth 不变的另一个原因是,这样任何使用它的旧代码仍然能够产生完全相同的结果 - horchler
@horchler 这确实是一个考虑因素,但可能还不够。如果仅为了向后兼容而保留它,人们可能会期望在文档中有一些提示或某种标志(“快速”,“遗留”)。-- 我意识到整个答案都是猜测,但这仍然是我最好的猜测。 - Dennis Jaheruddin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接