matlab——插值與擬合
@
目錄前言
插值和擬合都是要求通過已知的資料去尋求某個近似函式,使得近似函式與與已知資料有較高的擬合精度。本文將介紹兩者的區別,相應的演算法以及如何用matlab實現。
一、擬合
1.定義
已知一組(二維)資料,即平面上的n個點\((x_i,y_i)\),\(i=1,2,...,n\),\(x_i\)互不相同,尋求一個函式(曲線)\(y=f(x)\)
注意:擬合曲線不要求經過所有的資料點
2.三種判別準則
使偏差的絕對值最小;
使偏差的最大絕對值最小;
使偏差的平方和最小(即最小二乘法)。
3.最小二乘法
(1)一般形式
最小二乘法是解決擬合的最常用方法,基本思路是令
\[f(x)=a_1r_1(x)+a_2r_2(x)+...+a_mr_m(x )\]其中,\(r_k(x)\)為實現選定的一組線性無關的函式;\(a_k\)為待定係數\((k=1,2,...,m;m<n)\)
令
則有唯一解
證明略
(2)常用函式
直線:\(y=a_1x+a_2\)
多項式:\(y=a_1x^m+...+a_mx+a_{m+1}\)(m一般為2或3)
雙曲線(一支):\(y=\frac{a_1}{x}+a_2\)
指數曲線:\(y=a_1e^{a_2x}\)
注意:對於指數曲線,需要現轉化為線性函式
(3)matlab實現
解方程組方法:
\[J(a_1,...,a_m)=\sum\limits_{i=1}^{n}[f(x_i)-y_i]^2=||RA-Y||^2 \]易得
\[A=R\backslash Y \]注意是左除
多項式擬合方法:
a=polyfit(x0,y0,m); y=polyval(a,x);
其中\(x_0,y_0\)是要擬合的資料,\(m\)為擬合的多項式次數,\(a\)為擬合多項式
\[y=a(1)x^m+...,a(m)x+a(m+1) \]的係數向量\(a=[a(1),...,a(m),a(m+1)]\)。
二、插值
1.定義
在平面上給定一組離散點列,要求一條曲線,把這些點按次序連線起來,稱為插值。
注意:擬合曲線必須經過所有的資料點
2.方法
(1)分段線性插值
分段線性插值,字面意思,就是把相鄰兩點用直線連線起來,記作\(I_n(x)\)。那麼\(I_n(x)\)必經過所有資料點。\(I_n(x)\)可表示為\(I_n(x)=\sum\limits_{i=0}^{n}y_il_i(x)\),其中
\[l_i(x)= \begin{cases} \frac{x-x_{i-1}}{x_i-x_{i-1}},\quad x \in [x_{i-1},x_i],i\neq0 \\ \frac{x-x_{i+1}}{x_i-x_{i+1}}, \quad x \in [x_i,x_{i+1}] ,i\neq n \\ 0 \end{cases} \]\(I_n\)具有良好的收斂性,即當\(n \rightarrow \infty\)時,\(I_n(x)=f(x)\)
分段線性插值適用於大多數情況。但如果對函式的光滑性要求較高時,就需要使用其它方法。
(2)拉格朗日插值多項式
\[L(x)=\sum\limits_{i=0}^{n}y_il_i(x)=\sum\limits_{i=0}^{n}y_i(\prod\limits_{j=0,j\neq i}^{n}\frac{x-x_j}{x_i-x_j}) \](3)樣條插值
樣條插值的優勢在於產生的函式有連續的曲率,本質是一個具有一定光滑性的分段多項式。一般使用三次樣條插值。
3.matlab實現
(1)一維插值函式
y=interp1(x0,y0,x,'...');
'linear'//線性插值(預設)
'spline'//三次樣條插值
'nearest'//最近項插值
'cubic'//立方插值
\(x_0\)必須是單調的
(2)三次樣條插值
y=interp1(x0,y0,x,'spline');
y=spline(x0,y0,x);
pp=csape(x0,y0);
y=fnval(pp,x);
(3)二維插值
interp2(x0,y0,z0,x,y,'...');
pp=csape({x0,y0},z0),z=fnval(pp,{x,y});//三次樣條插值
用法同一維插值
總結
本篇文章只是非常非常非常粗略地介紹了插值與擬合及實現方法,省去了證明過程、函式的更多用法和優化等。歡迎指正。