1

我正在使用 matlab 来计算以下问题:

A,是B两个正交矩阵,其中是单位矩阵。并且比 大得多。我正在计算,这也是一个正交矩阵。mnA'*A = IB'*B = IImnC = (2B*B'-I)*A

但是在matlab中,数字的精度会导致以下问题:

max(max(abs(A'*A-I))) = e0 > 0
max(max(abs(B'*B-I))) = e0 > 0

并且计算的Cmax(max(abs(C'*C-I))) = e1 > e0

如果我通过计算重复上述过程D = (2C*C'-I)*B,这个错误界限会上升D,随着越来越多的这种迭代,这个错误就会爆炸。

有没有办法在不增加这个误差范围的情况下进行计算?

谢谢!

4

1 回答 1

0

作为一般规则,您执行的计算和转换越多,您就越需要开始担心浮点错误。

为了减轻影响,有两种可能性:

1) 使用像 Maple 或 Mathematica 这样支持精确算术的软件,这将主要以更大的计算负担为代价来消除问题。我的理解是Matlab不支持精确的算术(但我可能错了......)

2) 使用比 Double 更高的精度来减轻浮点错误。例如,FEX 提交的Multiple Precision Toolbox for MATLAB声称支持任意大精度格式。不过,我自己从未使用过它,所以我无法评论它的效果如何。

3) 根据矩阵中数字的相对大小,您可能可以利用一些数值技巧或转换来减少浮点错误。这是一个很大的话题,但总的来说,这个想法是尝试扩展您的问题,以使数字在数量级上尽可能接近。

可能还有其他一些我不知道的可能性。我当然不是这方面的专家。我很想看看其他受访者的建议。

哦,另一件事,我偶然发现了一个密切相关的 SO question

于 2013-01-16T01:23:41.687 回答