2012-04-13 40 views
0

我有方程 * X =的b使用普通最小二乘(OLS)

尺寸甲是矩陣尺寸的n×m個,X是MX 1和b是nx 1. A具有比列更多的行(n < m)。

我知道是一個和由於n!= M,一個沒有逆。 我知道的是兩個載體xb。基本上,我想找到接近於零的(A * x-b)的A

最小二乘看起來是合適的,但我不確定如何繼續,因爲它似乎不遵循我的課本或wikipedia entry;通常矩陣A是已知的。如果OLS不合適,會是什麼? Singluar價值分解?請再次指出,我的線性代數是生鏽的。

希望能夠實現這個(python/C)。指向良好的可讀代碼?

回答

1

對此有無限多的解決方案,沒有什麼像複雜的奇異值分解那樣複雜。

如果n = m,那麼A可能只是一個對角矩陣,但你有n> m。所以我們不能這麼簡單。

我們可以把這看作是找到n個獨立向量(A行)的問題,這樣當你用x形成它們的點積時,它們就產生了b的對應元素。因此A * x = b(解決方案將是精確的)等同於查找A的行,使得如果A_i是A的第i行,則點(A_i,x)= b(i)。

以這種方式看,解決方案顯而易見!顯而易見,它顯示了爲什麼沒有「解決方案」,但無限多的這樣的解決方案,所有這些都很微不足道。

因此,例如,選擇非零的x的ANY元素。說它是第k個元素。然後創建A_i作爲全零的向量,除了相應的選定的非零元素x。

A_i(k) = b(i)/x(k) 

A_i的所有其他元素都是零。所以現在,形成點積。看到A * x = b是由一個只有一個非零列的矩陣X精確求解的,而該列是一個相當平凡的列。

+0

如果我期望A的任何一行大部分非零,我的問題會受到限制嗎? – bushbo 2012-04-13 21:34:32

+1

不需要解決。您可以爲A的大多數列提供幾乎任何值,並且仍然有解決方案。事實上,你可以從任何你喜歡的發行版中選擇隨機數字,但只能選擇一列。根據你的說法,根本沒有可行的方法來選擇智能解決方案。而且還不需要任何複雜的因子分解。 – 2012-04-14 01:50:29