在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
但很多文档都谈到反斜杠运算符,说这两个操作都应该得到相同的答案。在这种情况下,为什么不是这样呢?
在这方面有人可以帮助我吗?
谢谢,
巴布。
答案 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
列的行数比m
多m
。
反斜杠运算符通过将解决方案的一些pinv
未确定的组件设置为零来处理这些系统,参见这Source。
相反,A^+
返回最有可能具有不同零模式的A
的{{1}}逆。
这就是为什么你在pinv
和\
中对欠定系统存在差异的原因。对于超定系统,这些运营商确实给出了相同的解决方案。