我正在尝试使用 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];
这是某种精度问题吗?我是否犯了任何我看不到的基本错误?
最佳答案
Mathworks 的人回答说:这是解释器中的一个错误,已在下一版本中修复。 7.9.0 没有修复,他们推荐以下解决方法:
A_transp = A';
x = A_transp\b;
我想这是始终保持最新的典型建议的一个很好的例子......
关于matlab - Matlab (R2009b) 是否忽略了 "mldivide"中的转置运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244556/