matlab - Matlab (R2009b) 是否忽略了 "mldivide"中的转置运算符?

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

这是某种精度问题吗?我是否犯了任何我看不到的基本错误?

最佳答案

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

A_transp = A';
x = A_transp\b;

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

My original post on Matlab Answers

The bug report

关于matlab - Matlab (R2009b) 是否忽略了 "mldivide"中的转置运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24244556/

相关文章:

java - dlmread 为大型文本文件返回单列

matlab - 每当列中缺少索引时,将一个矩阵插入另一个矩阵

c++ - 如何使用opencv有效地在RGB图像中做复杂的阈值?

matlab - 没有维度名称的可写表

Matlab 3D 剂量阵列可视化

matlab - 错误 : version `GLIBCXX_3.4.21' not found

matlab - 在matlab中有效地加载数据

matlab - 仅删除轴线而不影响刻度和刻度标签

生成随机二维多边形的算法

c++ - 如何使用 libviso2?