在科學計算和工程應用中,經常會遇到需要擬合一系列的離散數據,最近找了很多相關的文章方法,在這里進行總結一下其中最完整、幾乎能解決所有離散參數線性擬合的方法
第一步:得到散點數據
根據你的實際問題得到一系列的散點
例如:
x=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';%加上一撇表示對矩陣的轉置
y=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
第二步:確定函數模型
根據上述的實際散點確定應該使用什么樣的曲線,或者說是想要模擬的曲線
t=[3.2,3.6,3.8,4,4.2,4.8,5,5.4,6.2,6.4,6.6,6.9,7.1]';
tt=[0.38,0.66,1,0.77,0.5,0.66,0.83,1,0.71,0.71,1,0.87,0.83]';
plot(t,tt,'.');%得到散點圖
matlab中現成的函數:ployfit()
定義:polyfit函數是matlab中用于進行曲線擬合的一個函數。其數學基礎是最小二乘法曲線擬合原理。曲線擬合:已知離散點上的數據集,即已知在點集上的函數值,構造一個解析函數(其圖形為一曲線)使在原離散點上盡可能接近給定的值。
調用方法:polyfit(x,y,n)。用多項式求過已知點的表達式,其中x為源數據點對應的橫坐標,可為行向量、矩陣,y為源數據點對應的縱坐標,可為行向量、矩陣,n為你要擬合的階數,一階直線擬合,二階拋物線擬合,并非階次越高越好,看擬合情況而定。
matlab polyfit 做出來的值從左到右表示從高次到低次的多項式系數。
例子:
x = (0: 0.1: 2.5)';
y = erf(x);
p = polyfit(x,y,6)
p =
0.0084 -0.0983 0.4217 -0.7435 0.1471 1.1064 0.0004
則y=0.0084x^6-0.0983x^5+0.4217x^4-0.7435x^3+0.1471x^2+1.1064x+0.0004
完整例子程序:
%二項式擬合
t=[3.2,3.6,3.8,4,4.2,4.5,4.8,5,5.3,5.4,5.6,5.8,6,6.2,6.4,6.6,6.9,7.1];
y=[0.38,0.66,1,0.77,0.5,0.33,0.66,0.83,0.33,1,0.33,0.5,0.33,0.71,0.71,1,0.87,0.83];
plot(t,y,'.');
hold on
p=polyfit(t,y,2)
y1=polyval(p,t);
axis([0,8,0,1]);
plot(t,y1)
%plot是畫圖函數
%polyval是求值函數
%polyfit是曲線擬合函數
%polyfit用于多項式曲線擬合
%p=polyfit(x,y,m)
%其中, x, y為已知數據點向量, 分別表示橫,縱坐標, m為擬合多項式的次數, 結果返回m次擬合多項式系數, 從高次到低次存放在向量p中.
%y0=polyval(p,x0)
%可求得多項式在x0處的值y0
結果:另外可以自行加上對應的橫縱坐標內容,這里就不多說了。
總結一下matlab非線性擬合散點圖的過程:得到散點數據=>確定線性函數模型=>求解函數模型的待定系數=>得到擬合函數的具體形式=>畫出擬合圖像