[數學學習與代碼]最小二乘法--多元線性方程求解


     最近看了一本線性代數,如下圖這個樣的。。。比較討厭的是這本書的排版賊難受,定義和定理加粗基本和沒加一樣,排版也過於緊密,看起來一度想棄書。

 

  重點不在這里,哈哈哈哈。

這幾天看完線代后,有一個粗略的理解后,菜雖然菜,但我還是想要倒騰倒騰。想起之前學過的最小二乘法,不過是一個二階的最小二乘法,也擼了代碼。但是學過線代后總是抑制不住體內的洪荒。。。(上個廁所去)

  N階線性方程如下:

         然后根據線性方程的最小二乘法來進行計算,首先寫出損失函數,設有一個樣本容量為k的樣本,使用n階函數(共有n+1個系數)去擬合,損失函數為L(xi)。

  解釋下:使用樣本中的數值yi減去理論數值f(xi)所獲得的差的平方。這樣就能獲得樣本與理論的差的平方,我們的目的是想讓每個差值可能的最小,也就是理論函數越接近樣本。

  現在需要把所有的樣本都進行該處理,並將所有的L(xi)進行求和處理獲得L函數。

  那么接下來討論目標,目標是為了盡可能使L最小,那么在函數中取得最小值應該是導數為0的位置,而這里是多元函數,那么我們需要進行偏導處理。

在此,我們先確定未知量與已知量,這里yi和xi是作為已知量,而a0, a1,a2.......an是作為未知量。

  那么開始求偏導(注意數學基礎,復合函數求偏導):

         好的,相信大家已經找出了規律來了。

  那么通用公式是:

  通共有N+1(注意n從0開始)個方程,我們再修改下方程,使其符合AX=B,注意這里A,X,B為矩陣:

  不妨設:

  那么相對應的矩陣為:

  那么接下來就是求解線性方程了!

  要求解AX=B方程,首先,我們得對方程的系數矩陣進行處理,使其成為上三角或者下三角,比如化成上三角,那么我們可以通過最后一個數據Xn+1·n+1×an=yixin,解出后進行遞歸處理出前面的元素:

  在此,使用的是高斯消元法來進行處理的,但注意高斯消元法中,使用某行去消去其他行的該行對角線上元素不能為0。當然也可以使用其他的比如LU法,雅克比法。

  最后,代碼自己使用C語言打的,放最后貼出。我們取一組數據來驗證下程序:

 代碼下載鏈接:https://files.cnblogs.com/files/inkhearts/multi_least_square_method.rar


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM