matlab之数据拟合
擬合介紹:
所謂數(shù)據(jù)擬合是求一個簡單的函數(shù),例如是一個低次多項(xiàng)式,不要求通過已知的這些點(diǎn),而是要求在整體上“盡量好”的逼近原函數(shù)。這時(shí),在每個已知點(diǎn)上就會有誤差,數(shù)據(jù)擬合就是從整體上使誤差,盡量的小一些。
多項(xiàng)式擬合
n次多項(xiàng)式:g(x)=c1xn+c2xn?1+?+cn+1g(x)=c1xn+c2xn?1+?+cn+1
曲線與數(shù)據(jù)點(diǎn)的殘差為:ri=yi?g(xi),i=1,2,?,Lri=yi?g(xi),i=1,2,?,L
殘差的平方和為:R=∑i=1Lr2iR=∑i=1Lri2
為使其最小化,可令R關(guān)于cjcj的偏導(dǎo)數(shù)為零,即:?R?cj=0,j=1,2,?,n+1?R?cj=0,j=1,2,?,n+1
或:
∑j=1n+1(∑i=1Lx2n+2?j?ki)cj=∑i=1Lxn+1?kiyi,k=1,2,?,n+1∑j=1n+1(∑i=1Lxi2n+2?j?k)cj=∑i=1Lxin+1?kyi,k=1,2,?,n+1
或矩陣形式:
[∑i=1Lx2ni∑i=1Lx2n?1i.∑i=1Lxni?∑i=1Lx2n?1i..∑i=1Lxn?1i?....?∑i=1Lxni..∑i=1Lx0i]?????c1c2.cn+1?????=??????????????∑i=1Lxniyi∑i=1Lxn?1iyi.∑i=1Lyi??????????????[∑i=1Lxi2n∑i=1Lxi2n?1.∑i=1Lxin∑i=1Lxi2n?1..∑i=1Lxin?1....∑i=1Lxin..∑i=1Lxi0][c1c2.cn+1]=[∑i=1Lxinyi∑i=1Lxin?1yi.∑i=1Lyi]
多項(xiàng)式擬合MATLAB命令:polyfit
**格式:**p=polyfit(x,y,n)
例1:已知的數(shù)據(jù)點(diǎn)來自f(x)=(x2?3x=5)e?5xsinxf(x)=(x2?3x=5)e?5xsin?x,用多項(xiàng)式擬合的方法在不同的階次下進(jìn)行擬合。
擬合該數(shù)據(jù)的3次多項(xiàng)式:
繪制擬合曲線:
>> x=0:.01:1; >>ya=(x.^2-3*x+5).*exp(-5*x).*sin(x); >> y1=polyval(p3,x); >>plot(x,y1,x,ya,x0,y0,'o')
就不同的次數(shù)進(jìn)行擬合:
擬合最高次數(shù)為8的多項(xiàng)式:
Taylor冪級數(shù)展開:
不能運(yùn)行 >> syms x; y=(x^2-3*x+5)*exp(-5*x)*sin(x); >> vpa(taylor(y,9),5) ans = 9.*x-29.*x^2+77.667*x^3-142.*x^4+192.17*x^5-204.96*x^6+179.13*x^7-131.67*x^8多項(xiàng)式表示數(shù)據(jù)模型是不唯一的,即是兩個多項(xiàng)式函數(shù)完全不同。在某一區(qū)域內(nèi)其曲線可能特別近似。
例2:對f(x)=1/(1+25x2),?1≤x≤1f(x)=1/(1+25x2),?1≤x≤1進(jìn)行多項(xiàng)式擬合,
多項(xiàng)式擬合的效果并不一定總是很精確的。
用Taylor冪級數(shù)展開效果將更差
多項(xiàng)式擬合效果
>> x1=-1:0.01:1; >> ya=1./(1+25*x1.^2); >> y1=subs(p,x,x1); >> plot(x1,ya,'--‘,x1,y1)函數(shù)線性組合的曲線擬合方法
已知某函數(shù)的線性組合為:g(x)=c1f1(x)+c2f2(x)+c3f3(x)+....+cnfn(x)g(x)=c1f1(x)+c2f2(x)+c3f3(x)+....+cnfn(x)
其中f1(x)f2(x)f3(x).....fn(x)f1(x)f2(x)f3(x).....fn(x)為已知函數(shù)
c1,c2c3.....cnc1,c2c3.....cn為待定系數(shù)
假設(shè)已經(jīng)測出數(shù)據(jù)(x1,y1),(x2,y2),.....(xM,yM)(x1,y1),(x2,y2),.....(xM,yM)
則可建立如下的線性方程
Ac=yAc=y
例3:
直接擬合ci參數(shù):
例4:
分別對x,y進(jìn)行對數(shù)變換:
例5:
最小二乘曲線擬合
格式: [a, jm]=lsqcurvefit(Fun,a0,x,y)
例6:
由下面語句生成一組數(shù)據(jù),其中ai為待定系數(shù),
得出待定系數(shù)向量:
>> [xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y); xx',res Optimization terminated successfully:Relative function value changing by less than OPTIONS.TolFunans =0.12000.21300.54000.17001.2300 res =1.7927e-16修改最優(yōu)化選項(xiàng):
不能運(yùn)行 >> ff=optimset; ff.TolFun=1e-20; ff.TolX=1e-15; % 修改精度限制 >> [xx,res]=lsqcurvefit(f,[1,1,1,1,1],x,y,[],[],ff); xx‘,res % []變量界 Optimization terminated successfully:Relative function value changing by less than OPTIONS.TolFun ans =0.12000.21300.54000.17001.2300 res =9.5035e-021
例7:
求解
a=lsqcurvefit('c8f3',[1;2;2;3],x,y); a' Maximum number of function evaluations exceeded;increase options.MaxFunEvals ans =2.4575 2.4557 1.4437 2.0720繪制曲線:
>> y1=c8f3(a,x); plot(x,y,x,y1,’o’)跑出圖片
總結(jié)
以上是生活随笔為你收集整理的matlab之数据拟合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux硬盘分区
- 下一篇: matlab拟合心得体会,Matlab数