Matlab (R2009b) 是否忽略了 "mldivide" 中的转置运算符?



我正试图用Matlab的"mldivide"(反斜杠运算符)以以下形式解决方程A'*x = B的线性系统:

x_transp = A'b; 

A是一个平方稀疏矩阵,这就是我所知道的。问题是转置根本没有作用,所以前一行代码的结果与

相同:
x = Ab;

所以,x = x_transp。但是,如果我使用这样的新变量:

A_transp = A';
x_transpOK1 = A_transpb;

或者直接使用:

x_transpOK2 = transp(A)b;

则结果不同(x_transpOK1 = x_transpOK2≠x = x_trans)。这种行为发生在Matlab版本7.9.0 (R2009b)中,但在7.12 (R2011a)中不会发生。

然而,这不会发生在我尝试过的愚蠢的例子中(然后行为是正确的)。导致这种行为的矩阵有:
 A =[0.01   -0.495  0   0   0   0   0   0   0   0
        0        1  0   0   0   0   0   0   0   0
        0        0  1   0   0   0   0   0   0   0
        0        0  0   1   0   0   0   0   0   0
        0   -0.495  0   0   1   0   0   0   0   0
        0        0  0   0   0   1   0   0   0   0
        0        0  0   0   0   0   1   0   0   0
        0        0  0   0   0   0   0   1   0   0
        0        0  0   0   0   0   0   0   1   0
        0        0  0   0   0   0   0   0   0   1];
 b =   [8
        4
        0
        0
        0
        0
        0
        0
        0
        0];

是某种精度问题吗?我犯了什么我看不见的基本错误吗?

Mathworks的人回答说:这是解释器中的一个错误,在下一个版本中已经修复了。7.9.0没有修复,他们推荐以下解决方案:

A_transp = A';
x = A_transpb;

我想这是一个很好的例子,典型的建议,总是最新的…

我在Matlab Answers上的原始帖子

bug报告

经过讨论,我的答案如下:

@ mario_exech .bat,在我看来,你可能想把这个带到Matlab答案(mathworks.com/matlabcentral/answers),因为也许有人知道实际的代码(即Matlab员工)可能能够更具体地帮助你。这是一个有趣的问题,但似乎还有更多的事情需要更多的实际代码和决策树的知识。

当你收到回信时,请务必在这里留言。我很好奇他们怎么说!

最新更新