MATLAB中的反斜杠运算符用于向量

时间:2013-03-14 10:45:26

标签: matlab backslash least-squares

在MATLAB中,我们输入

A = [0.1195952380, 0.2552619050, 0.3235000000,...
     0.1289285710, 0.6675476190, -0.0770000000,...
     0.1973809520];

and

b0 = 1.7250238100;

如果我使用反斜杠运算符A \ b0,则结果为

[0         0         0         0    2.5841         0         0]

如果我使用

pinv(A)*b0

我们得到答案:

0.2985    0.6370    0.8073    0.3217    1.6659   -0.1922    0.4926

但很多文档都谈到反斜杠运算符,说这两个操作都应该得到相同的答案。在这种情况下,为什么不是这样呢?

在这方面有人可以帮助我吗?

谢谢,

巴布。

4 个答案:

答案 0 :(得分:2)

您的系统非常不确定。

A\b0找到了方程式的一个解决方案。

pinv(A)*b0 simly找到另一种解决方案。

两者都是正确的,但显然由于使用了不同的算法,他们找到了不同的解决方案。

您可以通过查看

来检查它们是否相同
A*(A\b0) - A*(pinv(A)*b0)

实际上为零

答案 1 :(得分:2)

说到反斜杠,我总是感到困惑。我的补救措施是:明确明确您要解决的方程式系统(至少在最小二乘方意义上),然后尝试将其与文档匹配。

在您的示例中,您要解决的系统是

A * x = b0

对于这个系统,您有7个未知且只有一个等式(b0是标量)。 因此,Dennis所指出的系统是不确定的,并且可以合理地预期几种不同的(但是相当的)解决方案。

答案 2 :(得分:2)

正如其他人所说,这个系统是不确定的(正如丹尼斯所说的那样)。由于你有一些后续问题,让我进一步深入。

在A中有一行,你基本上有一个等式,有7个未知数。你基本上可以将任何6个未知数设置为零,然后求解为7。这就是反斜杠的作用。它将挑选未知数,使得结果具有来自任何噪声的最小贡献,因此这里是A矩阵中具有最大绝对系数的未知数。这就是为什么第五个未知数在结果中不为零。

事实上,该解决方案将存在于一个6维集合中。我们可以自由地添加从A的空行空间到该解决方案的任何线性向量组合,并基于线性系统获得另一个同等(数学)有效的解决方案。

A = [0.1195952380, 0.2552619050, 0.3235000000,...
     0.1289285710, 0.6675476190, -0.0770000000,...
     0.1973809520];

null(A)
ans =
   -0.3070   -0.3891   -0.1551   -0.8029    0.0926   -0.2374
    0.9176   -0.1044   -0.0416   -0.2155    0.0249   -0.0637
   -0.1044    0.8676   -0.0528   -0.2731    0.0315   -0.0808
   -0.0416   -0.0528    0.9790   -0.1089    0.0126   -0.0322
   -0.2155   -0.2731   -0.1089    0.4364    0.0650   -0.1666
    0.0249    0.0315    0.0126    0.0650    0.9925    0.0192
   -0.0637   -0.0808   -0.0322   -0.1666    0.0192    0.9507

null(A)的列是null子空间的这些基础向量。事实证明,有时反斜杠解决方案不是首选,因为它有点随意地选择要设置为零的元素。另一种解决方案是使用pinv(A)* b0。

pinv(A)
ans =
    0.1730
    0.3693
    0.4680
    0.1865
    0.9657
   -0.1114
    0.2855

pinv(A)*b0
ans =
    0.2985
    0.6370
    0.8073
    0.3217
    1.6659
   -0.1922
    0.4926

pinv(A)是A的Moore-Penrose伪逆。它使用奇异值分解来产生该结果,因此它通常比反斜杠慢,但这里的差异将是微不足道的。有时感兴趣的pinv解决方案的特征是它具有所有可能的解决方案中最小的规范。

b0 = 1.7250238100;
norm(A\b0)
ans =
    2.5841

norm(pinv(A)*b0)
ans =
    2.0748

一种解决方案比另一种更好吗?并不是的。有时我们关心差异,你可能会选择其中一个而不是另一个。但是,如果你只有一个等式,那么你必须接受任何可能的解决方案可能与其他解决方案一样好。

我们当然可以选择BAD解决方案。例如,下一个解决方案在理论上是一个同样有效的选择,如果是一个愚蠢的选择:

x2 = x1 + null(A)*10*randn(6,1)
x2 =
         -4.09413481014061
          13.5483342562954
          13.4850200598594
          6.44121071558247
         -13.4923071847226
           7.3358845464619
           15.883243834012

我选择添加A的零空间向量的随机线性组合。看起来它给出了相同的解A * x2。

A*x2
ans =
                1.72502381

但是当我们减去b0时,我们看到x2中较大的系数是个问题。这些系数在那些最低有效位中具有夸大的噪声,从而产生了一种微妙的解决方案。

A*x2 - b0
ans =
      6.66133814775094e-16

将其与其他解决方案的残差进行比较,我们发现它可能更糟糕。

A*x0 - b0
ans =
     0

A*x1 - b0
ans =
      2.22044604925031e-16

当然,因为eps是

eps
ans =
      2.22044604925031e-16

这是我们对这个问题的希望的极限。

当然,如果你有更多的方程而不是未知数(这里的行多于A中的列数)并且A是满秩的,那么这两个解应该与数字垃圾中的相同。这是您所阅读的内容,但这仅适用于过度确定的问题。你的问题不是过分确定,而是不明确的。

答案 3 :(得分:1)

您的系统不确定。也就是说,有无限多的解决方案。

假设您的A列的行数比mm

反斜杠运算符通过将解决方案的一些pinv未确定的组件设置为零来处理这些系统,参见这Source

相反,A^+返回最有可能具有不同零模式的A的{​​{1}}逆。

这就是为什么你在pinv\中对欠定系统存在差异的原因。对于超定系统,这些运营商确实给出了相同的解决方案。