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

时间:2014-06-16 13:10:57

标签: matlab

我正在尝试使用Matlab的“mldivide”(反斜杠运算符)解决方程A'* x = B的线性系统:

x_transp = A'\b; 

A是一个方形稀疏矩阵,这就是我所知道的。 问题是转置完全没有效果,因此前一行代码的结果与以下内容相同:

x = A\b;

所以,x = x_transp。但是,如果我使用一个新变量:

A_transp = A';
x_transpOK1 = A_transp\b;

或只是使用:

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];

这是某种精确问题吗?我是否发现了一些我看不到的根本错误?

2 个答案:

答案 0 :(得分:2)

Mathworks的人回答说:这是解释器中的一个错误,已在下一个版本中修复。没有针对7.9.0的修复,他们建议采用以下解决方法:

A_transp = A';
x = A_transp\b;

我想这是典型建议的一个很好的例子,以便始终保持最新...

My original post on Matlab Answers

The bug report

答案 1 :(得分:0)

在所有讨论之后,这是我的答案:

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

请在收到回复时回复此处。我好奇他们说的话!