matlab之数据拟合
擬合介紹:
所謂數據擬合是求一個簡單的函數,例如是一個低次多項式,不要求通過已知的這些點,而是要求在整體上“盡量好”的逼近原函數。這時,在每個已知點上就會有誤差,數據擬合就是從整體上使誤差,盡量的小一些。
多項式擬合
n次多項式:g(x)=c1xn+c2xn?1+?+cn+1g(x)=c1xn+c2xn?1+?+cn+1
曲線與數據點的殘差為:ri=yi?g(xi),i=1,2,?,Lri=yi?g(xi),i=1,2,?,L
殘差的平方和為:R=∑i=1Lr2iR=∑i=1Lri2
為使其最小化,可令R關于cjcj的偏導數為零,即:?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]
多項式擬合MATLAB命令:polyfit
**格式:**p=polyfit(x,y,n)
例1:已知的數據點來自f(x)=(x2?3x=5)e?5xsinxf(x)=(x2?3x=5)e?5xsin?x,用多項式擬合的方法在不同的階次下進行擬合。
擬合該數據的3次多項式:
繪制擬合曲線:
>> 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')
就不同的次數進行擬合:
擬合最高次數為8的多項式:
Taylor冪級數展開:
不能運行 >> 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多項式表示數據模型是不唯一的,即是兩個多項式函數完全不同。在某一區域內其曲線可能特別近似。
例2:對f(x)=1/(1+25x2),?1≤x≤1f(x)=1/(1+25x2),?1≤x≤1進行多項式擬合,
多項式擬合的效果并不一定總是很精確的。
用Taylor冪級數展開效果將更差
多項式擬合效果
>> x1=-1:0.01:1; >> ya=1./(1+25*x1.^2); >> y1=subs(p,x,x1); >> plot(x1,ya,'--‘,x1,y1)函數線性組合的曲線擬合方法
已知某函數的線性組合為: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)為已知函數
c1,c2c3.....cnc1,c2c3.....cn為待定系數
假設已經測出數據(x1,y1),(x2,y2),.....(xM,yM)(x1,y1),(x2,y2),.....(xM,yM)
則可建立如下的線性方程
Ac=yAc=y
例3:
直接擬合ci參數:
例4:
分別對x,y進行對數變換:
例5:
最小二乘曲線擬合
格式: [a, jm]=lsqcurvefit(Fun,a0,x,y)
例6:
由下面語句生成一組數據,其中ai為待定系數,
得出待定系數向量:
>> [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修改最優化選項:
不能運行 >> 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’)跑出圖片
總結
以上是生活随笔為你收集整理的matlab之数据拟合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux硬盘分区
- 下一篇: matlab拟合心得体会,Matlab数