1.線性函數(shù)擬合
先來看最簡單的例子辩尊,對于線性函數(shù)涛浙,可以使用最小二乘法來確定a、b兩個系數(shù)摄欲。對于N個點轿亮,x值對應函數(shù)值與y值的差值平方和(殘差平方和)作為目標函數(shù),分別對a胸墙、b求偏導我注,令偏導為0,得到兩個方程劳秋,聯(lián)立解得系數(shù)。
設有N個點坐標為,則殘差平方和為
玻淑,展開來就是
嗽冒,分別對a、b求偏導并令偏導為0得兩個方程:
聯(lián)立以上兩個方程即可求解补履。
2.可化成線性函數(shù)的曲線擬合
冪函數(shù)擬合添坊、雙曲線(在一三象限的那種形式)擬合、指數(shù)函數(shù)擬合箫锤、對數(shù)函數(shù)擬合贬蛙,都可以利用最小二乘法來解決。但是這些函數(shù)的偏導數(shù)可能很復雜谚攒,列出的方程組是非線性方程組阳准,解算較為困難。因此我們需要通過變換點坐標把這些曲線轉化為線性函數(shù)馏臭。
冪函數(shù)的一般方程為野蝇,兩邊取對數(shù)可變換為
,換元可得
括儒。對每個點(x,y)的x值和y值取對數(shù)可得到(x',y')绕沈,化為線性函數(shù)擬合問題。
雙曲線的一般方程為帮寻,兩邊取倒數(shù)可變換為
乍狐,換元得
。對每個點(x,y)的y值取倒數(shù)即可得到(x,y')固逗,化為線性函數(shù)擬合問題浅蚪。
指數(shù)函數(shù)的一般方程為,兩邊取自然對數(shù)可變換為
抒蚜,換元得
掘鄙。對每個點(x,y)的y值取對數(shù)即可得到(x,y'),化為線性函數(shù)擬合問題嗡髓。
對數(shù)函數(shù)的一般方程為操漠,換元得
。對每個點(x,y)的x值取對數(shù)即可得到(x',y)饿这,化為線性函數(shù)擬合問題浊伙。
3.系數(shù)間為線性關系的曲線擬合
再來看個例子,雖然這不是一個線性函數(shù)长捧,也不能通過坐標變換化成線性函數(shù)嚣鄙,但如果設x為常量,a串结、b哑子、c為變量舅列,則a、b卧蜓、c三個系數(shù)之間是線性關系的帐要,因此殘差平方和求偏導后得到的方程組依然是線性方程組。
設有N個點坐標為弥奸,則殘差平方和為
榨惠,展開來就是
,分別對a盛霎、b赠橙、c求偏導并令偏導為0得三個方程:
聯(lián)立以上三個方程即可求解。
典例:n階多項式擬合
n階多項式擬合同樣采用最小二乘法愤炸。大體思路是對于N個點期揪,用n+1個待定系數(shù)設出函數(shù),將殘差平方和作為目標函數(shù)摇幻,分別對n+1個系數(shù)求偏導横侦,令偏導為0,得到n+1個方程绰姻,聯(lián)立解得系數(shù)枉侧。
設有N個點坐標為,設n次函數(shù)
狂芋,則其殘差平方和為
榨馁,展開來就是
,設其對aj求偏導并令偏導等于0帜矾,得
翼虫,整理得
,可見j有n+1個取值屡萤,將n+1個點代入可以列出n+1個線性方程珍剑,利用線性代數(shù)知識可以解出系數(shù)值。
4.n階多項式擬合實例
本實例演示使用python進行n階多項式擬合死陆,線性函數(shù)擬合其實就是一階多項式擬合招拙,而非線性函數(shù)擬合實例則放到下一期進行講解。
1999-2004年長江排污量如下表:
年份 | 1995 | 1996 | 1997 | 1998 | 1999 | 2000 | 2001 | 2002 | 2003 | 2004 |
---|---|---|---|---|---|---|---|---|---|---|
排污量/億噸 | 174 | 179 | 183 | 189 | 207 | 234 | 220 | 256 | 270 | 285 |
用二次多項式來擬合以上數(shù)據措译,python代碼如下:
import numpy as np
from matplotlib import pyplot
num=int(input())
x=[]
y=[]
for i in range(0,num):
x.append(int(input()))
y.append(int(input()))
z1 = np.polyfit(x, y, 2)
z = np.polyval(z1, x)
print(z1)
pyplot.plot(x,y,'.')
pyplot.plot(x,z,'-')
pyplot.show()
得到模型為别凤,圖像如下: