【问题标题】:is Matlab (R2009b) ignoring the transpose operator in "mldivide"?Matlab(R2009b)是否忽略“mldivide”中的转置运算符?
【发布时间】: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')\bpinv(A)*b 提供相同的结果。 transpose(A)\bmldivide(A',b)mldivide(transpose(A),b) 提供相同的结果(并且与第一组不同)。我尝试了一个新的随机 A 矩阵,一切都如预期的那样。它必须与您的 A 矩阵有关。 (2009b)

标签: matlab


【解决方案1】:

Mathworks 的人回答:这是解释器中的一个错误,已在下一个版本中修复。 7.9.0 没有修复程序,他们推荐以下解决方法:

A_transp = A';
x = A_transp\b;

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

My original post on Matlab Answers

The bug report

【讨论】:

    【解决方案2】:

    经过所有的讨论,这是我的答案:

    @Mario_Exec.bat,在我看来,您可能希望将其带到 Matlab 答案 (mathworks.com/matlabcentral/answers),因为了解实际代码的人(即 Matlab 员工)可能能够更具体地帮助您。这是一个有趣的问题,但似乎还有更多事情要做,可能需要更多关于实际代码和决策树的知识。

    当您收到回复时,请在此处回复。我很好奇他们说什么!

    【讨论】:

      猜你喜欢
      • 2016-02-07
      • 2023-03-16
      • 2013-11-11
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多