設有n個資料點Pi(xi,yi,zi).
假設平面方程為:a*x+b*y+c*z+d=0,其中a、b、c、d為待定系數a、b、c不能同時為0.
顯然,a*x+b*y+c*z+d=0與
k*a*x+k*b*y+k*c*z+k*d=0(k≠0)
表示同一個平面.故,如d不為0,可通過把方程兩邊同除以d,把常數項化為1;但d=0時,情況稍微複雜一點.
現在說明大緻思路,為讨論友善,開始時暫不假設d=1或0.
設拟合平面的方程為∏:a*x+b*y+c*z+d=0.
資料點Pi到平面a*x+b*y+c*z+d=0的距離設為di,
則di^2=(a*xi+b*yi+c*zi+d)^2/(a^2+b^2+c^2),
令L=∑di^2 (i=1,...,n),為目标函數,現欲使L最小.
L可以看成是關于(a,b,c,d)的函數((xi,yi,zi)均已知),
L取最小值的一個必要(非充分)條件是:
∂L/∂a=0,∂L/∂b=0,∂L/∂c=0,∂L/∂d=0,
∂L/∂a=∑2*xi*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)
=A1*a+B1*b+C1*c+D1*d,
其中,
A1=2/(a^2+b^2+c^2)*(∑xi^2)(i=1,...,n),
B1=2/(a^2+b^2+c^2)*(∑xi*yi)(i=1,...,n),
C1=2/(a^2+b^2+c^2)*(∑xi*zi)(i=1,...,n),
D1=2/(a^2+b^2+c^2)*(∑xi)(i=1,...,n),
同理,
∂L/∂b=A2*a+B2*b+C2*c+D2*d,
∂L/∂c=A3*a+B3*b+C3*c+D3*d,
其中,
A2=2/(a^2+b^2+c^2)*(∑yi*xi)(i=1,...,n),
B2=2/(a^2+b^2+c^2)*(∑yi^2)(i=1,...,n),
C2=2/(a^2+b^2+c^2)*(∑yi*zi)(i=1,...,n),
D2=2/(a^2+b^2+c^2)*(∑yi)(i=1,...,n),
A3=2/(a^2+b^2+c^2)*(∑zi*xi)(i=1,...,n),
B3=2/(a^2+b^2+c^2)*(∑zi*yi)(i=1,...,n),
C3=2/(a^2+b^2+c^2)*(∑zi^2)(i=1,...,n),
D3=2/(a^2+b^2+c^2)*(∑zi)(i=1,...,n),
∂L/∂d=∑2*(a*xi+b*yi+c*zi+d)/(a^2+b^2+c^2) (i=1,...,n)
=D1*a+D2*b+D3*c+D4*d,
其中,D4=2n/(a^2+b^2+c^2).
于是有方程組:
A1*a+B1*b+C1*c+D1*d=0,
A2*a+B2*b+C2*c+D2*d=0,
A3*a+B3*b+C3*c+D3*d=0,
D1*a+D2*b+D3*c+D4*d=0,
解此方程組即可.具體如何解,可參考計算方法的書,上面有詳細說明.
千萬注意:上述矩陣的秩rank<=3, 會的人立刻明白怎麼結算了,不會的留言吧.