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節)。它只聲稱左邊的分部操作員解決線性系統。 –

相關問題