我正在閱讀吉爾伯特·斯特朗 (Gilbert Strang)所著的《線性代數導論》一書。該部分稱為“正交基和 Gram-Schmidt ”。筆者多次強調一個事實,即與正交基它很容易和快速計算最小二乘解決方案,因為Q?*Q = I,這里Q是一個設計矩陣,正交基。所以你的方程變成了x? = Q?b。
我的印象是每次在應用最小二乘法之前計算 QR 分解是個好主意。但后來我想出了QR 分解的時間復雜度,結果是計算 QR 分解,然后應用最小二乘法比常規更昂貴x? = inv(A?A)A?b。
使用 QR 分解來加速最小二乘法沒有意義是對的嗎?或者我可能做錯了什么?
那么關于最小二乘法的 QR 分解的唯一目的是數值穩定性嗎?
uj5u.com熱心網友回復:
有很多方法可以做最小二乘;通常,這些在適用性、準確性和速度方面各不相同。
或許勞斯萊斯的方法就是用SVD。這可用于解決欠定(觀測數少于狀態)和奇異系統(其中 A'*A 不可逆)并且非常準確。它也是最慢的。
QR 只能用于解決非奇異系統(即我們必須有 A'*A 可逆,即 A 必須是滿秩的),雖然可能不如 SVD 準確,但速度也快得多。
正規方程即
compute P = A'*A
solve P*x = A'*b
是最快的(如果 P 可以有效計算,例如如果 A 是稀疏的,則可能有很大的差距)但也是最不準確的。這也只能用于解決非奇異系統。
不應該掉以輕心,也不應該將不準確視為某種學術幻想。如果您碰巧知道 ypu 將解決的問題表現良好,那么使用不準確的方法可能很好。但是否則不準確的例程很可能會失敗(即說有解決方案時沒有解決方案,或者更糟糕的是提出一個完全虛假的答案)。
我很困惑,您似乎建議在執行 QR 分解后形成和求解正規方程。在最小二乘中使用 QR 的常用方法是,如果 A 是 nObs x nStates:
decompose A as A = Q*(R )
(0 )
transform b into b~ = Q'*b
(here R is upper triangular)
solve R * x = b# for x,
(here b# is the first nStates entries of b~)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/351986.html
上一篇:Python中的高效求和
下一篇:使用numpy優化橫縱鄰接的計算
