MATLAB曲线拟合函数
生活随笔
收集整理的這篇文章主要介紹了
MATLAB曲线拟合函数
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、多項式擬合
- ployfit(x,y,n) :找到次數(shù)為 n 的多項式系數(shù),對于數(shù)據(jù)集合 {(x_i,y_i)},滿足差的平方和最小
- [P,E] = ployfit(x,y,n) :返回同上的多項式 P 和矩陣 E 。多項式系數(shù)在向量 p 中,矩陣 E 用在 ployval 函數(shù)中來計算誤差
- 某數(shù)據(jù)的橫坐標為 x= [0.2 0.3 0.5 0.6 0.8 0.9 1.2 1.3 1.5 1.8],縱坐標為 y = [1 2 3 5 6 7 6 5 4 1],對該數(shù)據(jù)進行多項式擬合
- 代碼
- 運行程序后,得到的 5 階多項式如下:
p5 =10.041x^5 + 58.244x^4 - 124.54x^3 + 110.79x^2 - 31.838*x + 4.0393 輸出結(jié)果如下:
可見,當采用 9 次擬合時,得到的結(jié)果與原數(shù)據(jù)符合的比較好。當使用函數(shù) polyfit() 進行擬合時,多項式的階次最大不超過 length(x) - 1
二、加權最小方差(WLS)擬合原理及實例
- 加權最小方差就是根據(jù)基礎數(shù)據(jù)本身各自的準確度的不同,在擬合的時候給每個數(shù)據(jù)以不同的加權數(shù)值。這種方法比單純最小方差方法要更加符合擬合的初衷
- 根據(jù) WLS 數(shù)據(jù)擬合方法,自行編寫使用 WLS 方法擬合數(shù)據(jù)的 M 函數(shù),然后使用 WLS 方法進行數(shù)據(jù)擬合
- 在 M 文件編輯器中輸入如下代碼:
- 將上面代碼保存為 “polyfits.m” 文件
- 使用上面的程序代碼,對基礎數(shù)據(jù)進行 LS 多項式擬合。在 MATLAB 的命令窗口輸入下面的程序
得到的擬合結(jié)果
LS 方法其實是 WLS 方法的一種特例,相當于將每個基礎數(shù)據(jù)的準確度都設為 1。但是,自行編寫的 M 文件和默認的命令結(jié)果不同
三、非線性曲線擬合
- 非線性曲線擬合是已知輸入向量 xdata,輸出向量 ydata,并知道輸入與輸出的函數(shù)關系為 ydata = F(x,xdata),但不清楚系數(shù)向量 x。進行曲線擬合急求 x 使得下式成立:
\(\displaystyle{min_x} \frac{1}{2}|| F(x,xdata)-ydata||_2^2 = \frac{1}{2}\displaystyle{\sum_i}(F(x,xdata_i) - ydata_i)^2\) - 在 MATLAB 中,可以使用函數(shù) curvefit 解決此類問題,其調(diào)用格式如下:
- x = lsqcurvefit(fun,x0,xdata,ydata):x0 為初始解向量,xdata,ydata 為滿足關系 ydata = F(x,xdata)的數(shù)據(jù)
- x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub):lb、ub 為解向量的下屆和上屆 lb <= x <= ub,若沒有指定界,則lb = [],ub = []
- x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options):options 為指定的優(yōu)化參數(shù)
- [x,resnorm] = lsqcurvefit(…):resnorm 是在 x 處殘差的平方和
- [x,resnorm,residual] = lsqcurvefit(…):residual 為在 x 處的殘差
- [x,resnorm,residual,exitflag] =lsqcurve(…):exitflag 為終止迭代的條件
- [x,resnorm,residual,exitflag,output] =lsqcurve(…) :output 為輸出的優(yōu)化信息
- 已知輸入向量 xdata 和輸出向量 ydata,且長度都是 n,使用最小二乘非線性擬合函數(shù):ydata(i) = x(1)·xdata(i)^2+x(2)·\sin(xdata(i))+ x(3)·xdata(i)^3
- 根據(jù)題意可知,目標函數(shù)為:\(min_x \frac{1}{2}\displaystyle{\sum_{i=1}^n}(F(x,xdata_i)-ydata_i)^2\)
- 其中:F(x,xdata) = x(1)·xdata^2+x(2)\sin(xdata)+x(3)·xdata^3
- 初始解向量定位 x0 = [0.3,0.4,0.1]
- 首先建立擬合函數(shù)文件 ex1024.m
- 再在命令行編寫函數(shù)擬合代碼;
- 結(jié)果為 \(x = \begin{matrix}0.2269 &0.3385 &0.3022\end{matrix} , resnorm = 6.2950\),即函數(shù)在 x = 0.2269、x = 0.3385、x = 0.3022 處殘差的平方和均為 6.295
- 當然了,還有一鐘好用的東西叫 cftool,簡直不要太簡潔,入門操作請看:MATLAB如何快速進行曲線擬合
轉(zhuǎn)載于:https://www.cnblogs.com/NikkiNikita/p/9464245.html
總結(jié)
以上是生活随笔為你收集整理的MATLAB曲线拟合函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 硬盘整数大小分区问题
- 下一篇: Gantt - attachEvent事