matlab 曲线拟合
来源:互联网 发布:eia数据今天数据 编辑:程序博客网 时间:2024/04/30 07:16
在matlab中经常需要对数据进行曲线拟合,如最常见的多项式拟合,一般可以通过cftool调用曲线拟合工具(curve fit tool),通过图形界面可以很方便的进行曲线拟合,但是有些时候也会遇到不方便用图形工具。因此这里简单的记下两种常用的拟合方法。
1 多项式拟合(polyfit和polyval)
polyfit可以对数据进行拟合(自定义用几次多项式),返回相应的参数,然后用polyval生成拟合后的数据点,下面的例子中我们对抛物线y=3x2+6x+5进行拟合。
x = -5:0.1:5;y = 3*x.^2+6*x + 5 + randn(size(x));p = polyfit(x,y,2);yy = polyval(p,x); plot(x,y,'.');hold on;plot(x,yy,'r','LineWidth',2)
polyfit(x,y,2)中x表示自变量,y表示因变量,2表示用二次曲线(抛物线)进行拟合,得到的p其实是对应的参数估计值,yy为拟合数据点。另外在实验中还加了一个随机噪声。结果如图:
2 高斯函数的曲线拟合
高斯曲线也是很常要拟合的曲线,这里介绍一种直接用代码使用cftool拟合工具的方法,这种方法可以对许多自定义的函数进行拟合(例如用来做多项式拟合,但是这种方法要麻烦很多,远没有前一种方法多项式拟合方便)。下面的是一个简单的例子,其中还可以进行更复杂的设置,具体请help fit和fittype.
f = fittype('a*exp(-((x-b)/c)^2)');x = -10:0.2:10;y = 5*exp(-((x)/4).^2)+randn(size(x))*0.1;plot(x,y,'.')[cfun,gof] = fit(x(:),y(:),f);yy = cfun.a*exp(-((x-cfun.b)/cfun.c).^2);hold on;plot(x,yy,'r','LineWidth',2);
结果如下图:
此外,高斯曲线的拟合也可以通过转化为多项式拟合的方法实现,先将被拟合数据y取对数,然后用多项式拟合求出对应的参数。代码如下:
x = -10:0.2:10;y = 5*exp(-((x)/4).^2);lny = log(y);p = polyfit(x,lny,2);gauss.c = sqrt(-1/p(1));gauss.b = -p(2)/2/p(1);gauss.a = exp(p(3)-p(1)*gauss.b^2);yy = gauss.a*exp(-((x-gauss.b)/gauss.c).^2);plot(x,y,'.');hold on;plot(x,yy,'r','LineWidth',2)
结果如图所示,但是这种方法似乎只在没有噪声干扰时效果较好,如果存在噪声的干扰的话,那么这个估计不是最佳的(因为对数运算使不同区间的噪声影响不同),右图为加了噪声之后的情况.
分类: Matlab
1 0
- matlab曲线拟合
- Matlab曲线拟合
- matlab曲线拟合
- Matlab曲线拟合
- Matlab 曲线拟合
- Matlab曲线拟合
- matlab曲线拟合
- MATLAB-曲线拟合
- matlab曲线拟合
- matlab 曲线拟合
- matlab曲线拟合
- matlab曲线拟合
- matlab曲线拟合
- matlab 曲线拟合
- Matlab:非线性曲线拟合
- Matlab曲线拟合函数
- Matlab曲线拟合 最小二乘法 polyfit
- Matlab曲线拟合 最小二乘法
- 【HPU】[1736]老王修马路(二)
- 栈的运用(十进制转换八进制,括号匹配问题)
- 扣丁学堂笔记第07天高级UI组件(三)
- 内核态和用户态的区别
- Windows下用VS2013加载caffemodel做图像分类
- matlab 曲线拟合
- Intellj IDEA 启动参数调优
- javascript 事件整理
- (WIP)SSD上的I/O电梯算法与HugePage设置可能导致的Crash(by quqi99)
- grep用法
- 详解C#中的反射
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) B. Bear and Compressing
- 单片机设计经验设计技巧集锦
- 【HPU】[1737]老王特警队