(1)polyfit函數
MATLAB的polyfit函數用於多項式擬合,其語法為:
p = polyfit(x, y, k);
其中,x,y分別是橫縱坐標向量,它們不僅元素個數相同,而且同為行向量或同為列向量。k為非負整數,是待擬合的多項式的最高次數。p是輸出項,為待擬合的多項式的系數向量(由高次到低次排列)。
例子:
在MATLAB的命令窗口輸入以下代碼:
>> x = [1, 2, 3, 4]; >> y = [3, 5, 7, 9]; >> p = polyfit(x, y, 1)
敲擊回車鍵,得到輸出結果:
p =
2.0000 1.0000
所以擬合得的函數就是:y = 2.0000X + 1.0000.
在進行多項式擬合時,必須注意的是,擬合的精度是有限的,一般而言,需要滿足以下條件:
記m為不重復的橫坐標的數目,則擬合次數k <= m - 1,在此前提下盡量使用低次多項式進行擬合。
(2)polyval函數
polyval,顧名思義就是“多項式的值”,該函數的功能是將已知數據代入擬合得的多項式求值。語法格式:
y = polyval(p, x);
其中,p是已經擬合的多項式(比如說(1)中的p),x是自變量組成的向量,y是所求值組成的向量。
例子:
在命令窗口輸入以下代碼:
>> clear >> x = [1, 2, 3]; >> y = [3, 5, 7]; >> p = polyfit(x, y, 1); %得到擬合多項式:y = 2*x + 1 >> t = [1, 2, 3, 4, 5]; >> s = polyval(p, t)
得到結果:
s =
3.0000 5.0000 7.0000 9.0000 11.0000
(3)計算多項式擬合的方差
已知原始數據x和y,擬合得到多項式p,判斷擬合效果好壞的一個重要指標是方差,方差的計算方法是
e = sum((y - polyval(p, x)).^2).
polyval(p, x)得到擬合值向量,y是真實值向量,兩者相減得到真實值和擬合值的差值向量,“.^2”表示對矩陣中的每一個元素進行平方運算,於是得到差值向量中每一個元素的平方,sum是求和函數,顯然就是求差值向量元素的平方和,而這就是方差。
例子:
編寫代碼求多項式:
>> x = [1, 2, 3, 4]; >> y = [4, 5, 6, 7]; >> p = polyfit(x, y, 1)
得到
p =
1.0000 3.0000
於是擬合的多項式為:y = 1.0000x + 3.0000
編寫代碼求方差:
>> e = sum((y - polyval(p, x)).^2)
得到方差:
e =
3.1554e-030
可見,方差≈0.表明擬合效果很好。