【发布时间】:2014-06-16 13:10:56
【问题描述】:
我正在尝试使用 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];
这是某种精度问题吗?我是否犯了任何我看不到的基本错误?
【问题讨论】:
-
就
try x = (A')\B -
R2010a 中也不会发生。
-
@AlexandreBizeau 不幸的是,它仍然以这种方式忽略转置运算符。也使用括号并将转置放在括号或括号之外。
-
您提供的示例不会发生在我身上(R2010b)
-
嗯。
A'\b、(A')\b、pinv(A)*b提供相同的结果。transpose(A)\b、mldivide(A',b)、mldivide(transpose(A),b)提供相同的结果(并且与第一组不同)。我尝试了一个新的随机 A 矩阵,一切都如预期的那样。它必须与您的 A 矩阵有关。 (2009b)
标签: matlab