正如其他人所说,该系统尚未确定(如丹尼斯所说,尚未结束。)由于您有一些后续问题,让我更深入地讨论。
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 是满秩时,那么这两个解应该在数字垃圾中是相同的。这是您已阅读的内容,但这仅适用于过度确定的问题。您的问题不是过度确定,而是未确定。