Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 互补投影计算中的数值问题_Matlab - Fatal编程技术网

Matlab 互补投影计算中的数值问题

Matlab 互补投影计算中的数值问题,matlab,Matlab,我正在使用matlab计算以下问题: A、 B是两个m×n正交矩阵,A'*A=I和B'*B=I,其中I是单位矩阵。m比n大很多。我在计算C=2B*B'-I*A,这也是一个正交矩阵 但在matlab中,数字的精度会导致以下问题: max(max(abs(A'*A-I))) = e0 > 0 max(max(abs(B'*B-I))) = e0 > 0 并且计算出的C具有maxabsc'*C-I=e1>e0 如果我通过计算D=2C*C'-I*B来重复上述过程,那么D的误差界就会上升,随

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

A、 B是两个m×n正交矩阵,A'*A=I和B'*B=I,其中I是单位矩阵。m比n大很多。我在计算C=2B*B'-I*A,这也是一个正交矩阵

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

max(max(abs(A'*A-I))) = e0 > 0
max(max(abs(B'*B-I))) = e0 > 0
并且计算出的C具有maxabsc'*C-I=e1>e0

如果我通过计算D=2C*C'-I*B来重复上述过程,那么D的误差界就会上升,随着这种迭代次数的增加,这种误差会爆炸

有没有一种方法可以在不增加误差范围的情况下进行计算


谢谢

一般来说,执行的计算和转换越多,就越需要担心浮点错误

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

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

2使用高于双精度的精度来减少浮点错误。例如,FEX提交文件声称支持任意大的精度格式。不过我自己从来没有用过,所以我不能评论它的效果如何

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

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


哦,还有一件事,我刚刚偶然发现了一个非常重要的问题。

谢谢你分享你的想法。这很有帮助!