我正在尝试使用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];
这是某种精确问题吗?我是否发现了一些我看不到的根本错误?
答案 0 :(得分:2)
Mathworks的人回答说:这是解释器中的一个错误,已在下一个版本中修复。没有针对7.9.0的修复,他们建议采用以下解决方法:
A_transp = A';
x = A_transp\b;
我想这是典型建议的一个很好的例子,以便始终保持最新...
答案 1 :(得分:0)
在所有讨论之后,这是我的答案:
@ Mario_Exec.bat,在我看来你可能想把它带到Matlab Answers(mathworks.com/matlabcentral/answers),因为也许有实际代码知识的人(即Matlab员工)也许能够更具体地帮助你。这是一个有趣的问题,但似乎还有更多可能需要更多实际代码和决策树的知识。
请在收到回复时回复此处。我好奇他们说的话!