4

下面的A*(A\D)的结果怎么可能不等于D线性方程的错误解法,或为什么A *(A B)不等于B?

enter image description here

它应该产生D - 这里是八度文档的摘录:

Systems of linear equations are ubiquitous in numerical analysis. To solve the set of linear equations Ax = b, use the left division operator, ‘\’: x = A \ b

下面是为那些谁想要尝试它的代码:

A = [1,1,1;0,0,0;2,1,2;2,1,2;3,5,6] 
D = [1;2;3;4;5] 
% A is of rank 3: 
rank(A) 
% therefore the system Ax=D has a unique solution 
x = A\D 
% but Octave has not given the good solution: 
A*x 

有人说我的Matlab产生完全相同的结果。

编辑2012年10月10日:看了答案后,让我地步,我做了一个严重的错误:索赔“A的秩是3,因此该系统斧= d有一个独特的解决方案”是绝对错误的!顺便说一下,上面显示的文档相当令人不安。

+0

为什么要'A *(A \ d)'是一样的'D'? – phimuemue

+0

@phimuemue因为这正是左分区操作符的目标。我编辑了我的帖子,添加了关于此运算符的文档内容。 –

回答

7

A具有5行,所以是D。他们都有3列。因此,你有一个包含3个变量的5个方程的超定系统。在大多数情况下,这意味着你无法准确地求解方程,因为你有太多限制。

一旦你这样做

x = A\D; 

你得到的最小二乘解。

0.8333 
-1.5000 
1.6667 

这是什么解决方案?这是最小化误差平方和的解决方案。让我们来计算误差:

r = A*x-D; 
    totalError = sum(r.^2); 

这意味着你将无法找到任何x这样sum(sqr(A*x-D))有更小的误差。

小备注:在你的情况,你也有零点一排 - 这会导致方程的实际数量成为4

让我们在A*(A\D)再看一看:

>> A* (A\D) 

ans = 

    1.0000 
     0 
    3.5000 
    3.5000 
    5.0000 

,看起来熟悉!非常接近[1; 2; 3; 4; 5]。第一行和最后一行是相同的。第二个是零,因为你放了一行零。在第3和第4行,你必须精确地在一个相同的路线,但B中不同的值,对应于

2*x+ 1*y + 2*z = 3; 
2*x+ 1*y + 2*z = 4; 

而且你已经得到了他们的平均!这是有道理的,因为平均值是将距离总和最小化为3和4的值。


下面是一个简单的例子,假设你想求解方程的以下系统:

x = 1; 
    x = 2; 

显然,x不能12在同一时间。该误差平方和最小的解决方案是1.5

A = [1;1]; 
    b = [1;2]; 
    A\b 
    ans = 
    1.5000 
+1

Upvoted,但我注意到'x = A \ D'应该返回'[0.833; -1.5; 1.9997]' –

+0

@ChrisTaylor,我的错误,谢谢! –

+0

我意识到我的评论也有错误,但是您似乎已经注意到并纠正了它:) –

2

你的系统A是超定的(A是矩形的),因此你do not solve your system exactly

Rectangular Matrices If A is rectangular, mldivide returns a least-squares solution. MATLAB solves overdetermined systems with QR factorization (see qr). For an underdetermined system, MATLAB returns the solution with the maximum number of zero elements.

+0

谢谢! Octave文档不太精确。 –

+0

@StéphaneLaurent然后请提交文档的补丁所有手册章节在这里http://hg.savannah.gnu.org/hgweb/octave/file/default/doc/interpreter在http://向bug跟踪器提交补丁savannah.gnu.org/bugs/?func=additem&group=octave – carandraug

+0

@carandraug我不明白如何在第一个链接中使用这些文件。我谈到的文档如下:http://www.gnu.org/software/octave/octave.pdf(第1.2.4节)。它只声称左边的分部操作员解决线性系统。 –

相关问题