我正试图用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员工)可能能够更具体地帮助你。这是一个有趣的问题,但似乎还有更多的事情需要更多的实际代码和决策树的知识。
当你收到回信时,请务必在这里留言。我很好奇他们怎么说!