2

在 MATLAB 中让我们输入

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

and

b0 = 1.7250238100;

如果我使用反斜杠运算符 as 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

4 回答 4

2

正如其他人所说,该系统尚未确定(如丹尼斯所说,尚未结束。)由于您有一些后续问题,让我更深入地讨论。

A 中有一行,你基本上有一个方程,有 7 个未知数。您基本上可以将这些未知数中的任何 6 个设置为零,然后求解第 7 个。这就是反斜杠的作用。它将选择未知数,使得结果对任何噪声的贡献最小,因此这里是 A 矩阵中具有最大绝对系数的未知数。这就是结果中第 5 个未知数不为零的原因。

事实上,解决方案将存在于 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) 的列是这些空子空间的基向量。事实证明,有时反斜杠解决方案不是首选,因为它有点武断地选择元素设置为零。另一种解决方案是使用 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

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

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

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 是满秩时,那么这两个解应该在数字垃圾中是相同的。这是您已阅读的内容,但这仅适用于过度确定的问题。您的问题不是过度确定,而是未确定。

于 2013-03-14T14:13:44.333 回答
2

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

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

A * x = b0

对于这个系统,你有 7 个未知数且只有一个方程(b0 是一个标量)。因此,正如Dennis所指出的那样,您的系统是未确定的,并且可以合理地期待几种不同(但等效)的解决方案。

于 2013-03-14T11:02:49.590 回答
2

您的系统非常不确定。

A\b0找到方程的一个解。

pinv(A)*b0只是找到了另一个解决方案。

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

您可以通过查看来检查它们是否相同

A*(A\b0) - A*(pinv(A)*b0)

实际上为零

于 2013-03-14T11:00:23.473 回答
1

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

假设您的Am多于行。

反斜杠运算符通过将m解的一些未确定分量设置为零来处理这些系统,参见。这个来源

相反,pinv返回的 Moore-PenroseA^+倒数A很可能具有不同的零模式。

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

于 2013-03-14T11:14:10.867 回答