工作需求,這裏記錄一下數值插值和數值分析方面的算法,希望和大家一起進步。
曲線擬合的最小二乘定義
求一條曲線,使數據點均在離此曲線的上方或下方不遠處,所求的曲線稱爲擬合曲線,
它既能反映數據的總體分佈,又不至於出現局部較大的波動,更能反映被逼近函數的特性,
使求得的逼近函數與已知函數從總體上來說其偏差按某種方法度量達到最小,
這就是最小二乘法.
與函數插值不同,曲線擬合不要求曲線通過所有已知點,而是要求得到的近似函數能反映數據的基本關係,
在某種意義上,曲線擬合更有實用價值.
已知離散觀測數據點f(x):(x0,y0)、(x1,y1)、(x2,y2)⋯(xn,yn),求得曲線擬合函數p(x),記p(x)在xi處的殘差爲:ϵi=p(xi)−f(xi)(i=0,1,2⋯,n)記向量e=[ϵ0,ϵ1⋯,ϵn]若e的2−範數:Σi=0nϵi2=Σi=0n[p(xi)−f(xi)]2爲最小則p(x)爲最小二乘法擬合得來的曲線.
最小二乘法–多項式擬合
條件:
對於給定的一組數據(xi,yi),i=1,2,...,m,尋求次數不超過n(n<<m)的多項式:y=a0+a1x+a2x2+...+anxn來擬合給定的數據,使偏差的平方和Q=Σi=1m(yi−Σj=0najxij)2爲最小.
Q可以看做是關於係數a的多元函數,所以擬合多項式的構造問題可歸結爲多元函數的極值問題:
∂ak∂Q=0,k=0,1,2,...,n即:Σi=1m(yi−Σj=0najxij)xik=0,k=0,1,2,...,n
上式是關於係數a的線性方程組,有唯一解.
算法示例
多項式擬合–直線擬合
取數據點:
(1,1),(2.5,2),(3,3.3),(3.5,4),(5.6,5),(9,8),(11,9)設擬合曲線p(x)=a0+a1x
求e -2範數關於a0,a1的偏導數,得到下列方程組:
⎩⎪⎨⎪⎧2Σi=1m(a0+a1xi−yi)=02Σi=1m(a0+a1xi−yi)xi=0得到:⎩⎪⎨⎪⎧a0m+a1Σi=1mxi=Σi=1myia0Σi=1mxi+a1Σi=1mxi2=Σi=1mxiyi
總共有7個數據點,取m=7,使用高斯消元法解上述方程組,解得:
a0=0.5466852879821776a1=0.7998090725877739
python圖像爲:
多項式擬合–拋物線擬合
設擬合曲線p(x)=ax2+bx+c
求e -2範數關於a,b,c的偏導數,三個方程,利用高斯消元法,即可解得拋物線方程。
步驟和直線擬合類似,不再敘述.