matlab插值与拟合例题_MATLAB中数据插值和数据拟合的用法
一、數據插值:
插值是在一組已知數據點的范圍內添加新數據點的技術。可以使用插值來填充缺失的數據、對現有數據進行平滑處理以及進行預測等。MATLAB 中的插值技術可分為適用于網格上的數據點和散點數據點。從數學上來說,數據插值是一種函數逼近的方法。
數據插值的實現方法:
1、一維插值函數為interp1(),
調用格式:
y = interp1(X,Y,X1,method)
該式可以根據X,Y的值來計算函數在X1處的值。其中X,Y是兩個等長的已知向量,分別表示采樣點和采樣值。X1是一個向量或標量,表示要插值的點。
method參數表示用于插值的方法,常用的取值由一下幾種方法:
(1) linear: 線形插值,默認方法。將與插值點靠近的兩個數據點用直線連接,然后在直線上選取對應插值點的數據。
(2) nearest: 最近點插值。 選擇最近樣本點的值作為插值數據。
(3) pchip: 分段3次埃爾米特插值。采用分段三次多項式,除滿足插值條件,還需滿足在若干節點處相鄰段插值函數的一階導數相等,使得曲線光滑的同時,還具有保形性。
(4) spline: 3次樣條插值。每一個分段你內構造一個三次多項式,使其插值函數除滿足插值條件外,還要求在各節點處具有連續的一階和二階導數。
>> x = [0,3,5,7,9,11,12,13,14,15];
>> y = [0,1.2,1.7,2.0,2.1,2.0,1.8,1.2,1.0,1.6];
>> x1 = 0:0.1:15;
>> y1 = interp1(x,y,x1,'spline');
>> plot(x1,y1)
以上四種方法的區別:
線形插值和最近點插值方法比較簡單。其中線形插值方法的計算量與樣本點n 無關。n越大,誤差越小。
3次埃爾米特插值和3次樣條插值都能保證曲線的光滑性。相比較而言,3次埃爾米特插值具有保形性,而3次樣條插值要求其二階導數也連續,所以插值函數的性態更好。pchip和spline方法插值的區別?blog.csdn.net
MATLAB的二維插值函數為interp2(),
調用格式:y1 = interp2(X,Y,Z,X1,Y1,method)
其中X,Y兩個向量,表示兩個參數的采樣點,Z是采樣點對應的函數值。X1,Y1是連個標量或向量,表示要插值的點。指定的算法method計算二維插值。linear為雙線性插值算法(默認算法),nearest為最臨近插值,spline為三次樣條插值,cubic為雙三次插值。
關于數據插值下面有個優秀的總結:插值與擬合?blog.csdn.net
MATLAB中拉格朗日插值的實現:https://blog.csdn.net/m0_37395228/article/details/80874393?blog.csdn.net
MATLAB中牛頓插值的實現:https://blog.csdn.net/wenyusuran/article/details/41725983?blog.csdn.nethttps://blog.csdn.net/m0_37395228/article/details/80875351?blog.csdn.net
二、曲線擬合:
曲線擬合是一種函數逼近的方法。可以分為線形擬合和非線性擬合。
曲線擬合的原理:對于y = f(x),通過構造一個函數g(x)取逼近未知函數f(x),使得誤差在某種意義下達到最小。
一般使用多項式函數作為逼近函數,使用最小二乘法計算誤差最小。
曲線擬合的實現方法:
使用polyfit()函數,其功能為求得最小二乘擬合多項式系數。
(1)線形曲線擬合:
調用格式:
(1) P= polyfit(X,Y,m)
(2) [P,S] = polyfit(X,Y,m)
(3) [P,S,mu] = polyfit(X,Y,m)
上述式子中的X,Y樣本數據,m為擬合多項式的次數,一般為3次以內。
P為多項式的系數降冪向量,S為誤差數據,mu是一個二元向量,mu(1)是mean(X), mu(2) 是std(X).
>> x = [1.0 1.5 2.0 2.5 3.0]';
>> y = [0.9 1.7 2.2 2.6 3.0]';
>> a = polyfit(x,y,1) %次數1為一次線形擬合,相當于設定擬合函數為g(x) = a*x+b,求a和b
a =
1.0200 0.0400 %此處兩個值為上述g(x)的a和b值
>> xi = 1:0.1:3;
>> yi = polyval(a,xi); %polyval()函數相當于已知自變量xi和函數a求函數值
>> plot(x,y,'o',xi,yi);上述擬合之后的曲線和原數據點的分布關系如圖
>> x = [1.2 3.3 4.5 7.8 9.9 6.7 10.3 13.2 ];
>> y = [2.3 4.5 6.7 7.3 7.6 8.6 9.8 11.2 ];
>> [p,s,mu] = polyfit(x,y,1)
p =
2.6369 7.2500 %該處顯示擬合函數為g(x) = 2.6369*x+7.2500
s =
包含以下字段的 struct:
R: [2×2 double]
df: 6
normr: 2.7837
mu =
7.1125
3.9991
(2) 非線性曲線擬合:
1、fit():
對于非線性擬合時需要使用fittype()函數,該函數可以指定所要構造的擬合函數
如下面的例子中 ,我們想使用g(x)來擬合曲線,先使用fittype()函數將其指定該p,然后調用fit()函數來擬合
>> x = [1.0 1.5 2.0 2.5 3.0]';
>> y = [0.9 1.7 2.2 2.6 3.0]';
>> p = fittype('a*x+b*sin(x)+c');
>> f = fit(x,y,p)
f =
General model:
f(x) = a*x+b*sin(x)+c
Coefficients (with 95% confidence bounds):
a = 1.249 (0.9856, 1.512) %此處a,b,c為上述擬合函數的系數最優值
b = 0.6357 (0.03185, 1.24) %此處括號里顯示的為置信區間。詳見下文鏈接。
c = -0.8611 (-1.773, 0.05094)
>>plot(f,x,y);
由于曲線擬合只是對于曲線的逼近,其值并不一定確定,在逼近的時候會有誤差,置信區間實質上反應了值擺動的一個可能的范圍。置信區間_百度百科?baike.baidu.com
2、nlinfit():
調用格式:
f = nlinfit(x,y,fun,f0):
上式中,x和y為觀察數據的自變量和因變量,fun為待擬合的模型表達式,可以為y = f(x)的M文件的函數名,或者由inline()函數表示,y0是模型初始參數的估計值,計算后獲得的返回值y為最小二乘法估計得出的模型最佳系數。
[y,r,J] = nlinfit(x,y,fun,y0):
曲線擬合后的返回參數r為擬合的殘差,而J為殘差r對a的Jacobi向量構成的矩陣。
[……] = nlinfit(x,y,fun,y0,options):
參數options對擬合過程進行設置,其中包括Maxlter(最大迭代次數)、TolFun(函數參數平方和允許值)、TolX(擬合系數允許的誤差值)和Display(控制擬合過程的顯示,其中off表示不現實輸出、iter顯示每次迭代的結果、final只顯示最終結果、notify只在函數不收斂的時候顯示結果)
3、lsqcurvefit():
調用格式:
[a,rnorm,r,exitflag] = lfqcurvefit(fun,a0,X,Y,lb,ub,options):
其中fun為待擬合的模型表達式,可以為y = f(x)的M文件函數名,或者由inline()函數表示,a0為模型系數的初始估計值,lb和ub分別為擬合系數的預估下界和上界,參數options用于擬合過程設置,同函數nlinfit(),函數返回的參數中a為擬合估計系數,rnorm為誤差平方和,r為擬合模型的殘差,exitflag為運行情況。
--------------------------------------------------------------------------------
本文部分數據、代碼和方法介紹來源于網絡。
本文僅供大家參考學習,歡迎指正!
更多MATLAB學習資源請入QQ群:953314432。
總結
以上是生活随笔為你收集整理的matlab插值与拟合例题_MATLAB中数据插值和数据拟合的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android获取小程序音频时长,微信小
- 下一篇: 用jsp实现右导航窗格_手机导航如何投放