線性最小二乘法的矩陣解法


1.公式推導

PPT參考自:中國科學院的PPT ,矩陣解的具體推導過程見博客

其中殘差函數矩陣 f(c) 求導的過程推導如下,需要用到矩陣求導的2條結論

 

2.兩種最小二乘法的平面擬合MATLAB代碼對比

1)用傳統的∑方式求平面方程z=ax + by + c的參數

 1 function [ a,b,c ]=FitPlane( input_X , input_Y , input_Z)
 2 
 3 % FileName   : FitPlane
 4 % CreatDate  : 2018/7/10
 5 % Describe    : Least square fitting plane equation
 6 % OutputPara : a,b,c
 7 % Note         : Plane equation: z=a*x+b*y+c
 8 % Author       : wellp
 9 
10 X1=0;Y1=0;Z1=0;X2=0;Y2=0;X1Y1=0;X1Z1=0;Y1Z1=0;
11 num=length(input_X);
12 if num<3 % less than 3 points can't fit the plane
13     a=-8888;
14     b=-8888;
15     c=-8888;
16 else
17 for i=1 : num
18     X1=X1+input_X(i);
19     Y1=Y1+input_Y(i);
20     Z1=Z1+input_Z(i);
21     X2=X2+input_X(i)^2;
22     Y2=Y2+input_Y(i)^2;
23     X1Y1=X1Y1+input_X(i)*input_Y(i);
24     X1Z1=X1Z1+input_X(i)*input_Z(i);
25     Y1Z1=Y1Z1+input_Y(i)*input_Z(i);
26 end
27 
28 N=num;
29 C=N*X2-X1*X1;% X2!=X1*X1 !!!!!!!
30 D=N*X1Y1-X1*Y1;
31 E=-(N*X1Z1-X1*Z1);
32 G=N*Y2-Y1*Y1;
33 H=-(N*Y1Z1-Y1*Z1);
34 
35 a=(H*D-E*G)/(C*G-D*D);
36 b=(H*C-E*D)/(D*D-G*C);
37 c=(Z1-a*X1-b*Y1)/N;
38 
39 end
40 end
View Code

2)用矩陣的形式求解同樣的問題。用多組示例測試,2)求出的Xpara確實等於1)求出的 [a, b, c]。

 1 function [ Xpara ]=FitPlane( input_X , input_Y , input_Z)
 2 % FileName   : FitPlane
 3 % CreatDate  : 2018/7/10
 4 % Describe    : Least square fitting plane equation
 5 % OutputPara : Xpara
 6 % Note         : Plane equation: z=a*x+b*y+c
 7 % Author       : wellp
 8 
 9 X = input_X';
10 Y = input_Y';
11 I = ones(size(input_X'));
12 A = [X, Y, I];
13 b = input_Z';
14 Xpara = (A' * A) ^ -1 * A' * b; 
15 
16 end
View Code

蒼了天了,矩陣也太TM的簡潔了吧,上述問題的矩陣的推導如下:

 

3.線性最小二乘和非線性最小二乘的討論

1)概念區別

線性最小二乘問題:問題可以抽象成線性數學模型,例如直線擬合 y = ax + b、平面擬合 z = ax + by + c,這類線性問題也就可以寫成前述的矩陣形式

非線性最小二乘問題:問題為非線性數學模型,無法寫成前述的矩陣形式

2)正規方程

對於線性最小二乘問題:為了獲得更可靠的結果,測量次數 總要多於未知參數的數目 ,即所得誤差方程式的數目總是要多於未知數的數目。因而直接用一般解代數方程的方法是無法求解這些未知參數的。最小二乘法則可以將誤差方程轉化為有確定解的代數方程組(其方程式數目正好等於未知數的個數),從而可求解出這些未知參數。這個有確定解的代數方程組稱為最小二乘法估計的正規方程(或稱為法方程)。

3)解法區別

線性最小二乘問題:

a.可以直接通過對殘差函數求導數(偏導),令導數(偏導)等於0獲得殘差函數的極小值,進而解得待求參數

b.如果問題寫成了前述的矩陣形式,則求解矩陣即可。當參數矩陣較小時,可以直接解前述的正規方程ATAx=ATb,x = (ATA)-1ATb進行求解;當參數矩陣較大時,求逆矩陣的耗時較大,一般通過QR分解,Cholesky分解,SVD分解進行求解

非線性最小二乘問題:

無法直接寫出導數或者導數過於復雜;因為無法寫成矩陣的形式,也無法通過上述矩陣分解的方法求解。一般通過一階梯度法(最速下降法)、二階梯度法(牛頓法)、高斯牛頓法、LM(Levenberg-Marquardt Method)法進行迭代求解。


免責聲明!

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



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